Получить амплитуду в данный момент времени в звуковом файле?

StackOverflow https://stackoverflow.com/questions/742546

Вопрос

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

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

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

Это было полезно?

Решение

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

Из ссылки:

дБМощностьСпектр ( )

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

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

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

Другие советы

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

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

среднеквадратичное значение

|К<

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top