R jest wieloplatformowy i darmowy / open source.
Załaduj i załaduj biblioteki tuneR
oraz 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$centroid
lub s$mean
uzyskać 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.
fpeaks
, czy wiesz, czy istnieje funkcja, która wykreśla wykres częstotliwości w funkcji czasu?