Jak działa Shazam? Rozpoznawanie muzyki w szczegółach

Paweł Dedio Programowanie 2019-02-23

Nie wiem jak Wy, ale ja uważam aplikację Shazam za fenomenalną! Bardzo często byłem w sytuacji, gdy słyszałem naprawdę świetną piosenkę i poznałem jej tytuł tylko dzięki tej aplikacji. Tym samym zapraszam Was do artykułu, w którym opowiem co nieco o tej wspaniałej aplikacji. Jak zawsze starałem się opisać wszystko prostym językiem, jednak w przypadku Shazama mamy do czynienia z dość skomplikowanym procesem. Mimo pominięcia kilku kwestii artykuł zahacza o wiele mocno technicznych zagadnień. Dlatego, jeśli kogoś nudzą techniczne rzeczy, może pominąć początkowe akapity i od razu przejść do streszczenia na dole.

Początki Shazam — rozpoznawanie muzyki bez smartfonów?

Firma Shazam (a tak właściwie to Shazam Entertainment Ltd.) została założona w 1999 roku. Debiut działającego produktu nastąpił w 2002 roku w Wielkiej Brytanii. Pewnie myślisz sobie teraz, jak to możliwe, skoro smartfony zostały zaprezentowane dopiero kilka lat później. Mianowicie początkowo aplikacja ta działała w całkowicie inny sposób niż ma to miejsce teraz. W celu rozpoznania jakiejś muzyki musieliśmy zadzwonić pod specjalny numer 2580 i przybliżyć telefon do źródła dźwięku. Po 30 sekundach połączenie zostawało automatycznie zakończone. Następnie dostawaliśmy SMS-a z tytułem piosenki oraz informacją o wykonawcy. Z czasem do wiadomości dostarczany był link umożliwiający kupno piosenki. W 2004 roku firma zadebiutowała w USA, zawiązując współpracę z tamtejszym operatorem AT&T. Zasada działania była bardzo podobna jak w przypadku Wielkiej Brytanii.

Nadejście nowej ery

Największy przełom nastąpił w 2008 roku. W lipcu tego roku Shazam wypuścił aplikację na iOS, natomiast 3 miesiące później odpowiednik na platformę Android. To właśnie wtedy nastąpił największy wzrost popularności tej aplikacji. Od tego czasu Shazam prężnie się rozwijał. Dodano między innymi rozpoznawanie reklam oraz programów telewizyjnych. Nie poprzestano również tylko na aplikacjach na platformy mobilne. Shazam posiada też aplikacje dostępne na MacOS, Apple Watch oraz Wear OS. W 2018 roku usługa została kupiona przez Apple za 400 milionów USD. Przy okazji Amerykanie obiecali, że z aplikacji zostaną usunięte wszystkie reklamy. Jestem pewien, że to nie koniec rozwoju i z pewnością niedługo zobaczymy nowe funkcjonalności.

Skąd Shazam bierze piosenki?

Wiele razy byłem pod wrażeniem tego, że ta niepozorna aplikacja potrafi rozpoznać nawet mało popularne utwory. Nie mówiąc już o tym, że bez trudu możemy rozpoznać muzykę, która przed chwilą została wydana. Nawet nie zagłębiając się w szczegóły techniczne dotyczące działania tej aplikacji, możemy wywnioskować, że Shazam posiada imponującą bazę utworów, z którymi porównuje to, co nagramy za pomocą smartfona. Jest to możliwe dzięki współpracy z wytwórniami oraz serwisami zajmującymi się sprzedażą utworów muzycznych. To nie koniec, bo twórcy tej aplikacji zawiązali współpracę z wieloma stacjami telewizyjnymi, sieciami kin, a także stacjami radiowymi. Wszystko to działo się oczywiście stopniowo. Dzisiaj trudno wyobrazić sobie, żeby na rynek wszedł jakiś nowy gracz i mógł zagrozić Shazamowi. Zdobycie podobnej bazy muzycznej zajmie na pewno kilka lat. Oczywiście konkurencja istnieje, lecz Shazam jest liderem w tej branży.

Troszkę teorii

Zanim przejdziemy dalej, musimy sobie wyjaśnić, czym jest proces haszowania. Od razu powiem, że nie ma to nic wspólnego z narkotykami. Nie chcę się tutaj zagłębiać za bardzo w detale, żeby nikogo nie zanudzić, dlatego skupimy się tylko na istocie zagadnienia. Algorytmy haszujące działają w taki sposób, że dowolny ciąg znaków zamieniają na inny ciąg o ściśle określonej długości. Oznacza to, że długość hasza z ciągu znaków „ab” będzie taka sama jak dla ciągu znaków „abcd”. Kolejną ważną cechą tych algorytmów jest powtarzalność. Za każdym razem, gdy wyliczamy hasz dla znaków „ab”, otrzymujemy taki sam wynik. Równie istotną kwestią jest jednostronność takich algorytmów. Nie ma bowiem sposobu na uzyskanie oryginalnego ciągu znaków z gotowego hasza. Innymi słowy, nie jesteśmy w stanie odwrócić procesu haszowania.

Algorytmy haszujące to podstawa

Te wszystkie cechy sprawiają, że algorytmy haszujące są powszechnie używane między innymi do przechowywania haseł w serwisach internetowych. Podczas rejestracji w dowolnym serwisie z podanego przez nas hasła zostaje obliczony hasz i to właśnie on, a nie oryginalne hasło, jest przechowywany w bazie danych. Przy logowaniu podane przez nas hasło również zostaje przekształcone na hasz i porównywane z tym w bazie danych. Jeśli hasz się zgadza, to zostajemy pomyślnie zalogowani. Dzięki takiemu podejściu nawet w przypadku wycieku bazy danych nasze hasła są bezpieczne, ponieważ z hasza nie jesteśmy w stanie uzyskać oryginalnego hasła.

W jakiej formie Shazam trzyma muzykę?

Powoli przechodzimy do tematu, który nas najbardziej interesuje, czyli informatyki. Wiem, że za tą z pozoru prostą aplikacją stoi naprawdę zaawansowana technologia. Trzymanie wielu milionów piosenek w formie, jaką znamy, byłoby niesamowicie obciążające. Dlatego programiści wymyślili bardziej efektywny sposób. Podczas zapisu nowej piosenki do bazy Shazama w pierwszym kroku utwór zostaje poddany wstępnej kompresji. Usuwane są szumy, dźwięk jest mono i tak dalej. Następnie z dźwięku zostaje wygenerowany spektrogram, czyli wykres pokazujący częstotliwość dźwięku w zależności od czasu wraz z uwzględnieniem natężenia (głośności) dźwięku dla danej częstotliwości. Przykład poniżej:

Jednak taka forma również jest dość ciężka, ponieważ przechowujemy tutaj dane w formie trójwymiarowej. Dlatego na podstawie naszego spektrogramu Shazam generuje tak zwany odcisk palca (fingerprint). Zasada działania algorytmu Shazama jest pilnie strzeżona, więc pozostaje się tylko domyślać jego dokładnego działania. Możemy jednak przypuszczać, że algorytm ten wybiera tylko odpowiednie częstotliwości, dodatkowo wybierając te o odpowiedniej głośności (najjaśniejsze plamy na spektrogramie). W ten sposób otrzymujemy odcisk palca przechowujący informacje o dźwiękach występujących w danym czasie, pomijając wszelakie szumy. Możemy to porównać do zapisu nutowego na pięciolinii, tyle że w cyfrowej formie, gdzie nuty reprezentują najbardziej wyraziste dźwięki naszej piosenki.

Rozpoznawanie muzyki to szukanie części wspólnych

Przed nami już tylko ostatni krok. Na podstawie naszej piosenki przestawionej na specyficzne nuty zostają wygenerowane kombinacje par nut następujących po sobie. Pamiętacie algorytmy haszowania? Właśnie teraz ta wiedza się przyda. Teraz z każdej takiej pary zostaje wyliczony hasz i zapisany w bazie danych wraz z informacją, z jakiego utworu pochodzi oraz w której sekundzie utworu występuje. Dane w takiej formie są od razu gotowe do porównywania z fragmentami nagranych utworów przesłanych przez aplikacje.

Jak aplikacja Shazam przesyła nagrane utwory?

Ten punkt będzie nieco oparty na domysłach, ponieważ nie znamy dokładnych szczegółów. Wiemy, że nagrany utwór przechodzi taki sam proces jak piosenka dodawana do bazy danych, lecz nie do końca wiadomo, kiedy się to dzieje. Mamy bowiem dwie możliwości. Możemy obliczać odpowiednie hasze na smartfonie już podczas nagrywania i wysyłać je na serwer. Takie podejście sprawia, że minimalizujemy ilość przesyłanych danych. Dzięki temu nie narażamy użytkownika na niepotrzebne koszty, ponieważ wysyłamy ciąg znaków, a nie całe nagranie muzyczne.

Shazam nie dzieli się swoimi rozwiązaniami

Drugim podejściem jest bezpośrednie przesyłanie nagranego dźwięku na serwer. W takim podejściu ograniczamy ilość wykonywanych przez smartfon operacji. Dzięki temu nie zużywamy jego zasobów. Z drugiej strony jednak przesyłamy na serwer znacznie większą ilość danych niż w podejściu pierwszym. Osobiście uważam, że Shazam korzysta z pierwszego podejścia. Wydaje się ono rozsądniejsze, a dodatkowo nie zauważano znaczącego zużycia danych podczas korzystania z tej aplikacji, lecz nie jest to oficjalnie potwierdzone.

Jak wygląda porównywanie utworów na serwerze?

Podczas nagrywania utworu na bieżąco powstają nowe hasze reprezentujące występujące po sobie dźwięki. Serwer, na którym znajduje się baza danych odpowiednio przygotowanych haszów, porównuje czy w którymś utworze znajduje się taka sama sekwencja haszów jak te przesłane przez smartfona. Wykorzystując naszą analogię do nut, algorytm po prostu sprawdza, czy sekwencja nut wysłana przez smartfona odpowiada którejś z sekwencji zapisanej na serwerze. Jeśli odnajdziemy pasujący utwór, to wysyłamy na smartfon wszystkie potrzebne informacje, takie jak tytuł, autor, rok wydania i tak dalej. Cały proces można porównać do wyszukiwania jakiegoś zdania pośród różnych artykułów. Musimy wtedy porównać, czy w którymś z artykułów z naszej bazy znajduje się sekwencja kolejno występujących wyrazów.

Tak więc widać, że samo porównywanie nie jest jakoś szczególnie skomplikowane. Najtrudniejszym zadaniem w stworzeniu takiej aplikacji jest opracowanie algorytmu, który przetworzy dźwięk na czytelny ciąg znaków. Nic dziwnego więc, że do wykonania tego zadania twórcy Shazama zatrudnili absolwenta studiów doktoranckich na uniwersytecie Stanford.

Obiecane streszczenie

Podczas dodawania nowego utworu do bazy danych Shazama zostają z niego wyciągnięte najbardziej charakterystyczne dźwięki melodii. Pomijane są wszelkiego rodzaju szumy i inne dźwięki. Na ich podstawie generujemy pary dźwięków następujących po sobie i zapisujemy je w odpowiedniej formie w bazie danych wraz z informacją, w której sekundzie wystąpiły one w utworze. Taki sam proces przechodzi nagrywany smartfonem dźwięk. Następnie pary dźwięków wygenerowane z takiego nagrania zostają porównane z tymi zapisanymi w bazie danych. Jeśli znajdziemy pasujący utwór, to wysyłamy na smartfon informację o tytule oraz wykonawcy.

Tym sposobem dotarliśmy do końca. Mam nadzieję, że nie zagmatwałem za bardzo i wszystkie kroki są dla was jasne. Jeśli nie to śmiało zadawajcie pytania w komentarzach. Postaram się rozmyć wszelkie wątpliwości. Oczywiście widzimy się już za tydzień, gdzie opowiem Wam o procesie powstawania aplikacji mobilnej. Do zobaczenia!

Zapraszam również na największe w Polsce forum dla programistów Android. Jeśli macie pytania odnośnie do kariery programisty — zapraszam do działu Kariera programowanie. Zachęcam również do przejrzenia działu Praca oraz zlecenia dla programistów — być może to właśnie tam znajdziesz swoją pierwszą pracę.

Poprzednie odcinki:

  1. Typowy dzień pracy programisty
  2. Wady pracy programisty
  3. Zalety pracy programisty
  4. [FAQ] Wszystko, co powinieneś wiedzieć, jeśli interesuje Cię praca programisty
  5. Co mnie zdziwiło w programowaniu?
  6. Motywacje – w jaki sposób nie stracić zapału do programowania?
  7. Jaką firmę wybrać na początku kariery programisty?
  8. Jak wygląda rozmowa o pracę na stanowisko programisty?
  9. Jak zacząć programować?
  10. Skąd czerpać wiedzę o programowaniu?
  11. Początki programowania — jaką technologię wybrać?
  12. Cykl życia aplikacji na Androida — co to takiego?
  13. Jak tworzymy interfejs użytkownika w aplikacjach na Androida?
  14. Jak system Android oszczędza energię?
  15. Jak działają i czym są powiadomienia push w Androidzie?
  16. W jaki sposób aplikacje pobierają dane z zewnętrznych serwisów i czym jest API?
  17. Jak działają pozwolenia w systemie Android?
  18. Śledzenie użytkowników — co wiedzą o nas aplikacje?
  19. Dlaczego aplikacje na Androida zajmują coraz więcej miejsca?
  20. Frameworki crossplatform – jak stworzyć aplikację na iOS i Androida jednocześnie?
  21. Jak obsłużyć kilka języków w aplikacji na Androida?
  22. Dodatkowe funkcjonalności Androida, których nikt nie wspiera
  23. Co się dzieje podczas kompilacji aplikacji na Androida?
  24. AppBundle — jak Google rewolucjonizuje Androida?
  25. W jaki sposób testujemy aplikacje na Androida?
  26. Jak zabezpieczamy aplikacje na Androida?
  27. Początki programowania na Androida — Java czy Kotlin?
  28. Główne zasady programowania — o tym musisz pamiętać!
  29. Po co nam usługi Google Play?

Źródła: Wikipedia.org, Shazam.com, Popruntheworld.pl



  • Marcin Wlaczak

    szkoda, lepiej mi się żyło jak myślałem że po drugiej stronie siedzi jakaś komisja złożona z np. Marka Niedźwieckiego, Mana, Sierockiego no ale cóż jak żyć?

  • PaPs

    Autor chyba nie słyszał o SoundHound… do którego możesz nawet gwizdać + rozpoznaje wersję koncertowe

  • maxprzemo83

    Fajnie by było zrobić porównanie z konkurencją. Shazam vs Asystent Google. Szybkość rozpoznawania i trafność.

    • Bart Bart

      shazam póki co wygrywa

      • maxprzemo83

        Aż sobie sprawdziłem i faktycznie. Na 10 utworów Shazam szybciej rozpoznał 8 😉

  • Supcio artykuł, kawał dobrej roboty 😛
    Naprawdę się przyjemnie oraz ciekawie czytało 🙂
    Ale załączam również wersję dla leniwych (ciekawa oprawa wideo) 😀
    https://www.youtube.com/watch?v=kMNSAhsyiDg

  • Nickon

    Nie wiem po co opisywać algorytm, którego działania nie znacie. I nie chodzi mi o brak wiedzy autora nt. algorytmiki. Nie znam go, może jest mistrzem. W każdym razie takie algorytmy, rozwijane latami w prywatnych, dużych firmach, to zagadka. Rozumiem, że autor chciał przybliżyć obraz, jak to wygląda po stronie Shazama, no ale lepiej było opisać działanie jakiegoś konkretnego, nazwanego algorytmu, niż zgadywać ogólniki. Równie dobrze prawdziwy algorytm może robić totalnie inne rzeczy i działać kompletnie inaczej…

    • gumis

      Nie przesadzaj, to co jest pewne autor przedstawił. to co tajne trochę zgaduje, ale podał możliwości. Ciężko oczekiwać, że ujawni tajemnice firmy 😛

    • Paweł Dedio

      W tym artykule chciałem przede wszystkim przedstawić ogólną koncepcję działania Shazama. Mógłbym tutaj opisywać konkretne algorytmy związane z przetwarzaniem sygnałów, ale wydaje mi się że taki artykuł bylby dość nudny. Pamiętaj też, że te artykuły są kierowane do początkujących, wiec nie powinny zawierać mocno technicznych zagadnień.

    • Bartasx

      Wydaje mi się że treść artykułu nie jest dla Ciebie niczym nowym. Wiedziałeś to wcześniej lub domyślałeś się jak to działa ponieważ masz wiedzę w danym zakresie i dla tego artykuł wydał Ci się nieciekawy i niepotrzebny. Ja tu zajrzałem z ciekawości i też niczego nowego się nie dowiedziałem przez co również mam odczucie, że było to niepotrzebne. Jednak dla innych będzie to fajna ciekawostka.

  • Flaqs

    Super, ale teraz to tak na prawdę czekam na kolejny artykuł 🙂

  • SoGood

    Rewelacyjny toto był Track ID.
    Został przyjęty przez …Shazam :/

    W Track ID nie trzeba było normalnej piosenki „nasluchiwać” – można było nucic, gwizdać, „lalować” byle w taktach szukanej piosenki.
    To była magia!

    Ale już jej nie ma 🙁

    • Paweł Dedio

      Rowniez pamiętam Track ID, w tamtych czasach dla mnie to był jakiś kosmos. Chociaż Shazam również podziwiam za jego szybkość dzialdzia.

      • Jeżeli to prawda o gwizdaniu, nuceniu w Track ID to Shazam powinien pomyśleć o takich funkcjach. Nie dość, że szybko znajdowałby utwory to jeszcze rozpoznawałby tak jak robił to Track ID – piękna sprawa 😉

    • można było nucic, gwizdać, „lalować”

      Srsly? No to kurcze niezła apka. Wiadomo czemu upadła? Nucenia, gwizdanie świetna sprawa, aż lekki szok, że upadła mając takie funkcje 🙂

      • SoGood

        Nie upadła, została przejęta przez potentata (to wynika z artykułu) i starego wyjadacza.

    • Robe

      Track ID był na smartfonach Sony.

      • SoGood

        Nie tylko. Był ogólnodostępny w sklepie Play.
        Zdaje się, że był preinstalowany na hułejach 🙂

        • Robe

          Był preinstalowany na Xperiach.

    • Bart Bart

      ta opcja działa w SoundHound, raz mi się udało w ten sposób znaleść utwór który dręczł mój umysł



x