13

Существует ли программа для Windows, которая может определить "наибольшую частоту звуковой волны", найденную в аудиофайле (например, в mp3-файле)?

Например, он должен иметь возможность проанализировать файл Dog-Whistle-0 и определить, что самая высокая частота, найденная в файле, составляет примерно ~ 12000 Гц.

Также он должен уметь анализировать Piano.mp3 и определять самую высокую ноту.

2 ответа2

13

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, хотя.

8

Вы пробовали Audacity? Это бесплатный инструмент, который имеет несколько довольно сложных инструментов анализа, включая команду Plot Spectrum, доступную из Analyze -> Plot Spectrum ....

Скриншот

Обратите внимание, что с версией файла MP3 получаются разные результаты по сравнению с версией WAV, поскольку сжатие MP3 изменило форму волны и привело к появлению артефактов / псевдонимов.

Изменить: те звуковые файлы, на которые вы ссылаетесь, не являются хорошими примерами для этого. Файлы с более высокой частотой сэмплируются только на частоте 44,1 кГц, которая приспособлена для человеческого слуха (максимум около 20 кГц). Вы не можете представлять ультразвуковые частоты без увеличения частоты дискретизации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .