Czy istnieje program, który może określić najwyższą wysokość w pliku audio?

14

Czy istnieje program Windows, który może określić „najwyższą częstotliwość fali dźwiękowej” znalezioną w pliku audio (np. Pliku mp3)?

Na przykład powinna być w stanie przeanalizować plik Dog-Whistle-0 i ustalić, że najwyższa częstotliwość znaleziona w pliku wynosi około ~ 12000 Hz.

Ponadto powinien być w stanie przeanalizować Piano.mp3 i ustalić najwyższą nutę.

Pacerier
źródło

Odpowiedzi:

13

R jest wieloplatformowy i darmowy / open source.

Załaduj i załaduj biblioteki tuneRoraz seewave(zainstaluj je z menedżera pakietów, jeśli jeszcze nie zostały zainstalowane).

library(tuneR)
library(seewave)

Następnie załaduj plik MP3 lub WAV:

w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")

Teraz wykreślmy spektrum i jego szczyty:

fpeaks(meanspec(w), nmax=1)

Wynik:

Wynik liczbowy:

fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859

Powyższe działa tylko z danymi niemuzycznymi. Kiedy analizujesz częstotliwości muzyki, zauważysz, że najwyższe częstotliwości zawsze będą wynosić około 12-20 kHz, w zależności od instrumentu (instrumentów). Jednak ta najwyższa częstotliwość nie da oszacowania granej nuty, ponieważ nuta muzyczna, grana przez instrument, będzie się składać z wielu częstotliwości.

Jest to tak zwana „barwa” instrumentu, a przekonasz się, że A przy 440 Hz przez flet będzie zawierał różne składowe częstotliwości w porównaniu do A granego na gitarze elektrycznej.

Najlepiej jest przeprowadzić dominującą analizę częstotliwości, patrząc na szczyty częstotliwości w przesuwanych oknach czasowych i sprawdzić, gdzie występuje najwyższa.

Nie ma jednak czegoś takiego jak „częstotliwość w czasie”. Można jedynie wykreślić średnią (lub częstotliwość) dominującą nad pewnymi przesuwnymi czasowych okien . Seewave oferuje całkiem sporo funkcji związanych z wybieraniem przedziałów czasu, ale komplikuje się.

Możesz użyć

s = specprop(meanspec(w, from=10, to=11)) 

aby uzyskać właściwości widma od 10 do 11 sekund, a następnie wywołać s$centroidlub s$meanuzyskać centroid lub średnie częstotliwości dla tego konkretnego okna czasowego (chociaż 1 sekunda jest dość duża dla analizy audio).

Jeśli plik Wave korzysta z próbkowania 44,1 kHz, możesz zmniejszyć jego próbkę w celu zmniejszenia wysiłku obliczeniowego, np. Do 16 kHz.

w = downsample(w, 16000)

Pamiętaj jednak, że zgodnie z twierdzeniem Nyquista maksymalna częstotliwość, którą można teraz przedstawić, wynosi 8 kHz.

Możesz także poszukać oprogramowania do wykrywania wysokości dźwięku. Jak ten , który wymaga jednak MATLAB.

slhck
źródło
Btw zamiast tego fpeaks, czy wiesz, czy istnieje funkcja, która wykreśla wykres częstotliwości w funkcji czasu?
Pacerier
Zobacz moją aktualizację. To nie jest takie trywialne. Przepraszam, ale nie pracowałem już z dźwiękiem, żeby wiedzieć, czy jest coś lepszego.
slhck
8

Czy próbowałeś Audacity ? Jest to darmowe narzędzie, które ma pewne dość zaawansowanych narzędzi analitycznych, w tym działki Spectrum polecenia dostępne z Analyse -> Plot Spectrum ... .

Zrzut ekranu

Zauważ, że otrzymujesz inne wyniki w wersji MP3 pliku niż w wersji WAV, ponieważ kompresja MP3 zmieniła przebieg i wprowadziła artefakty / aliasing.

Edycja: pliki dźwiękowe, do których linkujesz, nie są tego dobrym przykładem. Pliki o wyższej częstotliwości są próbkowane tylko z częstotliwością 44,1 KHz, która jest dostosowana do ludzkiego słuchu (maks. Około 20 KHz). Nie można przedstawić częstotliwości ultradźwięków bez zwiększenia częstotliwości próbkowania.

James P.
źródło
Hmm, wygląda na to, że nie działa z plikiem Piano.mp3 . Dla mnie pokazuje 10121 Hz (D # 9) screenhoot.me/uZZ2N0 , ale jest to bardzo mało prawdopodobne, ponieważ największy klawisz na fortepianie to C8 (4186Hz). Czy robię coś źle?
Pacerier
3
@Pacerier Nie, ale zmieniłeś nieco swoje pytanie. Próbkę gwizdka dla psa można łatwo zidentyfikować, ponieważ częstotliwość o najwyższym szczycie w widmie jest również najwyższą częstotliwością, a jednocześnie nutą dominującą. W przypadku muzyki najwyższa częstotliwość niekoniecznie jest najwyższą nutą, ponieważ nuta grana przez instrument składa się z wielu częstotliwości.
slhck
@slhck Ic, myślałem, że moglibyśmy odgadnąć notatkę, gdybyśmy mieli częstotliwość, wygląda na to, że nie jest to takie proste ..
Pacerier,
@Pacerier: Jeśli ustawisz Size na wyższą wartość, uważam, że może to dać bardziej precyzyjne wyniki i wyeliminować niektóre harmoniczne.
James P
2
@Pacerier Nie, to naprawdę nie jest tak proste. Wykrywanie skoku wymaga najpierw przekształcenia kształtu fali w widmo częstotliwości (szybka transformata Fouriera), a następnie zastosowania filtrów (głównie dolnoprzepustowych) i kolejnej rundy filtrów. Jeśli nie znajdziesz narzędzia, które śledzi wysokość dźwięku w czasie, to, czego szukasz, będzie naprawdę trudne. Możesz zajrzeć do narzędzi korekcji głosu, takich jak Melodyne .
slhck