P. Opiełka, Wykorzystanie technologii .NET do identyfikacji rodzaju
Transkrypt
P. Opiełka, Wykorzystanie technologii .NET do identyfikacji rodzaju
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 (2n) 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. rys. 9 – przykładowy ekran aplikacji Bibliografia [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