Shazam Nasıl Çalışır? Seslerin Parmak İzi!

Shazam Chris Barton, Philip Inghelbrecht, Avery Wang ve Dhiraj Mukherjee tarafından 1999 yılında Londra’da kurulan, oldukça kullanışlı ve dünya genelinde kullanılan başarılı bir şarkı tanımlama uygulamasıdır. Shazam’ın başarısının arkasındaki sır ise seslerin parmak izlerini oluşturan algoritmasıdır. Bununla ilgili Shazam’ın kurucularından Avery Li-Chun Wang tarafından yazılmış detaylı makaleyi okuyabilirsiniz. Şimdi Shazam’ın algoritmasından bahsedelim.

Shazam kendi veritabanındaki her bir şarkının parmak izini çıkartıyor ve yeni gelen, bilinmeyen bir şarkının parmak izi çıkarılarak veritabanındaki tüm  parmak izleriyle karşılaştırılıyor. Doğruluk oranına göre de sonuç getiriliyor. Bu algoritma veritabanındaki birebir aynı sesi arıyor.

Bir müzik parçasının farklı frekanslarındaki enerji dağılımının zamanla değişimini gösteren grafiğe spektrogram denir. Her müzik parçasının da spektogramı vardır. Bir eksen zaman, diğeri frekans ve üçüncüsü de yoğunluktur. Grafikteki her bir nokta, belirli bir zamanda belirli bir frekansın yoğunluğunu temsil eder. Zaman, x ekseninde ve frekans y ekseninde, yatay çizgi sürekli düzgün bir sesi, dikey çizgi de anlık gürültü patlamalarını temsil eder.

Pik yoğunluklarının kırmızıyla işaretlendiği, bir şarkının spektrogramı.

 

Shazam Algoritması bu grafiği oluşturarak ve pik yoğunluklarının frekanslarını tanımlayarak bir şarkının parmak izini oluşturur. Her bir yükseliş noktasındaki frekansları ve başlangıçtan itibaren geçen süreyi takip eder. 10 saniyelik bir ses dosyasının parmak izi örneği;

şeklindedir. Shazam bir şarkının parmak izini key’i frekans olan bir hash tablosu olarak oluşturur. Daha sonra ilk key’i alarak (yukarıda 823.44) karşılaştırma yapmaya başlar.

Burada işin zorlayıcı kısımlarından biri ise kullanıcıların çok popüler şarkıları arayabileceği gibi çok bilinmeyen nadir şarkıları da arayabilecek olmaları. Bunun için Shazam’ın ürettiği çözüm ise, katmanlı sistem.  Yani sisteme giren şarkıyı ararken katman katman ilerlemek. İlk katmanda en popüler şarkılar ile, ikinci katmanda daha az popüler olanlar vb. şeklinde karşılaştırarak ilerlemek. Böylece veritabanındaki her şarkıyı, çok bilinmeyenleri dahi tarayabilme imkanı elde edilmiş oluyor.

Ancak bu yöntem de akıllara şu soruları getiriyor:

  • Kaç katman olmalı?
  • Her katman kaç popüler şarkı içermeli?
  • Her katmandaki sorgu ne kadar sürmeli?

Bu sistemdeki en olası hata da yanlış pozitif sonucun çıkmasıdır. Yani sorun şu ki: şarkıyı kıyaslarken en yüksek sonuçlu popüler şarkı seçilebilir ancak daha ilerilerde daha yüksek puanlı daha az popüler bir şarkı olabilir.

Şarkıları kıyaslarken oluşabilecek bir zorlukta gelen şarkının ses kalitesi ve kullanılabilme oranıdır. Şöyle ki:

  • Bir çok türde şarkı olması
  • Farklı cihazlardan, farklı mikrofonlardan ve farklı gürültü seviyesine sahip ortamlarda kaydedilmiş olması

gibi zorluklar uyum sürecini etkileyen şeylerdir.

Oluşturulan hash’lerin tekrarlanma ihtimalı olduğundan yukarıda bahsettiğimiz ses izleri oluşturulurken spektogramda sadece yükseliş noktaları işaretlenmez, buna ek olarak bir de bağlantı noktaları oluşturulur. Böylece key sadece tek bir frekans değil de bağlantı noktasındaki frekans ile yükseliş noktasındaki frekans birlikte kullanılır. Bu şekilde daha fazla nokta oluşturularak hedef bölgedeki nokta sayısı yani yoğunluk arttırılabilir. Bu da üretilen hash sayısını ve veritabanında yapılan kıyaslamada uyuşma oranını arttırır.

Shazam ile ilgili bir kaç bilgi verecek olursak  :

1.Shazam’ın başlangıçtan beri kullanan kullanıcı sayısı:

3 milyar

2.Aylık Shazam kullanıcısı sayısı:

150 milyon

3.Shazam’daki toplam ses dosyası sayısı:

12 milyar

Referanslar:

  1. An Industrial Strength Audio Search Algorithm by A. Wang
  2. Optimizing the Shazam backend structure via Genetic Algorithms
  3. 23 Amazing Shazam Statistics and Facts

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir