2 điểm bởi GN⁺ 2023-12-06 | 1 bình luận | Chia sẻ qua WhatsApp
  • Để tìm bài hát chỉ từ vài giây ghi âm bằng micro, Shazam không so sánh toàn bộ âm thanh mà tạo vân tay âm thanh (fingerprint) rồi tìm trong cơ sở dữ liệu
  • Cách trượt trực tiếp dạng sóng để so sánh không thực tế ở quy mô 10 triệu bài hát, do nhiễu micro, thay đổi âm lượng và hiệu ứng tần số
  • Luồng cốt lõi là chuyển âm thanh thành spectrogram, tìm các peak tần số mạnh, rồi lưu các cặp peak dưới dạng hash để so sánh nhanh
  • Peak tương đối vẫn tồn tại tốt trước nhiễu và giúp giảm dung lượng lưu trữ, nhưng phải phân bố đều theo thời gian và tần số để có thể nhận diện ở bất kỳ đoạn nào của bài hát
  • Ở bước nhận diện, hệ thống gom chênh lệch Track time - Sample time của các hash khớp thành histogram, rồi chọn bài hát có một bin tập trung nhiều nhất làm đáp án

Vấn đề Shazam phải giải quyết

  • Shazam là ứng dụng ghi âm vài giây bài hát đang phát xung quanh, rồi tìm trong cơ sở dữ liệu và hiển thị kết quả
  • Trước khi trở thành ứng dụng, Shazam từng là dịch vụ dựa trên số điện thoại
    • Người dùng phải gọi đến một số điện thoại và đưa micro điện thoại di động về phía nhạc
    • Sau 30 giây, Shazam ngắt cuộc gọi và gửi thông tin bài hát đang nghe qua tin nhắn SMS
    • Vào năm 2002, chất lượng cuộc gọi di động khiến việc nhận diện bài hát càng khó hơn
  • Với ví dụ nhỏ, có thể di chuyển từng chút một một mẩu âm thanh trên toàn bộ track để kiểm tra xem có khớp hay không
    • Nhưng nếu phải tìm trong cơ sở dữ liệu 10 triệu bài hát khi chưa biết đó là bài nào, thời gian sẽ tăng lên rất nhiều
  • Mẫu thu thực tế từ micro có thể có hình dạng sóng khác đi do tiếng ồn nền, hiệu ứng tần số và thay đổi âm lượng, nên so sánh sliding đơn giản thường không khớp tốt

Luồng tổng thể của hệ thống

  • Cách làm của Shazam được chia thành hai luồng registerrecognise
    • register là luồng lưu bài hát để sau này có thể tìm được
    • recognise là luồng tìm xem một đoạn âm thanh ngắn là bài hát nào
  • Hai luồng đi qua cùng các bước tiền xử lý
    • Tính spectrogram của âm thanh
    • Tìm peak, tức các thành phần tần số mạnh nhất trong spectrogram
    • Ghép các peak thành cặp để tạo hash
  • Luồng register lưu các hash đã tính vào cơ sở dữ liệu
  • Luồng recognise so sánh các hash tạo từ âm thanh mới với hash trong cơ sở dữ liệu để nhận diện bài hát ở bước matching

Tính spectrogram

  • Fourier transform cho biết trong âm thanh có những tần số nào
    • Nếu áp dụng Fourier transform cho sine wave 20Hz, một spike lớn sẽ xuất hiện gần 20Hz
    • Vì sine wave chỉ chứa một tần số duy nhất nên còn được gọi là pure tone
  • Kết quả của Fourier transform là frequency spectrum
    • Biểu diễn lấy trục thời gian làm trung tâm là time domain
    • Biểu diễn lấy trục tần số làm trung tâm là frequency domain
    • Trục Y của frequency spectrum thể hiện cường độ của từng thành phần tần số; thành phần càng mạnh thì càng nghe rõ hơn trong tín hiệu time-domain
  • Khi cộng nhiều sine wave, các thành phần tần số của từng wave sẽ kết hợp với nhau
    • Nếu cộng một sine wave 50Hz có cường độ bằng một nửa vào sine wave 20Hz, sẽ xuất hiện spike 20Hz và một spike 50Hz nhỏ hơn
    • Mọi tín hiệu âm thanh đều có thể được tái tạo từ các wave như vậy
  • Frequency domain làm lộ ra thông tin khó thấy trong time domain
    • Ngay cả khi nhiễu được thêm vào làm hình dạng time-domain thay đổi, các spike tần số chính vẫn có thể rất rõ trong frequency domain
  • Nếu chỉ áp dụng Fourier transform một lần cho toàn bộ bài hát, ta chỉ thấy cường độ tần số tổng thể, nhưng tần số của bài hát thực tế thay đổi theo thời gian
    • Chia bài hát thành các đoạn nhỏ, áp dụng Fourier transform cho từng đoạn rồi ghép lại sẽ tạo thành spectrogram
    • Spectrogram biểu diễn đồng thời thời gian, tần số và cường độ; cường độ có thể được thể hiện bằng màu sắc
  • Trong spectrogram của ví dụ “Like a Stone”, các điểm sáng nhất, tức phần lớn tần số mạnh, xuất hiện dưới 5000Hz
    • Kiểu phân bố này phổ biến trong âm nhạc, và phần lớn dải tần của piano nằm trong khoảng 27Hz-4186Hz

Fingerprint dựa trên peak

  • Fingerprint âm thanh bắt đầu từ việc tìm peak trong spectrogram
    • Peak là thành phần tần số lớn nhất tại một thời điểm cụ thể
    • Trong âm nhạc, một âm mạnh như đoạn solo guitar có thể trở thành peak tại thời điểm đó
  • Peak tương đối ít bị ảnh hưởng bởi nhiễu
    • Để làm một peak không còn nhận ra được, nhiễu phải lớn hơn peak đó
    • Peak trong spectrogram là thành phần tần số mạnh nhất trong track
  • Nếu chỉ lưu peak, lượng dữ liệu cần cho fingerprint sẽ giảm
    • Không lưu toàn bộ thông tin tần số mà chỉ giữ lại các thành phần tần số lớn nhất
    • Dữ liệu cần tìm kiếm ít hơn nên việc tìm fingerprint nhanh hơn
  • Peak phải phân bố đều cả theo thời gian lẫn tần số
    • Nếu chúng chỉ tập trung về một phía theo thời gian, sẽ không thể nhận diện mẫu ở các đoạn còn lại của bài hát
    • Nếu dải tần tập trung quá hẹp, tiếng ồn lớn ở một dải cụ thể như còi xe có thể làm thay đổi lựa chọn peak, khiến đoạn đó khó nhận ra

Tìm peak bằng Maximum filter

  • Để tìm peak một cách đều hơn, có thể dùng kỹ thuật maximum filter trong xử lý ảnh
  • Maximum filter tìm giá trị lớn nhất trong vùng lân cận quanh từng pixel, rồi thay pixel đó bằng giá trị local maximum này
    • Ví dụ là cách xét vùng 3x3 quanh mỗi pixel
    • Xử lý này có hiệu ứng mở rộng local peak sang vùng xung quanh
  • Spectrogram sau maximum filter trông như một phiên bản độ phân giải thấp của spectrogram gốc
    • Vì peak của tín hiệu được mở rộng và chiếm các pixel khác
    • Các box cùng màu tương ứng với một local peak trong ảnh gốc
  • Maximum filter có tham số kích thước box để tìm local maximum
    • Dùng box nhỏ sẽ cho ra nhiều peak hơn
    • Dùng box lớn sẽ cho ra ít peak hơn
  • Vị trí peak được khôi phục bằng cách tìm những điểm có giá trị giống nhau giữa spectrogram gốc và spectrogram đã lọc
    • Các điểm không phải peak bị thay bằng giá trị local peak nên giá trị sẽ khác đi
    • Chỉ những điểm giữ nguyên giá trị mới là peak
  • Khi gom tất cả peak và vẽ lại, ta có constellation map
    • Tên này xuất phát từ việc nó trông giống ảnh bầu trời đêm
  • Số lượng peak ảnh hưởng trực tiếp đến kích thước fingerprint
    • Nếu phải lưu hàng triệu bài hát, việc giữ fingerprint nhỏ là rất quan trọng
    • Giảm số peak cũng làm giảm độ chính xác và giảm cơ hội matching mẫu với đúng bài hát
  • Có hai cách giảm số peak
    • Dùng N peak cao nhất, trong đó N nên tỉ lệ với độ dài âm thanh để các bài ngắn không bị lấy mẫu quá mức
    • Dùng tất cả peak lớn hơn một threshold nhất định; cách này không bảo đảm kích thước fingerprint theo thời gian nhưng có thể chính xác hơn

Biến các cặp peak thành hash

  • Nếu fingerprint là tập hợp các peak spectrogram đơn lẻ, trùng lặp sẽ tăng nhanh
    • Nếu biểu diễn tần số của mỗi peak bằng 10bit, có thể biểu diễn 2^10=1024 tần số riêng biệt
    • Khi mỗi track có hàng nghìn điểm, sẽ có nhiều lặp lại
  • Tính duy nhất là điều quan trọng với fingerprint
    • Tính duy nhất càng cao thì tìm kiếm càng nhanh
    • Điều này giúp nhận diện được nhiều bài hát hơn
  • Cách của Shazam không tạo hash từ một peak đơn lẻ mà từ cặp peak
    • Hash chứa tần số fA, fB của hai peak và chênh lệch thời gian ΔT giữa hai peak
    • Nếu mỗi peak có thông tin tần số 10bit và ΔT cũng được biểu diễn bằng 10bit, tổng cộng sẽ là 30bit thông tin
    • 2^30=1,073,741,824 khả năng lớn hơn rất nhiều so với 1024 khả năng của một point đơn lẻ
  • Việc tạo pair sử dụng anchor point và target zone
    • Chọn một point làm anchor point
    • Tính target zone trên spectrogram đối với anchor point
    • Ghép anchor point với mọi point trong target zone thành pair
  • Bài báo của Shazam không giải thích chi tiết cách chọn target zone
    • Trong hình của bài báo, target zone bắt đầu ở thời điểm hơi sau anchor point và được đặt quanh tần số của anchor point
  • Các pair được tạo sẽ được lưu vào cơ sở dữ liệu dưới dạng hash
    • Thành phần của hash gồm fA, fB, ΔT
    • Lưu thêm Point A time và Track ID làm thông tin bổ sung
    • Point A time và Track ID được dùng về sau trong matching để tìm một thời điểm cụ thể của một bài hát cụ thể
  • Tập hợp toàn bộ hash của một track trở thành fingerprint của track đó

Cách matching

  • Luồng recognise tạo fingerprint từ sample rồi so sánh với fingerprint đã lưu trong cơ sở dữ liệu
  • Thuật toán matching diễn ra qua bốn bước
    • Lấy từ cơ sở dữ liệu tất cả hash khớp với fingerprint của sample
    • Group các hash theo bài hát
    • Với từng bài hát, kiểm tra xem các hash có được căn chỉnh theo thời gian hay không
    • Chọn track có nhiều hash được căn chỉnh nhất
  • abracadabra không tìm trực tiếp 3-tuple (fA, fB, ΔT) mà lưu dưới dạng một giá trị duy nhất do hash(fA, fB, ΔT) trả về
    • Thay vì tìm ba giá trị cho mỗi hash, có thể tìm một giá trị duy nhất
  • Mỗi hash trong cơ sở dữ liệu được liên kết với Track ID nên có thể grouping theo bài hát
    • Sau khi grouping như vậy, có thể chấm điểm từng track ứng viên
  • Nếu sample khớp với một bài hát nào đó, các hash trong sample phải được căn chỉnh tốt với một đoạn của bài gốc
    • Nhiễu có thể tạo ra các peak trông như peak ở những thời điểm khác trong sample
    • Cũng có trường hợp hash khớp với sai bài hát
  • Việc căn chỉnh được kiểm tra bằng cách tính giá trị Track time - Sample time cho từng hash matching
    • Các hash matching thật sẽ có cùng giá trị chênh lệch
    • Trong ví dụ, các hàng có giá trị chênh lệch 10 là true match, còn các giá trị chênh lệch khác là false match
  • Tạo histogram từ các giá trị chênh lệch và dùng bin lớn nhất làm score của bài hát
    • Với bài hát không phải match tốt, mọi bin đều có giá trị thấp
    • Với bài hát là match tốt, một bin sẽ xuất hiện spike lớn
  • Lý do không đơn giản chọn bài hát có nhiều hash matching nhất là thiên lệch theo độ dài bài hát
    • Bài dài có khả năng có số match nhiều hơn bài ngắn
    • Trên Spotify cũng có những track dài hơn 4 giờ, nên kết quả có thể bị lệch đáng kể

abracadabra và tài liệu tham khảo

  • abracadabra là dự án mã nguồn mở triển khai cách làm trong bài báo của Shazam
    • Có thể theo dõi quá trình tính spectrogram, tìm peak, hashing và matching bằng mã Python
    • Cũng có thể dùng như library trong dự án khác
  • Các triển khai và tài liệu liên quan

1 bình luận

 
GN⁺ 2023-12-06
Ý kiến trên Hacker News
  • Wall Street Journal có một video được làm rất tốt giải thích về Shazam
    https://www.wsj.com/video/series/in-depth-features/how-shaza...
    Chris, đồng sáng lập Shazam

    • Tôi tò mò liệu lý do Shazam đặt văn phòng ở Rancho Bernardo, San Diego có phải vì ông vốn là người San Diego trước khi sang Anh hay không
      Lawn Love đã thuê suite ở tầng trên từ năm 2014 đến 2018, nhưng các lập trình viên ứng dụng di động Shazam trong văn phòng đó vẫn khá lặng lẽ sau thương vụ mua lại, và tôi cũng chưa từng nghe tiếng khui champagne ăn mừng nào
  • Khi Shazam ra mắt năm 2008, cách tiếp cận dựa trên hash là một lựa chọn thông minh
    Nếu là tôi, trước hết tôi sẽ tìm cách chuyển mọi bài hát thành các hash sao cho hiệu quả tính toán nhất có thể
    Nếu ra mắt hôm nay, hướng R&D cơ bản có lẽ sẽ là huấn luyện mô hình, nhưng cách đó có thể kém hiệu quả hơn nhiều và chi phí hosting cũng đắt hơn
    Đây đúng là dạng bài toán mà ta có cảm giác mô hình sẽ làm tốt, nhưng vì số lượng bài hát là hữu hạn, phương pháp hash rất có thể cho hiệu năng tốt hơn nhiều

    • Nói chính xác thì không phải biến mỗi bài hát thành một hash duy nhất, mà là biến mỗi bài hát thành hàng trăm đến hàng nghìn hash
      Cấu trúc của nó là tìm xem vài chục, nhiều nhất là khoảng vài trăm hash thấp, lấy từ một mẫu ngắn, khớp với nhau nhiều đến đâu và nhìn chung có liên tiếp hay không
      Tôi nghĩ ngay cả ngày nay cũng sẽ không làm bằng huấn luyện mô hình, vì mỗi ngày có lượng bài hát mới khổng lồ được thêm vào, nên sẽ phải liên tục huấn luyện lại
      Hash vẫn có vẻ là cách tiếp cận tốt hơn, không chỉ về hiệu quả mà còn về độ vững chắc tổng thể
    • Cách tiếp cận thông minh vào năm 1975 là Parsons code, và nó cũng gần với việc hash hóa bài hát theo kiểu có thể tính nhẩm trong đầu
      Sau đó có thể tìm bài hát như tra từ trong từ điển, và tôi hy vọng ý tưởng này không dễ dàng biến mất
      [1]: https://en.wikipedia.org/wiki/Parsons_code
    • Chỉnh nhẹ một chút: Shazam không ra mắt năm 2008 mà là dịch vụ gọi điện thoại năm 2002, rồi gửi kết quả qua tin nhắn SMS
      Ứng dụng điện thoại di động đầu tiên là dành cho BREW vào năm 2006
      Năm 2008 chỉ là thời điểm Apple ra mắt App Store; trước đó bên thứ ba không thể tạo ứng dụng iPhone
    • Thành thật mà nói, với một công cụ như Shazam thì không có khác biệt căn bản quá lớn giữa cơ sở dữ liệu + thuật toán hashing và mô hình tự giám sát
      Cả hai đều là các lời giải lập chỉ mục và nén xuất sắc, chỉ khác nhau về quy mô dữ liệu
    • Nếu huấn luyện thứ này bằng mô hình, tôi tự hỏi có thể tránh việc chạy lại toàn bộ quá trình huấn luyện mỗi khi thêm bài hát mới như thế nào
      Có lẽ có cách tạo một mô hình embedding có thể tính vector embedding cho từng bài hát mới mà không cần huấn luyện lại hoàn toàn
  • Shazam là một sản phẩm hiếm hoi mà sau 20 năm vẫn không mất đi cảm giác như phép màu
    Nó thực sự rất gần với thứ mà các kỹ sư nên hướng tới

    • Với người hiểu về kỹ thuật, trích xuất fingerprint âm nhạc là một bài toán cụ thể có thể hiểu được, nhưng nếu đi vào chi tiết mà không xem cách đã được giải quyết thì đây là một vấn đề khá khó
      Khác với các chức năng trông bề ngoài có vẻ tương tự như nhận diện hình ảnh động vật hay đồ vật, nhưng phần lớn gần với phép màu machine learning kỳ lạ, nó thuộc về một miền bài toán hiếm gặp nhưng có thể hiểu được
    • Đồng thời, ứng dụng từng là “chạm là nghe và có kết quả ngay” đã biến thành một ứng dụng phình to chậm chạp và đầy quảng cáo
      Tôi nhớ trên iPhone thế hệ trước nó còn không tải kịp lúc, nên cuối cùng tôi đã xóa ứng dụng
    • Google đã đưa chuyện này lên thêm một bậc
      Tính năng Now Playing liên tục phát hiện bài hát và ghi lại lịch sử, còn trong Google Assistant thì bạn có thể tìm bài hát chỉ bằng cách ngân nga
      Nó không hoạt động ổn định, nhưng thỉnh thoảng lại đoán chính xác
    • Thực ra nó còn trở nên giống phép màu hơn
      Tôi từng cố tìm một bài hát mà ai đó hát trên America’s Got Talent, và rất ngạc nhiên khi kết quả trả về đúng chính ca sĩ đó trong AGT
      Tôi đã nghĩ không biết họ có lập chỉ mục cả chương trình TV hay không
    • Các kỹ sư hướng tới những sản phẩm như vậy
      Nhưng tôi tự hỏi nếu không tiếp tục làm hỏng sản phẩm để nhận thưởng và đi nghỉ thì các product manager còn làm gì nữa
  • Cũng có Chromaprint, và nó hoạt động theo cách hơi khác
    Nó dựa trên mẫu hình thay đổi cao độ chứ không phải các cực đại của phổ
    Chromaprint được dùng trong AcoustID, cơ sở dữ liệu công khai lớn liên kết fingerprint âm thanh với các bản thu MusicBrainz
    Điều đáng ngạc nhiên là dù không được hỗ trợ thương mại nhiều như Shazam, trong đó vẫn có một lượng nhạc khổng lồ
    [1]: https://oxygene.sk/2011/01/how-does-chromaprint-work/

    • Tôi nghĩ Chromaprint phải so sánh toàn bộ bài hát
      Nó tốt cho phát hiện trùng lặp, nhưng thiết kế fingerprint của Shazam cho phép khớp một đoạn ngắn với cả bài hát
  • Đây là một bài viết xuất sắc nắm bắt tốt spectrogram làm gì, và gần như là tài liệu bắt buộc đọc cho ai muốn hiểu trích xuất fingerprint âm thanh hoạt động ra sao
    Các phương tiện khác cũng có những thuật toán xấp xỉ tương tự, nên nếu muốn hiểu hashing trong thế giới thực, bài này đáng để nghiên cứu kỹ

    • Các kỹ thuật spectrogram thông thường đã được Phillips phát minh trước Shazam
      Điều Shazam làm là hash hóa theo kiểu tổ hợp để giảm dương tính giả
  • Có một trang tuyệt vời không xử lý bài hát, mà xử lý phân loại thể loại và các nhánh tiểu thể loại do chữ ký của bài hát mới tạo ra bằng khớp thuật toán
    Đây là một tư liệu đáng kinh ngạc được vận hành như một dự án phụ cá nhân, nhưng có vẻ có nguy cơ biến mất vì các lý do như vấn đề hosting
    Trước đây từng có Music DNA của Pandora hay tính năng tương tự của LastFM, nhưng trang này giống như một mạng lưới kết nối trực quan của toàn bộ âm nhạc mà nhân loại đã tạo ra cho đến năm 2023, nên nếu biến mất thì sẽ là mất mát cho toàn bộ web
    Every Noise At Once
    https://everynoise.com

  • Thật đáng kinh ngạc là cách này trực quan đến mức nào, và khớp với quá trình nhận thức của chính chúng ta tốt ra sao
    Đại khái là xác định các mảnh giai điệu, rồi thử khớp chúng theo thứ tự
    Tương tự như việc chúng ta chỉ nghe 5, 7, 10 nốt đã có thể nhận ra điều gì đó
    Tôi nhớ đã đọc về các cách trích xuất dấu vân tay bài hát khác dựa vào những thứ như đỉnh âm lượng; dù các cách đó cũng có thể hoạt động tốt không kém, chúng hoàn toàn không khớp với cách bộ não chúng ta làm
    Cách này khá hay vì về cơ bản nó vận hành gần giống cách chúng ta làm, thay vì dựa vào các “sản phẩm phụ nhân tạo”
    Về mặt kỹ thuật thì không phải lúc nào cũng là giai điệu, nhưng phần lớn rất có thể là giai điệu

  • Tôi tò mò Shazam xử lý thế nào khi trục thời gian không tuyến tính hoặc không ổn định
    Chẳng hạn như băng từ, wow and flutter, hoặc tình huống liên tục nhanh lên rồi chậm lại
    Theo tôi biết, việc trích xuất dấu vân tay rất nhạy với thời gian, và cắt thành các đoạn khoảng 50ms cũng không giải quyết hoàn toàn
    Lần cuối tôi xem, kỹ thuật tổng quát cho vấn đề này là Dynamic Time Warping (nắn thời gian động) có chi phí tính toán quá lớn

  • Đây là các bài liên quan. Nếu còn nữa thì tôi cũng muốn biết
    How Shazam Works (2003 Paper) - https://news.ycombinator.com/item?id=33299853 - tháng 10 năm 2022, 1 bình luận
    Creating Shazam in Java (2010) - https://news.ycombinator.com/item?id=32530056 - tháng 8 năm 2022, 36 bình luận
    Shazam turns 20 - https://news.ycombinator.com/item?id=32520593 - tháng 8 năm 2022, 227 bình luận
    How Shazam Works (2015) - https://news.ycombinator.com/item?id=23806142 - tháng 7 năm 2020, 7 bình luận
    Designing an audio adblocker - https://news.ycombinator.com/item?id=18855029 - tháng 1 năm 2019, 186 bình luận
    Show HN: A radio/podcast adblocker featuring ML and Shazam-like fingerprinting - https://news.ycombinator.com/item?id=18459058 - tháng 11 năm 2018, 2 bình luận
    Show HN: Shazam-like acoustic fingerprinting of continuous audio streams - https://news.ycombinator.com/item?id=15809291 - tháng 11 năm 2017, 76 bình luận
    How Shazam Works (2015) - https://news.ycombinator.com/item?id=15350729 - tháng 9 năm 2017, 13 bình luận
    Tell HN: Shazam picks up song from my kitchen light - https://news.ycombinator.com/item?id=11593305 - tháng 4 năm 2016, 2 bình luận
    How Shazam works - https://news.ycombinator.com/item?id=9870408 - tháng 7 năm 2015, 48 bình luận
    Patent infringement claim re: “Creating Shazam in Java” blogpost (2010) - https://news.ycombinator.com/item?id=9594480 - tháng 5 năm 2015, 18 bình luận
    The Shazam Effect (2014) - https://news.ycombinator.com/item?id=9593429 - tháng 5 năm 2015, 37 bình luận
    The Shazam Effect - https://news.ycombinator.com/item?id=8634357 - tháng 11 năm 2014, 34 bình luận
    Ask HN: Is there an audio search technology that finds exact and similar audio? - https://news.ycombinator.com/item?id=8420141 - tháng 10 năm 2014, 3 bình luận
    Source code example of the Shazam algorithm - https://news.ycombinator.com/item?id=5724422 - tháng 5 năm 2013, 16 bình luận
    Creating Shazam in Java - https://news.ycombinator.com/item?id=5723863 - tháng 5 năm 2013, 43 bình luận
    An Industrial-Strength Audio Search Algorithm (Shazam) - https://news.ycombinator.com/item?id=2621103 - tháng 6 năm 2011, 4 bình luận
    Shazam's Search for Songs Creates New Music Jobs - https://news.ycombinator.com/item?id=2215295 - tháng 2 năm 2011, 1 bình luận
    How does the music-identifying app Shazam work its magic? - https://news.ycombinator.com/item?id=2214992 - tháng 2 năm 2011, 2 bình luận
    Implementing Shazam with Java in a weekend - https://news.ycombinator.com/item?id=1702975 - tháng 9 năm 2010, 23 bình luận
    Shazam: not magic after all - https://news.ycombinator.com/item?id=909263 - tháng 10 năm 2009, 28 bình luận

How does the music-identifying app Shazam work its magic? - https://news.ycombinator.com/item?id=893353 - Tháng 10 năm 2009, 16 bình luận

  • Có vẻ giống như cách tiếp cận ngược lại của kiểu kỹ thuật tương tự, trong đó ngành công nghiệp nhạc pop cố gắng tạo ra các bản hit dựa trên thể loại