Aplikacja do rozpoznawania muzyki – Shazam na telefon

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.

 

Aplikacja do rozpoznawania muzyki, czyli nadejście rewolucji

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.

 

Szukanie muzyki po dźwięku, czyli 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 – jak działa wykrywacz muzyki na telefon?

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.

 

Shazam na telefon – w jakiej formie 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, czyli jak działa aplikacja do rozpoznawania muzyki

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






Przewiń stronę, by przeczytać kolejny wpis
x