R є кросплатформою та вільним / відкритим кодом.
Завантажте його і завантажте tuneRі seewaveбібліотеки (встановити їх з допомогою менеджера пакетів , якщо ще не встановлений).
library(tuneR)
library(seewave)
Потім завантажте файл MP3 або WAV:
w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")
Тепер давайте побудуємо спектр та його вершини:
fpeaks(meanspec(w), nmax=1)
Результат:

Числовий результат:
fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859
Сказане працює лише з немузичними даними. Проаналізувавши частоти музики, ви побачите, що найвищі частоти завжди будуть приблизно 12-20 кГц, залежно від інструментів, що використовуються. Однак ця найвища частота не дасть вам оцінку ноті, яка відтворюється, оскільки музична нота, коли грається на інструменті, буде складатися з декількох частот.
Це так званий «тембр» інструменту, і ви побачите, що A на 440 Гц на флейті буде включати різні частотні компоненти порівняно з A, що грає на електрогітарі.
Найкраще робити аналіз домінуючого частотного аналізу, дивлячись на піки частоти на розсувних вікнах часу та перевіряти, де відбувається найвищий.
Хоча немає такого поняття, як "частота з часом". Ви можете побудувати графік середньої (або домінуючої) частоти протягом певних вікон, що ковзають . Seewave пропонує досить багато функцій щодо вибору вікон часу, але це стає досить складним.
Ви можете використовувати
s = specprop(meanspec(w, from=10, to=11))
щоб отримати властивості спектру від 10 до 11 секунд, а потім зателефонувати s$centroidабо s$meanотримати центральну або середню частоти конкретного часового вікна (хоча 1 секунда досить велика для аудіо аналізу).
Якщо у вашому файлі Wave використовується дискретизація 44,1 кГц, ви можете зменшити вибірку, щоб зменшити зусилля для обчислення, наприклад, до 16 кГц.
w = downsample(w, 16000)
Але пам’ятайте, що згідно з теоремою Найкіста максимальна частота, яку зараз можна представити, становить 8 кГц.
Ви також можете шукати програмне забезпечення для визначення висоти. Як і цей , для якого потрібен MATLAB.
fpeaks, чи знаєте ви, чи є функція, яка графіку частоти графіку залежить від часу?