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 кГц, в зависимости от используемого инструмента (ов). Однако эта самая высокая частота не даст вам оценку проигрываемой ноты, так как музыкальная нота, когда ее исполняет инструмент, будет состоять из нескольких частот.
Это так называемый «тембр» инструмента, и вы обнаружите, что А при 440 Гц для флейты будет включать в себя различные частотные компоненты по сравнению с А, играемым на электрогитаре.
Лучше всего провести анализ доминирующей частоты, посмотрев на пики частоты в скользящих временных окнах, и проверить, где находится самый высокий из них.
Там нет такой вещи, как «частота со временем», хотя. Вы можете построить только среднюю (или доминирующую) частоту за определенные скользящие временные окна . 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
, знаете ли вы, есть ли функция, которая отображает график частоты в зависимости от времени?