Wykorzystanie technologii.net do identyfikacji rodzaju głosu w aplikacjach mobilnych. Piotr Opiełka1 1 Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok III Streszczenie Celem niniejszej pracy jest prezentacja sposobu dział ania aplikacji na urządzenia z systemem Windows Phone 8, umożliwiającej identyfikacj ę rodzaju głosu wokalnego. Aplikacja wykorzystuje framework XNA, który służ y do pobierania danych z mikrofonu urządzenia. Niezbędne jest ustalenie dźwię ków wzorcowych oraz zakresów danych rodzajów głosów. Dane wyś piewywane przez użytkownika s ą przetwarzane, by w końcu uzyska ć efekt w postaci wyś wietlonego komunikatu o rodzaju głosu. 1 Wstęp Aplikacja została zaprojektowana z myśl ą o systemie Windows Phone 8, który w mojej opinii jest niedoceniany na rynku systemów operacyjnych na urzą dzenia mobilne. Program ma za zadanie identyfikacj ę rodzaju głosu uż ytkownika, wykorzystując przy tym Szybk ą Transformat ę Fourier'a. Pozwala to wokaliście określić skal ę głosu, co bardzo pomaga w wyborze repertuaru piosenek. 2 Windows Phone 8 Windows Phone 8 to system operacyjny na urzą dzenia mobilne, którego producentem jest firma Microsoft. Jego premiera odbyła si ę jesieni ą 2012 roku, a obecnie mamy ju ż do czynienia z dewelopersk ą wersj ą o numerze 8.1. Siln ą stroną systemu jest jego wydajno ść, spowodowana nałoż onymi przez Microsoft obostrzeniami na producentów sprzętu. Odnosi si ę to zarówno do ilości pamięci RAM i wydajnoś ci procesorów, jak i rozmiarów ekranów urządze ń.[1] Zdecydowanym minusem tego systemu jest mała ilo ść aplikacji dostę pnych do pobrania ze sklepu, co przekłada si ę na ma łą popularno ść systemu wś ród użytkowników, tworząc tzw. błędne koł o. Aplikacja, która jest przedmiotem tej pracy, będzie w jakiej ś części wypełnia ć luk ę, któr ą stanowi ą aplikacje do identyfikacji rodzaju głosu dla Windows Phone 8. 1
3 Działanie aplikacji Pierwsz ą rzecz ą jaka zostaje wyświetlona uż ytkownikowi jest pytanie o jego płe ć, by móc rozróżnia ć między męskimi a żeńskimi rodzajami rodzaju. Nastę pnie zostaje wygenerowana częstotliwo ść wzorcowa C4, a uż ytkownik jest zobligowania do wyśpiewywania kolejnych dźwięków w gór ę oraz w dó ł od niej. To pozwala aplikacji po przeanalizowaniu tych częstotliwości na okreś lenie na podstawie wzorców znajdujących si ę w wewnętrznej bazie danych aplikacji nazwy danych dźwięków. Jeż eli kolejne wartości nie odbiegaj ą od nich zbyt mocno (użytkownik nie fał szuje ), analiza trwa do momentu osiągnięcia zbyt słabego sygnału na wejściu (uż ytkownik nie jest w stanie komfortowo osiągn ąć dan ą częstotliwo ść). Działanie aplikacji koń czy wyświetlenie jego rodzaju głosu (patrz rozdzia ł 4), uwzględniając oczywiście moż liwe przesunięcia w gór ę lub w dó ł w ramach danej skali. 4 Rodzaj głosu Jedn ą z podstawowych rzeczy, które powinien zna ć przyszły bąd ź obecny wokalista jest jego skala głosu, któr ą można te ż nazwa ć rodzajem gł osu. Jest to odległo ść między najniższym, a najwyższym dźwię kiem, jaki jest w stanie on wyśpiewa ć. Do przedstawienia tych odległości posłu żę si ę następują cymi nazwami dźwięków z odpowiadającym im zapisie nutowym w notacji naukowej:[2] rys. 1 nazwy dźwięków w notacji naukowej Rozróżniamy rodzaje głosu męskie oraz żeńskie. Główne z mę skich rodzajów głosu to: Tenor rys. 2 tenor zakres dźwięków 2
Baryton rys. 3 baryton zakres dźwięków Bas rys. 4 bas zakres dźwięków Główne rodzaje głosów żeńskich przedstawiaj ą si ę natomiast następująco: Sopran rys. 5 sopran zakres dźwięków Mezzosopran rys. 6 mezzosopran zakres dźwięków Kontralt rys. 7 kontralt zakres dźwięków 3
5 Dźwięk - częstotliwość W nawiązaniu do poprzedniego akapitu warto doda ć, i ż to, co najbardziej interesowało mnie w samej pracy nad aplikacj ą, to konkretne częstotliwości dźwię ku, jakie kryj ą si ę pod ich nazwami. Przykładowe częstotliwości dźwięku i odpowiadają ce mu nazwy to:[3] E2 = 82.407 Hz C4 = 261.63 Hz G4 = 392.00 Hz Znając częstotliwości danych dźwię ków wiemy, w jakich ramach powinny znajdowa ć si ę dźwięki wyśpiewywane przez wokalist ę. Należy jednak przyj ąć peł en margines błędu, poniewa ż prawie niemożliwe jest idealne trafienie w dan ą częstotliwość przez człowieka. 6 Dźwięk, a urządzenia cyfrowe Ważn ą kwesti ą, o której nie można zapomina ć jest fakt, ż e mamy do czynienia z urządzeniem cyfrowym, które przyjmuje dane przychodzą ce z mikrofonu i zapisuje je jako w miar ę proste do zinterpretowania dane. Sygna ł jest próbkowany z pewną częstotliwości ą (w wypadku urządze ń z systemem Windows Phone 8 jest to 16000 Hz), a warto ść jego amplitudy jest zapisywana w postaci wektora danych. W znalezieniu składowych częstotliwości pomoż e nam Szybka Transformata Fouriera (FFT). 7 Szybka Transformata Fouriera Szybka Transformata Fouriera jest zoptymalizowan ą wersj ą Dyskretnej Transformaty Fouriera. Wynikiem jej dział ania jest wektor liczb zespolonych, który przechowuje w części rzeczywistej moc składowej sygnału, a w częś ci urojonej jej przesunięcie fazowe. Ważnym warunkiem wstę pnym, koniecznym do wykonania transformaty jest to, i ż wielko ść pojedynczego wektora danych wejściowych musi być potęg ą dwójki. Algorytm opiera si ę o tzw. operacje motylkowe, a dla transformaty o rozmiarze (2 n ) należy wykona ć n szeregów takich operacji:[4] rys. 8 operacja motylkowa 4
8 Obsługa mikrofonu w Windows Phone 8 Aplikacja wykorzystuje do obsługi mikrofonu framework XNA. Zosta ł on stworzony przez Microsoft w celu umoż liwienia deweloperom pisania gier na Windows, konsol ę Xbox 360 oraz na system Windows Phone 7. Mimo, i ż firma ta zrezygnował a z jego wsparcia, to nadal dostarcza on kilka przydatnych dla naszych potrzeb klas.[5] Kolejne kroki, jakie należy zrobi ć, by przygotowa ć aplikacj ę do współ pracy z mikrofonem urządzenia:[6] Utworzenie instancji klasy o nazwie Microphone, która pozwala na bezpośredni dostęp do mikrofonu urzą dzenia mobilnego i prosty sposób jego obsługi. Przypisanie tej instancji domyślnego mikrofonu urządzenia za pomoc ą zmiennej statycznej Defaulf, znajdującej si ę w tej klasie. Zapewnienie bufora dla danych przychodzą cych z mikrofonu (dane ładuje si ę do bufora za pomoc ą metody GetData, któr ą wywoł ujemy w momencie wystąpienia zdarzenia sygnalizującego zapełnienie bufora). Wywołanie pętli koniecznej do działania programu, wymaganej równie ż przez framework XNA. 9 Aspekty analizy częstotliwości dźwięku Ważn ą kwesti ą, o której należy w tym momencie wspomnie ć w kontekś cie wykonywania Szybkiej Transformaty Fouriera, jest konieczno ść zapewnienia takiej wielkości bufora, by ta spełniała warunek bycia potęg ą dwójki. Można tego dokonać przez ustalenie odpowiedniej liczby milisekund przeznaczonych na jedno zapeł nienie bufora. By uzyska ć zadowalając ą rozdzielczo ść do ustalenia częstotliwości dźwię ku wyśpiewywanego przez wokalist ę, należy ustawi ć j ą na 250 ms oraz wymusi ć na transformacie stworzenie sobie osobnego bufora, który miałby odpowiedni ą wielkość (czas należy podawa ć z dokładności ą do 10 ms, co uniemożliwia ustawienie go na 256 ms, która to warto ść jest optymalna dla częstotliwości próbkowania 16kHz). Kolejnym zagadnieniem, nad którym należy si ę pochyli ć jest problem pojawiania si ę w analizowanym sygnale dźwięków harmonicznych dla danego dźwięku. Należy to uwzględni ć w analizie podanego sygnału wejściowego. Mówiąc o dźwię kach harmonicznych, mam na myśli częstotliwości będące wielokrotności ą danej częstotliwości. W praktyce oznacza to, i ż w danej analizie możemy zaobserwowa ć na przykład nie tylko częstotliwo ść 100 Hz, ale równie ż 200 Hz, 300 Hz, itd.[7] Tzw. częstotliwo ść bazowa jest zwykle sygnałem o największej mocy. Nie moż na jednak przywiązywa ć si ę do tego, poniewa ż może si ę okaza ć, że ta częstotliwo ść nie będzie w danej próbce sygnałem o takiej mocy. By unikn ąć pomyłki, należ y zanalizowa ć liczb ę wystąpie ń wielokrotności danej częstotliwoś ci i na tej podstawie określi ć częstotliwo ść bazow ą. W przypadku braku tej częstotliwości należy policzyć liczb ę wielokrotności połowy pierwszych dwóch znaczących częstotliwości. 5
Ważnym aspektem analizy, który równie ż trzeba uwzględni ć, jest konieczność ograniczenia możliwego pasma przyjmowanych częstotliwości, by pomin ąć np. szumy i inne niepożądane zakłócenia. Aplikacja nagrywa dźwięk w okreś lonym czasie, w którym liczba wektorów wejściowych nie ogranicza si ę do jednego, wię c aby obliczy ć częstotliwo ść sygnału, bierze ona pod uwag ę średni ą częstotliwo ść jaka wystąpił a w próbkach. Ta średnia częstotliwo ść jest częstotliwości ą właściw ą. 10 Podsumowanie Aplikacja, która jest przedmiotem artykułu jest przede wszystkim rozwią zaniem dla osób, które chciałyby zacz ąć przygod ę z muzyk ą, a nie wiedz ą, które piosenki s ą dla nich stworzone. Można te ż dzięki niej stwierdzi ć, czy użytkownik fał szuje. Możliwości systemu Windows Phone 8 pozwalaj ą na wystarczając ą analiz ę gł osu danej osoby, umożliwiając tym samym określenie jej rodzaju gł osu. Program korzysta z Szybkiej Transformaty Fourier'a, która odpowiada na potrzeb ę szybkiej analizy dźwięku. Mam nadziej ę, że ta aplikacja wniesie swój minimalny wkł ad w rozwój rynku aplikacji Windows Phone 8, będąc alternatyw ą dla podobnych tego typu programów dostępnych na konkurencyjne, bardziej popularne platformy mobilne. Bibliografia rys. 9 przykładowy ekran aplikacji [1] http://www.windowsphone.com/pl-pl/how-to/wp8/basics/windows-phone-8-update-history [2] http://vocalsheetmusic.net/ranges [3] http://www.phy.mtu.edu/~suits/notefreqs.html [4] http://en.wikipedia.org/wiki/fast_fourier_transform [5] http://en.wikipedia.org/wiki/microsoft_xna [6] http://msdn.microsoft.com/en-us/library/windowsphone/develop/gg442302%28v=vs.105%29.aspx [7] http://www.ihear.com/pitch/paradoxical.html 6