Объем из байтового массива

Я новичок в аудиоанализе, но мне нужно выполнить (казалось бы) простую задачу. У меня есть байтовый массив, содержащий 16-битную запись (один канал) и частоту дискретизации 44100. Как мне выполнить быстрый анализ, чтобы получить громкость в любой данный момент? Мне нужно вычислить порог, поэтому функция должна возвращать значение true, если оно превышает определенную амплитуду (объем), и значение false, если нет. Я подумал, что мог бы пройтись по байтовому массиву и проверить его значение, причем 255 - самый громкий, но, похоже, это не сработает, поскольку даже когда я ничего не записываю, фоновый шум проникает, а часть массива заполняется 255. Любые предложения будут великолепны. Спасибо

3 ответа

Решение

Поскольку у вас есть 16-битные данные, вы должны ожидать, что сигнал будет варьироваться от -32768 до +32767. Для расчета объема вы можете взять интервалы, скажем, 1000 образцов, и рассчитать их среднеквадратичное значение. Суммируйте квадратные значения выборки, разделите на 1000 и возьмите квадратный корень. проверьте это число против вашего порога.

Обычно измеряют энергию волн, используя среднеквадратичное значение.

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

Но я тоже не знаю аудио, поэтому просто придумываю. ☺

Я мог бы попытаться применить скользящее окно стандартного отклонения. OTOH, я бы не предположил, что 255 = самый громкий. Возможно, но я бы хотел знать, какая кодировка используется. Если присутствует какое-либо сжатие, то я сомневаюсь, что 255 является "самым громким".

Другие вопросы по тегам