2016-05-08 12 views
1

Я создаю некоторый звук динамически (с помощью WebAudio), начиная с базовых осцилляторов (синус/квадрат/и т. Д.) И применяя различные модуляции. Естественно, когда я меняю высоту сигналов, кажущийся громкость изменяется, причем более высокие звуки кажутся более громкими и более низкими.Как сохранить громкость динамического сигнала, который изменяется в поле?

Мой вопрос в том, есть ли стандартный способ обработки сигнала, чтобы сохранить (неопределенно) постоянный объем по мере изменения высоты тона? Конечно, я мог бы просто добавить узел усиления и закрутить его вверх и вниз каким-то специальным способом, но я предполагаю, что здесь есть стандартная вещь (которую я искал, но не могу найти).

Спасибо!

+0

Взгляните на кривые Fletcher-Munson (https://en.wikipedia.org/wiki/Fletcher%E2%80%93Munson_curves) и другие подобные результаты. Вы можете попытаться приблизиться к тому, что, по вашему мнению, будет выводиться на уровень громкости dB SPL для динамиков. В противном случае, если вы не чувствуете необходимость быть настолько научным, вы можете просто применить что-то похожее на кривую Флетчера-Мансона, чтобы получить достаточно хорошую регулировку громкости для типичных объемов прослушивания. – Linuxios

+0

@ Linuxios Спасибо, да, когда не было ответов, я обнаружил эти кривые, подгонял линию к одной и настраивал на основе результата. Я отправлю формулу, в которой я пришел, как ответ. – fenomas

ответ

2

Поскольку нет, видимо, не стандартный подход к этому, вот «решение» Я вырубил:

function getVolumeAdjustment(freq) { 
    var x = Math.log(freq) 
    var db = 3.4 * x * x - 49.3 * x + 217 
    return db - 45 
} 

db неопределенно аппроксимирует 40-PHON Equal Loudness contour, по крайней мере, как я eyeballed его с изображением на википедии. Затем я вычитаю 45, чтобы у меня была регулировка громкости (от -6 до 15 или около того), которая должна применяться к каждому заданному тону на основе его частоты.

Кажется, что в основном работает - все равно рады услышать какие-либо ответы.

+0

Важное примечание: контур равной громкости указывает относительные объемы в дБ SPL (уровень звукового давления), который является реальным мировым томом. Очевидно, что нет никакого гарантированного способа конвертировать dBFS (цифровой дБ) в реальный мир dB SPL или наоборот, но стоит помнить, что они * являются * различными единицами, которые здесь не преобразуются. – Linuxios

 Смежные вопросы

  • Нет связанных вопросов^_^