Чи існує програма, яка може визначити найвищий крок у звуковому файлі?


14

Чи існує програма Windows, яка може визначити "найвищу частоту звукової хвилі", яка знаходиться в аудіофайлі (наприклад, mp3-файл)?

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

Крім того, він повинен мати можливість аналізувати Piano.mp3 та визначати найвищу ноту.

Відповіді:


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 кГц, залежно від інструментів, що використовуються. Однак ця найвища частота не дасть вам оцінку ноті, яка відтворюється, оскільки музична нота, коли грається на інструменті, буде складатися з декількох частот.

Це так званий «тембр» інструменту, і ви побачите, що 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.


Btw замість того fpeaks, чи знаєте ви, чи є функція, яка графіку частоти графіку залежить від часу?
Pacerier

Дивіться моє оновлення. Це не так банально. Я не працював з аудіо так багато, щоб знати, чи є щось краще, хоча, вибачте.
slhck

8

Ви пробували Audacity ? Це безкоштовний інструмент , який має деякі досить складні інструменти аналізу, в тому числі спектра Plot команди доступні з Analyze -> Ділянка спектру ... .

Знімок екрана

Зауважте, що ви отримуєте різні результати з версією MP3 у порівнянні з версією WAV, тому що стиснення MP3 змінило форму хвилі та ввело артефакти / псевдонім.

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


Гм, схоже, це не працює з файлом Piano.mp3 . Для мене він показує 10121 Гц (D # 9) screenshoot.me/uZZ2N0 , але це вкрай малоймовірно, оскільки найбільша клавіша на піаніно - це C8 (4186 ГГц). Я щось неправильно роблю?
Pacerier

3
@Pacerier Ні, але ви трохи змінили своє запитання. Зразок свисту собаки легко визначити, оскільки частота з найвищим піком у спектрі - це також найвища частота і водночас домінуюча нота. Для музики найвища частота - це не обов'язково найвища нота, оскільки музична нота, яку відтворює інструмент, складається з декількох частот.
slhck

@slhck Ic, я б подумав, що ми можемо здогадатися про ноту, якби у нас була частота, схоже, що це не так просто ..
Pacerier

@Pacerier: Якщо ви встановите для розміру більше значення, я вважаю, що це може дати більш точні результати та усунути деякі гармоніки.
Джеймс П

2
@Pacerier Ні, це насправді не так просто. Визначення пітч вимагає, щоб ви перетворили форму хвилі спочатку в спектр частот (Швидка трансформація Фур'є), потім застосували фільтри (в основному низькопрохідні) і ще один раунд фільтрів. Якщо ви не знайдете інструмент, який відстежує крок з часом, те, що ви шукаєте, дійсно буде важким. Ви можете заглянути в інструменти для корекції голосу, як Melodyne .
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.