Analiza dźwięku
Analiza dźwięku
Pracujemy nad projektem, który ma działać jak kamerton (program który bedzie sprawdzał częstotliwośc dźwięku z mikrofonu i porównywał ją z wzorcową). Problem pojawia się na samym początku, ponieważ nie wiemy jak sprawdzić częstotliwość zadanego dźwięku.
Próbowałyśmy zadać sygnał do funkcji Tone Measurements2 i następnie odczytac częstotliwość. Ta funkcja reaguje na sygnał, ale częstotliwości, które wyrzuca nijak mają się do tego, czego mogłybysmy się spodziewać (tysieczne częsci Hz dla głosu). Funkcja ta doskonale się sprawdza, gdy podany zostanie jej sygnał z generatora, np. sinusoida.
Prosimy o pomoc.
P.S. Nie mamy zbyt dużego doświadczenia. Pracujemy na labview 7.1.
Próbowałyśmy zadać sygnał do funkcji Tone Measurements2 i następnie odczytac częstotliwość. Ta funkcja reaguje na sygnał, ale częstotliwości, które wyrzuca nijak mają się do tego, czego mogłybysmy się spodziewać (tysieczne częsci Hz dla głosu). Funkcja ta doskonale się sprawdza, gdy podany zostanie jej sygnał z generatora, np. sinusoida.
Prosimy o pomoc.
P.S. Nie mamy zbyt dużego doświadczenia. Pracujemy na labview 7.1.
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Analiza dźwięku
A sygnał z mikrofonu to co to za sygnał? Mowa? Muzyka?
Na syntetycznym polu na pewno działa lepiej, ale w rzeczywistym zastosowaniu też będzie działać tylko potrzeba trochę wysiłku żeby ją do tego zmusić ;)Funkcja ta doskonale się sprawdza, gdy podany zostanie jej sygnał z generatora, np. sinusoida.
Analiza dźwięku
Sprawdzamy na mowie (co nie zmiania faktu, że częstotliwość powinna być rzędu setek)
A na czym miałby polegać ten wysiłek?
A na czym miałby polegać ten wysiłek?
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Analiza dźwięku
A gdzie jest napisane, że tak powinno być? Nie, to byłoby za proste. Ogólnie rozumiana częstotliwość sygnału w przypadku mowy, to, nie wdając się w szczegóły, dość delikatna sprawa. Odrębna sprawa to sposób działania algorytmu wyznaczania częstotliwości sygnału, bo te mogą być różne.Sprawdzamy na mowie (co nie zmiania faktu, że częstotliwość powinna być rzędu setek)
Zrezygnuj(cie) z mowy na rzecz innych sygnałów testowych: grajcie na harmonijce, cymbałkach, gitarze albo ewentualnie użyjcie gotowej muzyki. Od razu będzie lepiej.
Analiza dźwięku
Próbowałyśmy z fletem, działo się to samo. Nadal nie wiemy co zrobić, żeby wszystko działało jak należy. Z Labview mamy do czynienia od 2 miesięcy.
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Analiza dźwięku
Nagrajcie ten flet na wava, wrzućcie tu i coś z tym fantem zrobimy.
EDIT: Przypomniało mi się... spróbujcie wykorzystać funkcję Extract Single Tone Information (o ile ją macie, bo chyba nie we wszystkich wersjach jest).
A flet nagrajcie swoją drogą - najlepiej jakiś "Wlazł kotek..." ]
EDIT: Przypomniało mi się... spróbujcie wykorzystać funkcję Extract Single Tone Information (o ile ją macie, bo chyba nie we wszystkich wersjach jest).
A flet nagrajcie swoją drogą - najlepiej jakiś "Wlazł kotek..." ]
Ostatnio zmieniony 18 gru 2007 10:55 przez jogurt_owocowy, łącznie zmieniany 1 raz.
-
- Posty: 383
- Rejestracja: 17 lis 2006 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Warszawa
Re: Analiza dźwięku
Po prostu przebija się takt muzyki, czy rytm mowy.
Proponuję odfiltrować przed obróbką wszystko poniżej 20 Hz.
Jak długie są badane próbki? Sensowne byłoby pocięcie próbki na nachodzące na siebie części i analizować jak w nich zmienia się dominujący ton.
Wszystko zależy od tego jaki jest cel znajdowania takiej częstotliwości, w końcu wiadomo, że w takiej próbce dźwięk o konkretnej częstotliwości trwa dosyć krótko. Domyślam się że chodzi o rozpoznawanie głosu, czy instrumentu... W tym wypadku trzeba raczej wyznaczać pewne sygnatury.
Proponuję odfiltrować przed obróbką wszystko poniżej 20 Hz.
Jak długie są badane próbki? Sensowne byłoby pocięcie próbki na nachodzące na siebie części i analizować jak w nich zmienia się dominujący ton.
Wszystko zależy od tego jaki jest cel znajdowania takiej częstotliwości, w końcu wiadomo, że w takiej próbce dźwięk o konkretnej częstotliwości trwa dosyć krótko. Domyślam się że chodzi o rozpoznawanie głosu, czy instrumentu... W tym wypadku trzeba raczej wyznaczać pewne sygnatury.
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Analiza dźwięku
Tak mnie jakoś natchnęło...
No więc tak:
Gdzieś na necie znalazłem mp3kę z "Wlazkotkiem". "Utwór" został przefiltrowany górnoprzepustowo od 400 Hz i zapisany do wava (w archiwum).
Teraz co się dzieje w programie?
Po wczytaniu wektor próbek zamieniany jest na waveform i wpuszczany do pętli While.
2. (Zielona ramka) W pętli za pomocą Get Waveform Subset brane są kolejne ramki sygnału o długości framelength (domyślnie 0,2s).
Wielkość przesunięcia pomiędzy jedną a drugą ramką określa kontrolka frameshift (domyślnie też 0,2s). Teraz każda ramka podawana jest na wejście klocka Extract Single Tone Information, który na wyjściu zwraca częstotliwość dominującą w tej ramce i rysuje przebieg kolejno wykrytych częstotliwości z użyciem Charta.
Na tym można by było skończyć, ale gdzie tam... teraz będzie najlepsze
Nad górną pętlą jest tablica częstotliwości odpowiadających kolejnym nutkom do-re-mi-... W żółtej ramce jest wyszukiwana częstotliwość z tablicy o wartości najbliższej częstotliwości wykrytej poprzez odjęcie wykrytej wartości częstotliwości od tablicy i znalezienie gdzie moduł z różnicy jest minimalny.
Znaleziona częstotliwość odpowiada stosownej nutce. Jeśli bieżąca nutka jest inna niż poprzednia to wykonywane jest wnętrze Case'a, gdzie jest ona dodawana do wektora z partyturą. Żeby było jeszcze fajniej generowany jest na szybko prostokąt o wykrytej częstotliwości (ładniej brzmi niż sinus) i odgrywany jest przez kartę dźwiękową dzięki czemu można się na własne uszy przekonać jak działa analizator.
Na koniec wektor z nutami jest zamieniany na tablicę 2D żeby to ładniej wyglądało. Nutki to odpowiednio obrobione Picture Ringi, a partytura to tablica z nich zrobiona. Zerowy element Ringa to pusta pięciolinia, a pierwszy - klucz wiolinowy, nuty zaczynają się od drugiego stąd dodanie dwójki do znalezionego indeksu za bloczkiem Array Max & Min.
Pozdrawiam, miłej zabawy
PS. Tak naprawdę te akurat nuty (C5, D5, ...) powinny być o oktawę wyżej na pięciolinii, ale akurat takie obrazki były na Wiki ]

Gdzieś na necie znalazłem mp3kę z "Wlazkotkiem". "Utwór" został przefiltrowany górnoprzepustowo od 400 Hz i zapisany do wava (w archiwum).
Teraz co się dzieje w programie?
Po wczytaniu wektor próbek zamieniany jest na waveform i wpuszczany do pętli While.
2. (Zielona ramka) W pętli za pomocą Get Waveform Subset brane są kolejne ramki sygnału o długości framelength (domyślnie 0,2s).
Wielkość przesunięcia pomiędzy jedną a drugą ramką określa kontrolka frameshift (domyślnie też 0,2s). Teraz każda ramka podawana jest na wejście klocka Extract Single Tone Information, który na wyjściu zwraca częstotliwość dominującą w tej ramce i rysuje przebieg kolejno wykrytych częstotliwości z użyciem Charta.
Na tym można by było skończyć, ale gdzie tam... teraz będzie najlepsze

Nad górną pętlą jest tablica częstotliwości odpowiadających kolejnym nutkom do-re-mi-... W żółtej ramce jest wyszukiwana częstotliwość z tablicy o wartości najbliższej częstotliwości wykrytej poprzez odjęcie wykrytej wartości częstotliwości od tablicy i znalezienie gdzie moduł z różnicy jest minimalny.
Znaleziona częstotliwość odpowiada stosownej nutce. Jeśli bieżąca nutka jest inna niż poprzednia to wykonywane jest wnętrze Case'a, gdzie jest ona dodawana do wektora z partyturą. Żeby było jeszcze fajniej generowany jest na szybko prostokąt o wykrytej częstotliwości (ładniej brzmi niż sinus) i odgrywany jest przez kartę dźwiękową dzięki czemu można się na własne uszy przekonać jak działa analizator.
Na koniec wektor z nutami jest zamieniany na tablicę 2D żeby to ładniej wyglądało. Nutki to odpowiednio obrobione Picture Ringi, a partytura to tablica z nich zrobiona. Zerowy element Ringa to pusta pięciolinia, a pierwszy - klucz wiolinowy, nuty zaczynają się od drugiego stąd dodanie dwójki do znalezionego indeksu za bloczkiem Array Max & Min.
Pozdrawiam, miłej zabawy

PS. Tak naprawdę te akurat nuty (C5, D5, ...) powinny być o oktawę wyżej na pięciolinii, ale akurat takie obrazki były na Wiki ]
- Załączniki
-
- mozart.zip
- (1.2 MiB) Pobrany 395 razy
Ostatnio zmieniony 18 gru 2007 22:05 przez jogurt_owocowy, łącznie zmieniany 8 razy.
Analiza dźwięku
Dzięki wielkie za takie zaangażowanie! W okresie światecznym projekt leżał odłogiem, ale dzieki Twojej pomocy wszystko ruszyło! Jeszcze raz bardzo dziękujemy! 
Magda i Dorota

Magda i Dorota
Re: Analiza dźwięku
dopiszę tutaj... a jak zrobić coś takiego.
wgrywam do programu jakiś plik (np. wav) i moge zmienic jego tempo (szybkość) ale bez zmiany wysokości utworu (tonacji).
{|=
z góry dzięki
pozdrawiam
wgrywam do programu jakiś plik (np. wav) i moge zmienic jego tempo (szybkość) ale bez zmiany wysokości utworu (tonacji).

z góry dzięki
pozdrawiam
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Analiza dźwięku
No to trochę bardziej złożona sprawa. Napisz trochę więcej szczegółów, co to za sygnał, którego długość chcesz zmieniać i po co?
Analiza dźwięku
np. chce zmieniać plik wav zwiększać jego szybkość lub zmniejszać pozostając nadal w tej samej tonacji.
powód - takie mam zadanie
powód - takie mam zadanie

- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Analiza dźwięku
Co to za sygnał (a nie co to za plik)?
To taka operacja na otwartym sercu i pytanie co chce się uzyskać. Możliwe, że inaczej trzeba będzie postępować z sygnałem mowy (gdzie liczy się wartość informacyjna, a ewentualne zakłócenia są dopuszczalne o ile nie zmniejszają zrozumiałości), a inaczej z muzyką (gdzie trzasków nikt nie lubi).
Ja spróbowałbym czegoś takiego. Najpierw sygnał rozciągnąć/ścisnąć nie dbając o zmianę tonacji, a potem w dziedzinie częstotliwości odpowiednio przesunąć do tonacji właściwej np. najpierw dwukrotne rozciągnięcie, a potem dwukrotne zwiększenie częstotliwości.
Pozdrawiam :]
To taka operacja na otwartym sercu i pytanie co chce się uzyskać. Możliwe, że inaczej trzeba będzie postępować z sygnałem mowy (gdzie liczy się wartość informacyjna, a ewentualne zakłócenia są dopuszczalne o ile nie zmniejszają zrozumiałości), a inaczej z muzyką (gdzie trzasków nikt nie lubi).
Ja spróbowałbym czegoś takiego. Najpierw sygnał rozciągnąć/ścisnąć nie dbając o zmianę tonacji, a potem w dziedzinie częstotliwości odpowiednio przesunąć do tonacji właściwej np. najpierw dwukrotne rozciągnięcie, a potem dwukrotne zwiększenie częstotliwości.
Pozdrawiam :]
Analiza dźwięku
nie zrozumiałam więc pytania (co to za sygnał), prosze wybaczyć w tych sprawach jestem laikiem. Nie jest dla mnie ważne czy to mowa czy muzyka i jak bardzo będą słyszalne trzaski, czy słowa będą zrozumiałe. Chodzi o samo zademonstrowanie efektu time stretching. Oczywiście zrozumiałość i jakość dźwięku po efekcie powinna być "znośna" 
np. najpierw dwukrotne rozciągnięcie, a potem dwukrotne zwiększenie częstotliwości.
może faktycznie ... a na pewno tonacja będzie taka sama?
Póki co nie wychodzi mi żadne rozwiązanie... gdzies popełniam błąd i w efekcie nie działa nic
będę walczyć 
pozdrawiam

np. najpierw dwukrotne rozciągnięcie, a potem dwukrotne zwiększenie częstotliwości.
może faktycznie ... a na pewno tonacja będzie taka sama?
Póki co nie wychodzi mi żadne rozwiązanie... gdzies popełniam błąd i w efekcie nie działa nic


pozdrawiam

- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Analiza dźwięku
No nie ma siły żeby było inaczej. Dwukrotne rozciągnięcie dwukrotnie zwiększy wszystkie częstotliwości w sygnale, więc trzeba je będzie ponownie dwukrotnie zmniejszyć. Takie rozwiązanie jest o tyle sympatyczne z "demonstracyjnego" punktu widzenia , że jest przejrzyste i można posłuchać sygnału pośredniego.np. najpierw dwukrotne rozciągnięcie, a potem dwukrotne zwiększenie częstotliwości.
może faktycznie ... a na pewno tonacja będzie taka sama?
W Wikipedii jest opisany algorytm działający od razu w dziedzinie częstotliwości (sekcja Phase vocoder) prawdopodobnie efektywniejszy obliczeniowo no i sprawdzony.
Pochwal się swoim viajem to może coś razem wymyślimy ]Póki co nie wychodzi mi żadne rozwiązanie... gdzies popełniam błąd i w efekcie nie działa nic