2 คะแนน โดย GN⁺ 2023-12-06 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2023-12-06
ความคิดเห็นจาก Hacker News
  • Wall Street Journal มีวิดีโออธิบาย Shazam ที่ทำได้ดีมาก
    https://www.wsj.com/video/series/in-depth-features/how-shaza...
    Chris ผู้ร่วมก่อตั้ง Shazam

    • สงสัยว่าเหตุผลที่ Shazam มีสำนักงานอยู่ที่ Rancho Bernardo, San Diego เป็นเพราะเดิมทีเขามาจาก San Diego ก่อนจะย้ายไปอังกฤษหรือเปล่า
      Lawn Love เคยเช่าชุดสำนักงานชั้นบนในช่วงปี 2014~2018 และนักพัฒนาแอปมือถือของ Shazamในออฟฟิศนั้นก็ยังเงียบ ๆ แม้หลังการเข้าซื้อกิจการ แถมไม่เคยได้ยินเสียงเปิดแชมเปญฉลองเลย
  • ตอนที่ Shazam ออกมาในปี 2008 แนวทางแบบอิงแฮชถือว่าเป็นการเลือกที่ฉลาด
    ถ้าเป็นผมคงเริ่มจากหาวิธีแปลงทุกเพลงให้เป็นแฮชอย่างมีประสิทธิภาพในการคำนวณที่สุดก่อน
    ถ้าออกวันนี้ ทิศทาง R&D พื้นฐานคงกลายเป็นการฝึกโมเดล ซึ่งอาจมีประสิทธิภาพต่ำกว่าและมีค่าโฮสต์แพงกว่ามาก
    แม้มันจะดูเป็นปัญหาที่โมเดลน่าจะทำได้ดี แต่ในเมื่อจำนวนเพลงมีขอบเขตจำกัด วิธีแบบแฮชน่าจะให้ประสิทธิภาพดีกว่ามาก

    • พูดให้แม่นยำคือไม่ได้แปลงแต่ละเพลงเป็นแฮชเดียว แต่แปลงแต่ละเพลงเป็นแฮชนับร้อยถึงนับพันค่า
      โครงสร้างคือดูว่าในตัวอย่างสั้น ๆ มีแฮชที่ตรงกันกี่สิบหรืออย่างมากไม่กี่ร้อยค่า และตรงกันต่อเนื่องกันโดยรวมมากแค่ไหน
      ทุกวันนี้ก็คงยังไม่ทำด้วยการฝึกโมเดล เพราะมีเพลงใหม่เพิ่มเข้ามาจำนวนมหาศาลทุกวัน จึงต้องฝึกใหม่อยู่เรื่อย ๆ
      แฮชยังดูเป็นแนวทางที่ดีกว่า ทั้งในแง่ประสิทธิภาพและความทนทานโดยรวม
    • แนวทางอันชาญฉลาดในปี 1975 คือParsons code ซึ่งก็คล้ายการทำแฮชเพลงที่คำนวณได้ในหัว
      จากนั้นก็สามารถหาเพลงได้เหมือนเปิดหาคำในพจนานุกรม และหวังว่าไอเดียนี้จะไม่เลือนหายไปง่าย ๆ
      [1]: https://en.wikipedia.org/wiki/Parsons_code
    • ขอแก้เล็กน้อยว่า Shazam ไม่ได้เปิดตัวในปี 2008 แต่เปิดตัวเป็นบริการผ่านสายโทรศัพท์ในปี 2002 และส่งผลลัพธ์กลับมาทาง SMS
      แอปมือถือแรกออกในปี 2006 สำหรับ BREW
      ปี 2008 เป็นเพียงช่วงที่ Apple เปิดตัว App Store และก่อนหน้านั้นบุคคลที่สามยังทำแอป iPhone ไม่ได้
    • พูดตามตรง สำหรับเครื่องมืออย่าง Shazam แล้ว ความต่างพื้นฐานระหว่างฐานข้อมูล+อัลกอริทึมแฮชกับโมเดล self-supervised ไม่ได้มากนัก
      ทั้งคู่เป็นวิธีทำดัชนีและบีบอัดข้อมูลที่ยอดเยี่ยม ต่างกันแค่ขนาดของข้อมูลเท่านั้น
    • ถ้าจะฝึกสิ่งนี้เป็นโมเดล ก็สงสัยว่าจะหลีกเลี่ยงการรันกระบวนการฝึกทั้งหมดใหม่ทุกครั้งที่เพิ่มเพลงใหม่ได้อย่างไร
      อาจมีวิธีสร้างโมเดล embedding ที่สามารถคำนวณเวกเตอร์ embedding สำหรับเพลงใหม่แต่ละเพลงได้โดยไม่ต้องฝึกใหม่ทั้งหมดก็ได้
  • Shazam เป็นหนึ่งในผลิตภัณฑ์หายากที่ตลอด 20 ปีแล้วยังไม่สูญเสียความรู้สึกเหมือนเวทมนตร์
    มันใกล้เคียงกับสิ่งที่วิศวกรควรมุ่งไปให้ถึงจริง ๆ

    • สำหรับคนที่มีความรู้ทางเทคนิค การทำลายนิ้วมือเพลงเป็นปัญหาที่เป็นรูปธรรมและพอเข้าใจได้ แต่ถ้าลงรายละเอียดโดยไม่ดูวิธีที่มีคนแก้ไว้แล้ว มันเป็นปัญหาที่ยากพอสมควร
      มันดูคล้ายการรู้จำภาพสัตว์หรือวัตถุ แต่ต่างจากฟีเจอร์ที่มักเป็นเหมือนเวทมนตร์ของแมชชีนเลิร์นนิงแบบประหลาด ๆ ตรงที่นี่เป็นโดเมนปัญหาที่พบไม่บ่อยแต่พอเข้าใจได้
    • ในขณะเดียวกัน แอปที่เคยเป็นแค่ “แตะแล้วฟัง ได้ผลทันที” ก็กลายเป็นแอปบวมที่ช้าและเต็มไปด้วยโฆษณา
      จำได้ว่าเคยลบแอปทิ้งไปเพราะมันโหลดไม่ทันเวลาใน iPhone รุ่นเก่า
    • Google ยกระดับไปอีกขั้น
      ฟีเจอร์Now Playingสามารถตรวจจับเพลงตลอดเวลาและเก็บไว้ในประวัติได้ และใน Google Assistant ก็สามารถค้นหาเพลงได้แค่ฮัมทำนอง
      มันไม่ได้ทำงานเสถียรเสมอไป แต่บางครั้งก็ตรงเป๊ะ
    • จริง ๆ แล้วมันกลับยิ่งเหมือนเวทมนตร์กว่าเดิม
      ตอนพยายามหาเพลงที่มีคนร้องใน America’s Got Talent ผลลัพธ์กลับชี้ไปที่นักร้องคนนั้นจาก AGT เองจนตกใจ
      เลยนึกว่ามันทำดัชนีรายการทีวีด้วยหรือเปล่า
    • วิศวกรต่างก็อยากสร้างผลิตภัณฑ์แบบนั้น
      แต่ผู้จัดการผลิตภัณฑ์จะทำอะไรได้อีก ถ้าไม่คอยทำให้ผลิตภัณฑ์พังลงเรื่อย ๆ เพื่อให้ได้โบนัสกับวันหยุดพักผ่อน
  • มีChromaprintด้วย และมันทำงานต่างออกไปเล็กน้อย
    มันอิงจากรูปแบบการเปลี่ยนแปลงของระดับเสียง ไม่ใช่ค่าสูงสุดของสเปกตรัม
    Chromaprint ถูกใช้ใน AcoustID ซึ่งเป็นฐานข้อมูลสาธารณะขนาดใหญ่ที่เชื่อมลายนิ้วมือเสียงกับข้อมูลบันทึกใน MusicBrainz
    น่าทึ่งที่แม้จะไม่ได้รับการสนับสนุนเชิงพาณิชย์มากเท่า Shazam แต่ก็ยังมีเพลงอยู่ในนั้นมหาศาล
    [1]: https://oxygene.sk/2011/01/how-does-chromaprint-work/

    • รู้สึกว่า Chromaprint น่าจะต้องเทียบทั้งเพลงไม่ใช่หรือ
      มันดีสำหรับการตรวจหาข้อมูลซ้ำ แต่การออกแบบลายนิ้วมือของ Shazam ทำให้จับคู่ชิ้นส่วนสั้น ๆ เข้ากับทั้งเพลงได้
  • เป็นบทความที่ยอดเยี่ยมซึ่งจับภาพได้ดีว่า spectrogram ทำอะไร และแทบจะเป็นงานอ่านบังคับสำหรับคนที่อยากเข้าใจว่าการทำลายนิ้วมือเสียงทำงานอย่างไร
    สื่อประเภทอื่นก็มีอัลกอริทึมประมาณค่านี้คล้ายกันอยู่ ดังนั้นถ้าอยากเข้าใจการแฮชในโลกจริง ก็คุ้มที่จะค่อย ๆ ศึกษาบทความนี้

    • วิธีการแบบspectrogram ทั่วไปนั้น Phillips คิดค้นไว้ก่อน Shazam แล้ว
      สิ่งที่ 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 ปลดพนักงาน
      ตอนอยู่ที่ Spotify เขาเป็นนักวิจัยด้านแนวเพลง
    • ที่เกี่ยวข้องกันยังมี Maroofy: https://maroofy.com/
      มันแสดงเพลงที่คล้ายกัน และคิดว่าทำได้ค่อนข้างดี
  • น่าทึ่งมากที่วิธีนี้มีความเป็นธรรมชาติแค่ไหน และสอดคล้องกับกระบวนการรับรู้ของพวกเราเองได้ดีเพียงใด
    โดยคร่าว ๆ คือมันระบุ ชิ้นส่วนเมโลดี้ แล้วนำสิ่งเหล่านั้นมาเทียบเรียงตามลำดับ
    คล้ายกับที่พวกเราฟังแค่ 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 ความคิดเห็น

  • ดูเหมือนเป็น แนวทางสวนทางกัน กับวิศวกรรมลักษณะคล้ายกันที่อุตสาหกรรมเพลงป๊อปใช้เพื่อพยายามสร้างเพลงฮิตตามแนวเพลง