Получить амплитуду в данный момент в звуковом файле? - PullRequest
2 голосов
/ 13 апреля 2009

Я работаю над проектом, в котором мне нужно знать амплитуду звука, поступающего с микрофона на компьютер.

В настоящее время я использую Python с Snack Sound Toolkit и могу записывать звук, поступающий с микрофона, но мне нужно знать, насколько громкий этот звук. Я мог бы сохранить запись в файл и использовать другой инструментарий для считывания амплитуды в заданные моменты времени из аудиофайла или попытаться получить амплитуду при поступлении звука (что может быть более подвержено ошибкам). *

Существуют ли какие-либо библиотеки или примеры кода, которые могут мне помочь с этим? Я искал, и до сих пор Snack Sound Toolkit, похоже, моя лучшая надежда, но, похоже, нет способа получить прямой доступ к амплитуде.

Ответы [ 3 ]

3 голосов
/ 13 апреля 2009

Глядя на примеры Snack Sound Toolkit, похоже, есть функция dbPowerSpectrum.

Из обращения:

dBPowerSpectrum ()

Вычисляет логарифмический спектр мощности БПФ звука (по номеру сэмпла, указанному в опции запуска) и возвращает список значений в дБ. См. Элемент раздела для описания остальных опций. При желании можно указать конечную точку, используя опцию окончания. В этом случае результатом является среднее число последовательных БПФ в указанном диапазоне. Их интервал по умолчанию взят из длины fftlength, но это можно изменить с помощью опции пропуска, которая сообщает, сколько точек перемещать в окне FFT за каждый шаг. Опции:

РЕДАКТИРОВАТЬ: я предполагаю, когда вы говорите, амплитуда, вы имеете в виду, как "громкий" звук кажется человеку, а не напряжение во временной области (которое, вероятно, будет 0 по всей длине, поскольку интеграл синусоидальных волн быть равным 0. например: 10 * sin (t) громче, чем 5 * sin (t), но их среднее значение по времени равно 0. (Вы все равно не хотите отправлять не-переменные напряжения на динамик)).

Чтобы получить громкий звук, вам нужно определить амплитуды каждого частотного компонента. Это делается с помощью преобразования Фурье (FFT), которое разбивает звук на его частотные составляющие. Функция dbPowerSpectrum, кажется, дает вам список величин (простите, если это отличается от точного определения спектра мощности) каждой частоты. Чтобы получить общую громкость, вы можете просто суммировать весь список (который будет близок, хотя он все еще может отличаться от воспринимаемой громкости, поскольку человеческое ухо имеет сам частотный отклик).

1 голос
/ 23 апреля 2009

Я полностью не согласен с этим «ответом» CookieOfFortune.

да, вопрос плохо сформулирован ... но этот ответ делает вещи намного более сложными, чем это необходимо. Я предполагаю, что под «амплитудой» вы подразумеваете воспринимаемую громкость. так как технически каждая выборка в аудиопотоке (PCM) представляет амплитуду сигнала в заданном временном интервале. чтобы получить представление громкости, попробуйте простой расчет RMS:

RMS

| K <</p>

0 голосов
/ 10 мая 2009

Я не уверен, поможет ли это, но skimpygimpy предоставляет средства для анализа файлов WAVE в python последовательности и обратно - вы могли бы потенциально использовать это изучить образцы формы волны непосредственно и сделать что ты любишь. Вам придется прочитать какой-то источник, эти подкомпоненты не задокументированы.

...