Вопрос

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

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

Решение

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

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

Как правило, один измеряет энергию волн с использованием Среднеквадратный квадрат.

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

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

Я мог бы попробовать нанесение скольжения стандартного отклонения. ОТО, я бы не предположил, что 255 = самый громкий. Это может быть, но я хотел бы знать, какое кодирование используется. Если какое-либо сжатие присутствует, то я сомневаюсь, что 255 - «самый громкий».

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