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

Podobne dokumenty