หลักการทำงานของ Shazam (2022)
(cameronmacleod.com)- Shazam ค้นหาเพลงจากการบันทึกเสียงผ่านไมโครโฟนเพียงไม่กี่วินาที โดยไม่ได้เปรียบเทียบเสียงทั้งหมด แต่สร้าง audio fingerprint แล้วค้นหาในฐานข้อมูล
- วิธีเลื่อน waveform ไปเทียบกันตรง ๆ ไม่เหมาะในทางปฏิบัติเมื่อมีเพลงระดับ 10 ล้านเพลง รวมถึง noise จากไมโครโฟน การเปลี่ยนแปลงของความดัง และเอฟเฟกต์ด้านความถี่
- ขั้นตอนหลักคือแปลงเสียงเป็น spectrogram หา peak ของความถี่ที่เด่น จากนั้นจัดเก็บคู่ของ peak เป็น hash เพื่อให้เปรียบเทียบได้รวดเร็ว
- peak มักยังคงอยู่ได้ค่อนข้างดีแม้มี noise และช่วยลดปริมาณข้อมูลที่ต้องจัดเก็บ แต่ต้องกระจายตัวอย่างสม่ำเสมอทั้งตามเวลาและความถี่ จึงจะรู้จำเพลงได้จากทุกช่วงของเพลง
- ขั้นตอนรู้จำจะนำค่าความต่าง Track time - Sample time ของ hash ที่ตรงกันมารวมเป็น histogram แล้วเลือกเพลงที่มีค่าไปรวมกันสูงสุดใน bin หนึ่งเป็นคำตอบ
ปัญหาที่ Shazam ต้องแก้
- Shazam เป็นแอปที่บันทึกเพลงที่กำลังเล่นอยู่รอบตัวเป็นเวลาสองสามวินาที แล้วค้นหาในฐานข้อมูลเพื่อแสดงผลลัพธ์
- ก่อนจะเป็นแอป Shazam เคยเป็น บริการผ่านหมายเลขโทรศัพท์
- ผู้ใช้ต้องโทรไปยังหมายเลขหนึ่ง แล้วถือไมโครโฟนของโทรศัพท์มือถือหันเข้าหาเพลง
- หลังจาก 30 วินาที Shazam จะวางสายและส่งข้อมูลเพลงที่กำลังฟังอยู่กลับมาทาง SMS
- ในปี 2002 คุณภาพการโทรของโทรศัพท์มือถือยิ่งทำให้การรู้จำเพลงยากขึ้น
- ถ้าเป็นตัวอย่างขนาดเล็ก อาจเลื่อนชิ้นส่วนเสียงไปบนแทร็กเต็มทีละน้อยเพื่อตรวจสอบว่าตรงกันหรือไม่
- แต่ถ้าไม่รู้ว่าเป็นเพลงไหนแล้วต้องค้นหาในฐานข้อมูล 10 ล้านเพลง เวลาที่ใช้จะเพิ่มขึ้นมาก
- sample จากไมโครโฟนจริงอาจมีรูปร่าง waveform เปลี่ยนไปจาก noise ฉากหลัง เอฟเฟกต์ด้านความถี่ และการเปลี่ยนแปลงของความดัง ทำให้การเปรียบเทียบแบบ sliding ง่าย ๆ มักไม่ตรงกัน
ภาพรวมของระบบทั้งหมด
- วิธีของ Shazam แบ่งเป็น flow register และ recognise
- register คือ flow สำหรับจัดเก็บเพลงเพื่อให้ค้นหาได้ในภายหลัง
- recognise คือ flow สำหรับค้นหาว่าช่วงเสียงสั้น ๆ เป็นเพลงใด
- ทั้งสอง flow ผ่านขั้นตอน preprocessing เหมือนกัน
- คำนวณ spectrogram ของเสียง
- หา peak ซึ่งเป็นองค์ประกอบความถี่ที่แรงที่สุดใน spectrogram
- จับคู่ peak แล้วสร้าง hash
- flow register จะจัดเก็บ hash ที่คำนวณได้ลงในฐานข้อมูล
- flow recognise จะนำ hash ที่สร้างจากเสียงใหม่ไปเปรียบเทียบกับ hash ในฐานข้อมูล แล้วระบุเพลงในขั้นตอน matching
การคำนวณ Spectrogram
- Fourier transform บอกได้ว่าในเสียงมีความถี่ใดบ้าง
- เมื่อนำ Fourier transform ไปใช้กับ sine wave 20Hz จะเห็น spike ขนาดใหญ่บริเวณใกล้ 20Hz
- sine wave มีความถี่เดียว จึงเรียกว่า pure tone ด้วย
- ผลลัพธ์ของ Fourier transform คือ frequency spectrum
- การแทนสัญญาณโดยยึดแกนเวลาเป็นหลักคือ time domain
- การแทนสัญญาณโดยยึดแกนความถี่เป็นหลักคือ frequency domain
- แกน Y ของ frequency spectrum แสดงความแรงขององค์ประกอบแต่ละความถี่ ยิ่งองค์ประกอบแรงเท่าไร ก็ยิ่งได้ยินชัดในสัญญาณ time-domain มากเท่านั้น
- เมื่อรวม sine wave หลายตัวเข้าด้วยกัน องค์ประกอบความถี่ของแต่ละ wave จะถูกรวมเข้าด้วยกัน
- ถ้าเพิ่ม sine wave 50Hz ที่มีความแรงครึ่งหนึ่งเข้าไปใน sine wave 20Hz จะเห็น spike 20Hz และ spike 50Hz ที่เล็กกว่า
- สัญญาณเสียงทั้งหมดสามารถสร้างขึ้นใหม่จาก wave ลักษณะนี้ได้
- frequency domain เผยข้อมูลที่มองเห็นได้ไม่ชัดใน time domain
- แม้มี noise เพิ่มเข้ามาจนรูปร่างใน time-domain เปลี่ยนไป แต่ใน frequency domain spike ของความถี่หลักอาจยังคงชัดเจน
- หากใช้ Fourier transform กับเพลงทั้งเพลงเพียงครั้งเดียว จะเห็นแค่ความแรงของความถี่โดยรวม แต่ความถี่ของเพลงจริงเปลี่ยนไปตามเวลา
- เมื่อตัดเพลงเป็นช่วงเล็ก ๆ ใช้ Fourier transform กับแต่ละช่วง แล้วนำมารวมกัน จะได้ spectrogram
- spectrogram แสดงเวลา ความถี่ และความแรงร่วมกัน โดยความแรงอาจแสดงด้วยสี
- ใน spectrogram ของตัวอย่าง “Like a Stone” จุดที่สว่างที่สุด หรือความถี่แรง ๆ ส่วนใหญ่ ปรากฏต่ำกว่า 5000Hz
- การกระจายแบบนี้พบได้ทั่วไปในเพลง และช่วงความถี่ของเปียโนส่วนใหญ่อยู่ที่ 27Hz-4186Hz
Fingerprint จาก Peak
- audio fingerprint เริ่มจากการหา peak ใน spectrogram
- peak คือองค์ประกอบความถี่ที่ใหญ่ที่สุด ณ ช่วงเวลาหนึ่ง
- ในเพลง เสียงที่ดังที่สุด ณ เวลานั้น เช่น โน้ตแรง ๆ ในโซโลกีตาร์ อาจกลายเป็น peak ได้
- peak ได้รับผลกระทบจาก noise ค่อนข้างน้อย
- หากต้องการทำให้ peak แยกแยะไม่ได้ noise จะต้องใหญ่กว่า peak นั้น
- peak ใน spectrogram คือองค์ประกอบความถี่ที่แรงที่สุดในแทร็ก
- การจัดเก็บเฉพาะ peak ช่วยลดปริมาณข้อมูลที่ต้องใช้สำหรับ fingerprint
- ไม่จัดเก็บข้อมูลความถี่ทั้งหมด เหลือไว้เฉพาะองค์ประกอบความถี่ที่ใหญ่ที่สุด
- ข้อมูลที่ต้องค้นหาน้อยลง ทำให้การค้นหา fingerprint เร็วขึ้น
- peak ต้องกระจายตัวอย่างสม่ำเสมอทั้งตามเวลาและความถี่
- หากไปรวมกันอยู่ด้านใดด้านหนึ่งของเวลา จะไม่สามารถรู้จำ sample จากช่วงอื่นของเพลงได้
- หากไปรวมกันในย่านความถี่แคบ ๆ noise เสียงดังในย่านเฉพาะ เช่น แตรรถยนต์ อาจเปลี่ยนการเลือก peak จนทำให้แยกแยะช่วงนั้นได้ยาก
การหา Peak ด้วย Maximum filter
- เพื่อหา peak ให้กระจายตัวสม่ำเสมอ สามารถใช้เทคนิค maximum filter จาก image processing ได้
- maximum filter จะหาค่าสูงสุดในบริเวณเพื่อนบ้านรอบแต่ละ pixel แล้วเปลี่ยน pixel นั้นให้เป็นค่า local maximum ดังกล่าว
- ตัวอย่างคือการดูบริเวณ 3x3 รอบแต่ละ pixel
- การประมวลผลนี้มีผลเหมือนการขยาย local peak ออกไปยังบริเวณรอบ ๆ
- maximum-filtered spectrogram ดูเหมือน spectrogram เดิมในเวอร์ชันความละเอียดต่ำ
- เพราะ peak ของสัญญาณถูกขยายออกไปกินพื้นที่ pixel อื่น
- box ที่มีสีเดียวกันสอดคล้องกับ local peak หนึ่งจุดในภาพต้นฉบับ
- maximum filter มีพารามิเตอร์ ขนาด box สำหรับหา local maximum
- ถ้าใช้ box ขนาดเล็ก จะได้ peak มากขึ้น
- ถ้าใช้ box ขนาดใหญ่ จะได้ peak น้อยลง
- ตำแหน่ง peak จะกู้คืนได้โดยหาจุดที่ค่าของ spectrogram เดิมและ spectrogram หลัง filtering เท่ากัน
- จุดที่ไม่ใช่ peak จะถูกเปลี่ยนเป็นค่า local peak ทำให้ค่าต่างไป
- เฉพาะจุดที่ค่ายังเหมือนเดิมเท่านั้นที่เป็น peak
- เมื่อนำ peak ทั้งหมดมาวาดรวมกัน จะได้ constellation map
- เรียกชื่อนี้เพราะดูเหมือนภาพท้องฟ้ายามค่ำคืน
- จำนวน peak ส่งผลโดยตรงต่อขนาดของ fingerprint
- หากต้องจัดเก็บเพลงหลายล้านเพลง การรักษาให้ fingerprint มีขนาดเล็กเป็นเรื่องสำคัญ
- การลดจำนวน peak จะทำให้ความแม่นยำลดลงด้วย และลดโอกาสที่ sample จะ matching กับเพลงที่ถูกต้อง
- วิธีลดจำนวน peak มีสองแบบ
- ใช้ peak อันดับบนสุด N จุด โดย N ควรแปรผันตามความยาวเสียง เพื่อไม่ให้เพลงสั้นถูกสุ่มตัวอย่างมากเกินไป
- ใช้ peak ทั้งหมดที่ใหญ่กว่า threshold ที่กำหนด วิธีนี้ไม่รับประกันขนาด fingerprint ต่อหน่วยเวลา แต่อาจแม่นยำกว่า
การทำคู่ Peak ให้เป็น Hash
- หาก fingerprint เป็นเพียงชุดของ peak เดี่ยว ๆ ใน spectrogram จำนวนข้อมูลซ้ำจะเพิ่มขึ้นอย่างรวดเร็ว
- หากแทนความถี่ของแต่ละ peak ด้วย 10bit จะสามารถแทนความถี่แยกกันได้ 2^10=1024 ค่า
- ถ้ามีจุดหลายพันจุดต่อแทร็ก จะเกิดการซ้ำจำนวนมาก
- ความเป็นเอกลักษณ์ ของ fingerprint เป็นสิ่งสำคัญ
- ยิ่งมีความเป็นเอกลักษณ์สูง การค้นหาก็ยิ่งเร็วขึ้น
- และช่วยให้รู้จำเพลงได้มากขึ้น
- วิธีของ Shazam สร้าง hash จาก คู่ของ peak ไม่ใช่ peak เดี่ยว
- hash ประกอบด้วยความถี่ของ peak สองจุดคือ fA, fB และความต่างเวลาระหว่าง peak ทั้งสองคือ ΔT
- หากแต่ละ peak มีข้อมูลความถี่ 10bit และ ΔT ก็แทนด้วย 10bit เช่นกัน จะมีข้อมูลรวม 30bit
- ความเป็นไปได้ 2^30=1,073,741,824 แบบ มากกว่าความเป็นไปได้ 1024 แบบของ point เดี่ยวมาก
- การสร้าง pair ใช้ anchor point และ target zone
- เลือก point หนึ่งเป็น anchor point
- คำนวณ target zone ของ spectrogram สำหรับ anchor point นั้น
- สร้าง pair ระหว่าง anchor point กับ point ทั้งหมดใน target zone
- บทความวิจัยของ Shazam ไม่ได้อธิบายรายละเอียดวิธีเลือก target zone
- ในภาพของบทความวิจัย target zone เริ่มที่เวลาหลัง anchor point เล็กน้อย และวางอยู่รอบความถี่ของ anchor point
- pair ที่สร้างขึ้นจะถูกจัดเก็บเป็น hash ในฐานข้อมูล
- องค์ประกอบของ hash คือ fA, fB, ΔT
- จัดเก็บข้อมูลเพิ่มเติมคือ Point A time และ Track ID
- Point A time และ Track ID ใช้ค้นหาช่วงเวลาเฉพาะของเพลงเฉพาะเพลงในขั้นตอน matching ภายหลัง
- ชุด hash ทั้งหมดของแทร็กหนึ่ง ๆ คือ fingerprint ของแทร็กนั้น
วิธี Matching
- flow recognise จะสร้าง fingerprint จาก sample แล้วเปรียบเทียบกับ fingerprint ที่จัดเก็บไว้แล้วในฐานข้อมูล
- อัลกอริทึม matching ดำเนินการเป็นสี่ขั้นตอน
- ดึง hash ทั้งหมดจากฐานข้อมูลที่ตรงกับ sample fingerprint
- group hash ตามเพลง
- ตรวจสอบว่า hash ของแต่ละเพลงเรียงตัวสอดคล้องกันตามเวลาหรือไม่
- เลือกแทร็กที่มี hash ที่เรียงตัวสอดคล้องกันมากที่สุด
- abracadabra ไม่ได้ค้นหา 3-tuple (fA, fB, ΔT) โดยตรง แต่จัดเก็บเป็นค่าเดียวที่
hash(fA, fB, ΔT)คืนกลับมา- แทนที่จะค้นหาสามค่าต่อ hash ก็สามารถค้นหาเพียงค่าเดียวได้
- hash แต่ละตัวในฐานข้อมูลเชื่อมกับ Track ID ทำให้ group ตามเพลงได้
- หลังจาก group แบบนี้แล้ว จึงให้คะแนนแต่ละแทร็กผู้สมัครได้
- หาก sample ตรงกับเพลงใดเพลงหนึ่ง hash ใน sample ควรเรียงตัวเข้ากับช่วงหนึ่งของเพลงต้นฉบับได้ดี
- noise อาจสร้าง peak ที่ดูเหมือน peak จากช่วงเวลาอื่นขึ้นมาใน sample
- hash อาจตรงกับเพลงผิดได้เช่นกัน
- ตรวจสอบการเรียงตัวโดยคำนวณค่า Track time - Sample time สำหรับ hash ที่ matching แต่ละตัว
- hash ที่ matching จริงจะมีค่าความต่างเดียวกัน
- ในตัวอย่าง แถวที่มีค่าความต่าง 10 คือ true match ส่วนค่าความต่างอื่นคือ false match
- นำค่าความต่างมาทำเป็น histogram แล้วใช้ bin ที่ใหญ่ที่สุดเป็น score ของเพลง
- เพลงที่ไม่ใช่ match ที่ดีจะมีค่าทุก bin ต่ำ
- เพลงที่เป็น match ที่ดีจะมี spike ขนาดใหญ่ใน bin หนึ่ง
- เหตุผลที่ไม่เลือกเพลงจากจำนวน hash ที่ matching มากที่สุดแบบตรง ๆ คือ อคติจากความยาวเพลง
- เพลงยาวมีโอกาสมีจำนวน match มากกว่าเพลงสั้น
- ใน Spotify ยังมีแทร็กยาวเกิน 4 ชั่วโมงด้วย ซึ่งอาจทำให้ผลลัพธ์เอนเอียงอย่างมาก
abracadabra และแหล่งอ้างอิง
- abracadabra เป็นโปรเจกต์โอเพนซอร์สที่ implement วิธีตามบทความวิจัยของ Shazam
- สามารถดูขั้นตอน spectrogram, การหา peak, hashing และ matching ได้จากโค้ด Python
- สามารถใช้เป็น library ในโปรเจกต์อื่นได้ด้วย
- implementation และแหล่งข้อมูลที่เกี่ยวข้อง
- abracadabra docs: เอกสารของ abracadabra
- dejavu: implementation รู้จำเพลงอีกตัวที่เขียนด้วย Python
- Computer Vision for Music Identification: แนวทางรู้จำเพลงที่คล้ายกับวิธีของ dejavu
- Chromaprint: อัลกอริทึมที่ใช้แนวทางต่างออกไปเล็กน้อย
- Musicbrainz: คำอธิบาย audio fingerprint จากสารานุกรมข้อมูลเพลงโอเพนซอร์ส
- Playing with Shazam fingerprints: ประสบการณ์ implement อัลกอริทึมของ Shazam ในปี 2009
- Alignment of videos of same event using audio fingerprinting: ตัวอย่างการใช้ audio fingerprint เพื่อจัดแนววิดีโอของเหตุการณ์เดียวกัน นอกเหนือจากเพลง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
Wall Street Journal มีวิดีโออธิบาย Shazam ที่ทำได้ดีมาก
https://www.wsj.com/video/series/in-depth-features/how-shaza...
Chris ผู้ร่วมก่อตั้ง Shazam
Lawn Love เคยเช่าชุดสำนักงานชั้นบนในช่วงปี 2014~2018 และนักพัฒนาแอปมือถือของ Shazamในออฟฟิศนั้นก็ยังเงียบ ๆ แม้หลังการเข้าซื้อกิจการ แถมไม่เคยได้ยินเสียงเปิดแชมเปญฉลองเลย
ตอนที่ Shazam ออกมาในปี 2008 แนวทางแบบอิงแฮชถือว่าเป็นการเลือกที่ฉลาด
ถ้าเป็นผมคงเริ่มจากหาวิธีแปลงทุกเพลงให้เป็นแฮชอย่างมีประสิทธิภาพในการคำนวณที่สุดก่อน
ถ้าออกวันนี้ ทิศทาง R&D พื้นฐานคงกลายเป็นการฝึกโมเดล ซึ่งอาจมีประสิทธิภาพต่ำกว่าและมีค่าโฮสต์แพงกว่ามาก
แม้มันจะดูเป็นปัญหาที่โมเดลน่าจะทำได้ดี แต่ในเมื่อจำนวนเพลงมีขอบเขตจำกัด วิธีแบบแฮชน่าจะให้ประสิทธิภาพดีกว่ามาก
โครงสร้างคือดูว่าในตัวอย่างสั้น ๆ มีแฮชที่ตรงกันกี่สิบหรืออย่างมากไม่กี่ร้อยค่า และตรงกันต่อเนื่องกันโดยรวมมากแค่ไหน
ทุกวันนี้ก็คงยังไม่ทำด้วยการฝึกโมเดล เพราะมีเพลงใหม่เพิ่มเข้ามาจำนวนมหาศาลทุกวัน จึงต้องฝึกใหม่อยู่เรื่อย ๆ
แฮชยังดูเป็นแนวทางที่ดีกว่า ทั้งในแง่ประสิทธิภาพและความทนทานโดยรวม
จากนั้นก็สามารถหาเพลงได้เหมือนเปิดหาคำในพจนานุกรม และหวังว่าไอเดียนี้จะไม่เลือนหายไปง่าย ๆ
[1]: https://en.wikipedia.org/wiki/Parsons_code
แอปมือถือแรกออกในปี 2006 สำหรับ BREW
ปี 2008 เป็นเพียงช่วงที่ Apple เปิดตัว App Store และก่อนหน้านั้นบุคคลที่สามยังทำแอป iPhone ไม่ได้
ทั้งคู่เป็นวิธีทำดัชนีและบีบอัดข้อมูลที่ยอดเยี่ยม ต่างกันแค่ขนาดของข้อมูลเท่านั้น
อาจมีวิธีสร้างโมเดล embedding ที่สามารถคำนวณเวกเตอร์ embedding สำหรับเพลงใหม่แต่ละเพลงได้โดยไม่ต้องฝึกใหม่ทั้งหมดก็ได้
Shazam เป็นหนึ่งในผลิตภัณฑ์หายากที่ตลอด 20 ปีแล้วยังไม่สูญเสียความรู้สึกเหมือนเวทมนตร์
มันใกล้เคียงกับสิ่งที่วิศวกรควรมุ่งไปให้ถึงจริง ๆ
มันดูคล้ายการรู้จำภาพสัตว์หรือวัตถุ แต่ต่างจากฟีเจอร์ที่มักเป็นเหมือนเวทมนตร์ของแมชชีนเลิร์นนิงแบบประหลาด ๆ ตรงที่นี่เป็นโดเมนปัญหาที่พบไม่บ่อยแต่พอเข้าใจได้
จำได้ว่าเคยลบแอปทิ้งไปเพราะมันโหลดไม่ทันเวลาใน iPhone รุ่นเก่า
ฟีเจอร์Now Playingสามารถตรวจจับเพลงตลอดเวลาและเก็บไว้ในประวัติได้ และใน Google Assistant ก็สามารถค้นหาเพลงได้แค่ฮัมทำนอง
มันไม่ได้ทำงานเสถียรเสมอไป แต่บางครั้งก็ตรงเป๊ะ
ตอนพยายามหาเพลงที่มีคนร้องใน America’s Got Talent ผลลัพธ์กลับชี้ไปที่นักร้องคนนั้นจาก AGT เองจนตกใจ
เลยนึกว่ามันทำดัชนีรายการทีวีด้วยหรือเปล่า
แต่ผู้จัดการผลิตภัณฑ์จะทำอะไรได้อีก ถ้าไม่คอยทำให้ผลิตภัณฑ์พังลงเรื่อย ๆ เพื่อให้ได้โบนัสกับวันหยุดพักผ่อน
มีChromaprintด้วย และมันทำงานต่างออกไปเล็กน้อย
มันอิงจากรูปแบบการเปลี่ยนแปลงของระดับเสียง ไม่ใช่ค่าสูงสุดของสเปกตรัม
Chromaprint ถูกใช้ใน AcoustID ซึ่งเป็นฐานข้อมูลสาธารณะขนาดใหญ่ที่เชื่อมลายนิ้วมือเสียงกับข้อมูลบันทึกใน MusicBrainz
น่าทึ่งที่แม้จะไม่ได้รับการสนับสนุนเชิงพาณิชย์มากเท่า Shazam แต่ก็ยังมีเพลงอยู่ในนั้นมหาศาล
[1]: https://oxygene.sk/2011/01/how-does-chromaprint-work/
มันดีสำหรับการตรวจหาข้อมูลซ้ำ แต่การออกแบบลายนิ้วมือของ Shazam ทำให้จับคู่ชิ้นส่วนสั้น ๆ เข้ากับทั้งเพลงได้
เป็นบทความที่ยอดเยี่ยมซึ่งจับภาพได้ดีว่า spectrogram ทำอะไร และแทบจะเป็นงานอ่านบังคับสำหรับคนที่อยากเข้าใจว่าการทำลายนิ้วมือเสียงทำงานอย่างไร
สื่อประเภทอื่นก็มีอัลกอริทึมประมาณค่านี้คล้ายกันอยู่ ดังนั้นถ้าอยากเข้าใจการแฮชในโลกจริง ก็คุ้มที่จะค่อย ๆ ศึกษาบทความนี้
สิ่งที่ Shazam ทำคือเอามาแฮชแบบเชิงจัดหมู่เพื่อช่วยลดผลบวกลวง
มีเว็บไซต์ที่ยอดเยี่ยมแห่งหนึ่งซึ่งจัดการเรื่อง การจัดหมวดหมู่แนวเพลง และการแตกแขนงของแนวเพลงย่อยที่เกิดจากซิกเนเจอร์ของเพลงใหม่ ๆ ด้วยการจับคู่เชิงอัลกอริทึม
เป็นแหล่งข้อมูลที่น่าทึ่งซึ่งดำเนินการเป็นโปรเจกต์ส่วนตัว แต่ก็ดูเหมือนเสี่ยงจะหายไปได้ด้วยเหตุผลอย่างปัญหาโฮสติ้ง
เมื่อก่อนเคยมีฟีเจอร์คล้ายกันอย่าง Music DNA ของ Pandora หรือของ LastFM แต่เว็บไซต์นี้เหมือนเครือข่ายการเชื่อมโยงเชิงภาพของดนตรีทั้งหมดที่มนุษยชาติสร้างขึ้นจนถึงปี 2023 ดังนั้นถ้ามันหายไปก็น่าจะเป็นความสูญเสียของทั้งเว็บ
Every Noise At Once
https://everynoise.com
Every Noise at Once - https://news.ycombinator.com/item?id=26668426 - เมษายน 2021, ความคิดเห็น 94 รายการ
Every Noise at Once - https://news.ycombinator.com/item?id=20585447 - สิงหาคม 2019, ความคิดเห็น 82 รายการ
Every Noise at Once – an algorithmically-generated scatter-plot of musical genre - https://news.ycombinator.com/item?id=10269685 - กันยายน 2015, ความคิดเห็น 23 รายการ
An algorithmically-generated scatter-plot of musical genres - with samples - https://news.ycombinator.com/item?id=9315499 - เมษายน 2015, ความคิดเห็น 3 รายการ
ตอนอยู่ที่ Spotify เขาเป็นนักวิจัยด้านแนวเพลง
มันแสดงเพลงที่คล้ายกัน และคิดว่าทำได้ค่อนข้างดี
น่าทึ่งมากที่วิธีนี้มีความเป็นธรรมชาติแค่ไหน และสอดคล้องกับกระบวนการรับรู้ของพวกเราเองได้ดีเพียงใด
โดยคร่าว ๆ คือมันระบุ ชิ้นส่วนเมโลดี้ แล้วนำสิ่งเหล่านั้นมาเทียบเรียงตามลำดับ
คล้ายกับที่พวกเราฟังแค่ 5, 7 หรือ 10 โน้ตก็ยังพอจำอะไรบางอย่างได้
เหมือนเคยอ่านเรื่องวิธีทำลายนิ้วมือเพลงแบบอื่นที่อาศัยสิ่งอย่างยอดพีกของความดัง แต่แม้วิธีนั้นอาจทำงานได้ดีพอ ๆ กัน ก็ไม่ได้สอดคล้องกับวิธีที่สมองเราทำงานเลย
วิธีนี้ไม่ต้องพึ่ง “ผลพลอยได้ที่ถูกสร้างขึ้นมา” แต่โดยพื้นฐานแล้วทำงานคล้ายกับวิธีที่พวกเราทำ จึงค่อนข้างเท่มาก
ในเชิงเทคนิคแล้วมันไม่ใช่เมโลดี้เสมอไป แต่ส่วนใหญ่ก็น่าจะเป็นเมโลดี้
สงสัยว่า Shazam จัดการกรณีที่แกนเวลาไม่เป็นเชิงเส้นหรือไม่คงที่อย่างไร
เช่น กรณีเทป, wow and flutter, หรือสถานการณ์ที่เร็วขึ้นช้าลงอยู่ตลอด
เท่าที่รู้ การทำ fingerprint ไวต่อเวลาอย่างมาก และถึงจะตัดเป็นชิ้นขนาดราว 50ms ก็ไม่ได้แก้ปัญหาได้หมด
ครั้งล่าสุดที่ดู เทคนิคทั่วไปสำหรับปัญหาแบบนี้อย่าง Dynamic Time Warping มีต้นทุนการคำนวณสูงเกินไป
นี่คือโพสต์ที่เกี่ยวข้อง ถ้ามีมากกว่านี้ก็อยากรู้เหมือนกัน
How Shazam Works (2003 Paper) - https://news.ycombinator.com/item?id=33299853 - ตุลาคม 2022, 1 ความคิดเห็น
Creating Shazam in Java (2010) - https://news.ycombinator.com/item?id=32530056 - สิงหาคม 2022, 36 ความคิดเห็น
Shazam turns 20 - https://news.ycombinator.com/item?id=32520593 - สิงหาคม 2022, 227 ความคิดเห็น
How Shazam Works (2015) - https://news.ycombinator.com/item?id=23806142 - กรกฎาคม 2020, 7 ความคิดเห็น
Designing an audio adblocker - https://news.ycombinator.com/item?id=18855029 - มกราคม 2019, 186 ความคิดเห็น
Show HN: A radio/podcast adblocker featuring ML and Shazam-like fingerprinting - https://news.ycombinator.com/item?id=18459058 - พฤศจิกายน 2018, 2 ความคิดเห็น
Show HN: Shazam-like acoustic fingerprinting of continuous audio streams - https://news.ycombinator.com/item?id=15809291 - พฤศจิกายน 2017, 76 ความคิดเห็น
How Shazam Works (2015) - https://news.ycombinator.com/item?id=15350729 - กันยายน 2017, 13 ความคิดเห็น
Tell HN: Shazam picks up song from my kitchen light - https://news.ycombinator.com/item?id=11593305 - เมษายน 2016, 2 ความคิดเห็น
How Shazam works - https://news.ycombinator.com/item?id=9870408 - กรกฎาคม 2015, 48 ความคิดเห็น
Patent infringement claim re: “Creating Shazam in Java” blogpost (2010) - https://news.ycombinator.com/item?id=9594480 - พฤษภาคม 2015, 18 ความคิดเห็น
The Shazam Effect (2014) - https://news.ycombinator.com/item?id=9593429 - พฤษภาคม 2015, 37 ความคิดเห็น
The Shazam Effect - https://news.ycombinator.com/item?id=8634357 - พฤศจิกายน 2014, 34 ความคิดเห็น
Ask HN: Is there an audio search technology that finds exact and similar audio? - https://news.ycombinator.com/item?id=8420141 - ตุลาคม 2014, 3 ความคิดเห็น
Source code example of the Shazam algorithm - https://news.ycombinator.com/item?id=5724422 - พฤษภาคม 2013, 16 ความคิดเห็น
Creating Shazam in Java - https://news.ycombinator.com/item?id=5723863 - พฤษภาคม 2013, 43 ความคิดเห็น
An Industrial-Strength Audio Search Algorithm (Shazam) - https://news.ycombinator.com/item?id=2621103 - มิถุนายน 2011, 4 ความคิดเห็น
Shazam's Search for Songs Creates New Music Jobs - https://news.ycombinator.com/item?id=2215295 - กุมภาพันธ์ 2011, 1 ความคิดเห็น
How does the music-identifying app Shazam work its magic? - https://news.ycombinator.com/item?id=2214992 - กุมภาพันธ์ 2011, 2 ความคิดเห็น
Implementing Shazam with Java in a weekend - https://news.ycombinator.com/item?id=1702975 - กันยายน 2010, 23 ความคิดเห็น
Shazam: not magic after all - https://news.ycombinator.com/item?id=909263 - ตุลาคม 2009, 28 ความคิดเห็น
แอป Shazam ที่ใช้ระบุเพลงทำงานได้อย่างน่าอัศจรรย์อย่างไร? - https://news.ycombinator.com/item?id=893353 - ตุลาคม 2009, 16 ความคิดเห็น