2016-08-18 4 views
1

Я играл звук с веб-аудио API и использовал gainNode для изменения громкости. Когда я изменил значение gainNode, индикатор Decibel показал, что число не ожидается.Как откалибровать dbfs до db spl?

context.createGain(); 
var source=context.createOscillator(); 
source.frequency.value=1000; 
source.start(); 
source.connect(gainNode); 
gainNode.connect(context.destination); 

gainNode.gain.value=Math.pow(10, dbfs/20)); 

when dbfs=0,the Decibel meter showed 90 dbspl; 
when dbfs=-10,the Decibel meter showed 84 dbspl; 
when dbfs=-20,the Decibel meter showed 78 dbspl; 
when dbfs=-30,the Decibel meter showed 72 dbspl; 
when dbfs=-40,the Decibel meter showed 62 dbspl; 
when dbfs=-50,the Decibel meter showed 52 dbspl; 

Фактический объем не изменился, как ожидалось, была ли какая-либо ошибка в генерации значения gainNode? Я хочу воспроизвести звук в формате 80 дБ или другие конкретные числа, каково значение dbfs и как сделать значение gainNode?

ответ

0

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

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

Другая проблема может быть связана с неточностями вашего счетчика SPL или нелинейности вашей акустической системы. Например, ваш калибр SPL откалиброван?

Я бы очень рекомендовал прочитать this article об измерениях SPL.

В целом, звук в цифровом и электрическом доменах (то есть на вашем компьютере и внутри ЦАП и усилителя) намного более линейный и без искажений, чем в акустическом домене (то есть, в комнате, динамиках и микрофон), поэтому я сначала буду искать проблемы с ними, а не с программным обеспечением. Вы можете попробовать использовать REW в качестве справочного материала, а также как инструмент для проверки вашей системы звука/микрофона.

+0

Большое спасибо за ваш ответ. Причина использования синусоиды - это мой реальный спрос, мне нужно играть звук разной частоты, чтобы проверить уровень слуха. В этом случае я использовал приложение, запущенное на iphone6 ​​в качестве счетчика db, и использовал thinkpad x201 в качестве динамика. iphone6 ​​находится на расстоянии 10 см от динамика. Значение db было очень устойчивым во время воспроизведения звука. за исключением всех inpact, если мой код работает в идеальных условиях, уменьшит ли dbspl 1db, когда dbfs уменьшит 1db? – user6731513

+0

Я бы предложил начать с розового шума в любом случае, чтобы узнать, помогает ли это. Если это так, то это действительно касается отражений, которые у вас есть. Кстати, если вы говорите, что микрофон находится всего на расстоянии 10 см - они на поверхности стола или что-то в этом роде? Это даст много отражений. Попытайтесь хотя бы поместить устройства на подставки, чтобы убедиться, что нет отражающих поверхностей, достаточно близких к звуковому пути. –

+0

Большое вам спасибо, ваши баллы в порядке, моя среда недостаточно хороша, чтобы сделать тест – user6731513

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