Radyo dinlerken, yürürken veya bir mekanda otururken çalan müziği “Aa, Bu çalan şarkı nedir?” sorusuna cevap verebilen harika bir uygulama, Shazam!
Aslında Shazam bunu 2000’lerin başında bu işi yapmaya başladı. Akıllı telefonlar veya mobil uygulamalar olmadan yapıldı bu iş. Nasıl mı çalışıyordu, 2580’i arayarak 10 saniye uzunluğunda merak ettiğiniz müziği dinletiyorsunuz ve sonra Shazam tarafından mesaj beklemeye başlıyorsunuz.
Aslında bu olayların en temeli Audio Identifying and Fingerprinting (Ses kimlikleştirmek ve izleri) konusu içerisinde geçmektedir. Adli bilişim konularında bir alt dalı olarak geçen Ses adli bilişimi içerisinde ciddi katkılar sağlanmıştır. Bu geliştirmelerin Ses arama algoritması (Audio search algorithm) çalışmalarını doğurdu.
Ses Sinyallerinin İşlenmesi
Bilgisayar mühendisliğinin derslerinden birisi olan Sinyaller ve Sistemler içerisinde can alan konulardan Fourier Transform (Fourier dönüşümü), ses sinyallerini daha kolay işlemek ve analiz etmek için işimizi oldukça kolaylaştıran Integral dönüşümlerinden bir tanesidir. Zaman domaini (Time domain — dt) içerisindeki fonksiyonların frekans domainine (frequency domain — dw) dönüştürülmesi işlemidir. Böylelikle alınan sinyaller harmonik bir euler dalgalarına (euler’s waves) dönüştürür. Bu da aslında temel yapıda bir ses spektrumu (Audio Spectrum) oluşturulmasını sağlar
Bu dönüşümlerin kullanılması verilerin daha hızlı işlenmesi adına kullanılmaktadır. Bilgisayar biliminde fazlaca kullanılan Fast Fourier Transform algoritması(FFT — Hızlı Fourier Dönüşümü) ile sinyalleri işlerken çok daha kısa yoldan giderek hesaplaması ile çok kısa sürede bir sinyal işlenebilmektedir.
Ses sinyallerinin analizlerinde bir diğer önemli algoritma ise Discrete Time Fourier Transform (DTFT — Ayrık zamanlı Fourier dönüşümü). Bu algoritma ses sinyallerinde sampling alma işleminin anahtarıdır.
Eee o kadar anlattık formüller, algoritmalar “Bu gerçek hayatta nerede kullanacağız, hoca!” tepkisini doğuruyor. Bu zamana kadar anlattığım aslında o bildiğiniz ses sinyallerinin görüntüsünü oluşturmak için dijital olarak aktarılması ve işlenmesi için tasarlanmıştır.
Bir önceki yazılarımdan “Müziğe NullPointerException bakış açısı” içerisinde bahsettiğim Aphex Twin, “Windowlicker” albümünde oluşan Spectrogram içerisine birtakım gizli ve korkutucu simgeler koyarak bunu bir müzik içerisinde sunabilen ender müzik dahilerindendir. Bu yazıda bu bölümden bahsetmemek için bir önceki yazdığım yazıyı inceleyebilirsiniz.
Aphex Twin, bu tarz yüzleri müziklerin içerisine çizdiren ve bunu 1990’ların sonlarında yapan elektronik müzik yapımcısıdır.
Bir zaman frekansı olan Spectrogram (Spektrogram), bir sesin işlenmesi, kimlikleştirilmesi ve daha birçok işlemlerin yapılması için o kadar kolaylık sağlamaktadır ki bunun temel yapı taşları yukarıda anlattığım formüller ve algoritmalar ile üretilmektedir ve bizi Acoustic fingerprint (Akustik parmak izi) konusuna getirmektedir. Acoustic fingerprint, kısaca sesin kimliği diyebiliriz. Enstrümanlar, tonlar, tempolar, ses efektleri, bir frekans bandında tonlamalar ve bant genişlikleri gibi değerleri bir arada içerir. Kulağınız ile işittiğiniz bazı sesler birbirine benzeyebilir hatta aynı diyebilirsiniz fakat Acoustic fingerprint e göre değişkenlikleri mevcuttur. Sesleri kimlikleştirmek, sesler arasında arama yapabilmek ve ses ile giriş işlemlerini sağlamakta temel yapı taşıdır.
Shazam, acoustic fingerprint uygulayarak sesler arasında arama yapabilmektedir. Şimdi bunu yazılım teknolojileri ile bu ses bilimini nasıl bağladılar ona bakalım.
Time invariant (Zamanla değişmeyen sistem) düzlemde sampling alarak her frekansın bir hash ini veritabanına yazarak bu hashler arasında arama yapmaktadır. Bu hash arama işlemlerinde en çok eşleşmeyi sağlayan dinlediğiniz şarkı olarak düşünülmektedir.
Bazılarınız belki de denk gelmiştir. Bazı şarkıların remix türlerinin orjinal müzik ile benzerliğinden shazam orjinal müziği önermektedir. Aslında oluşan hatanın kaynağı sizin dinlettiğiniz bölümün orjinal şarkı ile remix versiyonu arasındaki aynı veya aşırı benzer olmasından dolayı eşleşen hash sayısının fazla çıkmasından kaynaklıdır.
Shazam her gün çıkan yüzlerce şarkıyı veritabanlarına bu yöntemi uygulayarak indexlemektedir. Böylelikle bu veriler arasında dinlettiğiniz müziği rahatlıkla bulabilmektedir.
Örnekleme
Bu algoritmaların basit bir örneklemesini yaptığım uygulamadan görüntülerle anlatacağım. Geliştirdiğim çok basit bu uygulama müziği hızlıca analiz edip sampling yaparak bir SQLite veritabanı içerisine hashleri yazacağım. Ardından dinlettirdiğim müziğin ne kadar eşleştiğini ve gerçekten bulabileceğini göreceğiz.
Basit bir SQLite veritabanı yapım mevcut. İki tablo, birisi şarkılarımı tuttuğum bir diğeri de bu şarkıya ait olan hashleri tuttuğum tablo
Ardından basit bir sampling alan ve bu sampling leri hashleyip veritabanına kaydeden bir script.
Burada dikkat etmek gereken hususlardan bir tanesi, müziği sağ ve sol kanallara ayırarak sampling ve bu samplinglerin hash e çevirerek kaydedilmesi gerekir. Eğer bizim müziği aldığımız cihazın sadece tek kanallı bir kaydetme tekniği var ise bu durumda eşleşme yaşanmyacaktır.
Öncelikle Da Poet’in “Taş Kağıt Makas” şarkısını SQLite veritabanına indexledim. SQLite veritabanında songs tabloma şu şekilde kayıt yazdırmış oldum.
Bu tablo ise hashlerin tutulduğu tablo kayıtlarının bir bölümü
Şimdi şarkıyı dinletelim ve ardından da eşleşmeyecek bir şarkı dinletelim. Her şarkı için 10 saniyelik zaman ayırıyorum. Üzerinde çalıştığım için şuan parametrik olarak çalışmaktadır. -Hala eksiklikleri var-
Şimdi de Serhat Durmuş’un “Elimi tut” şarkısını çalalım ve eşleşme sayısına bakalım.
Arasındaki farkı görebiliyorsunuz. Bilinmeyen bir şarkı dinlettiğimde 4 tane hash bulduğu için yine de Da Poet olarak söyledi fakat aslında eşleşmedi diyebiliriz. Veritabanımıza Serhat Durmuş’un Elimi tut ve La calin şarkılarını indexleyelim.
Şuan iki şarkıyı da veritabanımıza indexlemiş olduk. Aşağıdaki görüntü ise veritabanı çıktısıdır
Haydi test etme zamanı. 3 şarkıyı da açalım ve dinleyelim. Bakalım ne sonuçlar çıkacak
Şimdi de 3 şarkı arasından olmayan bir şarkı açalım ve ne kadar eşleşme olacak görelim
Yaptığım çalışmaya ait kodları GitHub üzerinden bu linkten bulabilirsiniz. Ayrıca GitHub’dan benzeri proje çalışmalarıma ait kodları ilerleyen zamanlarda yine paylaşacağım, beni takip edebilirsiniz.
Sonlandıralım
Yazının sonuna gelirsek aslında Shazam, o sevdiğimiz güzel müzikleri bu şekilde buluyor ve bize getiriyor. Bakmayın bu kadar basit olduğuna, milyonlarca şarkı arasından 10 saniye içinde dinlediğiniz müziğin bulunması bir mühendis/bilim insanı tarafından tek bir dokunma ile sunmak mükemmel bir şey.