Интенсивность звука (то есть громкость) определяется амплитудой звуковой волны. Чтобы увеличить или уменьшить амплитуду синуса, вы должны умножить его на коэффициент масштабирования. Вообще говоря:
A*sin(2*pi*f)
дает синусоидальную волну с пиковым значением (и, следовательно, амплитуда) , и частота F Гц. Это, конечно, в непрерывном мире.
При этом, чтобы контролировать интенсивность звука, вы должны умножить его на некоторую константу.
Затем вы должны посмотреть, как работает функция sound
. Из официальной документации:
Звуковая функция предполагает, что y содержит числа с плавающей запятой между -1 и 1 и значения клипов вне этого диапазона.
Это слабо означает, что если амплитуда y равна единице, звуковая карта будет излучать самый громкий звук, который он может. К сожалению, там вы столкнулись с проблемой: фактическая интенсивность звука в основном зависит от звуковой карты и громкоговорителей, подключенных к ПК ... Так что не так просто сделать общую функцию, которая выплескивает звук в децибелах ...
Если вы хотите просто играть с концепцией, и привыкают к нему, попробуйте:
Fs = 44100;
duration = 2.0;
numberOfSamples = Fs * duration;
samples = (1:numberOfSamples)/Fs;
s = sin(2 * pi * freq * samples);
s2 = 0.5*sin(2*pi*freq*samples);
sound(s, Fs);
sound(s2,Fs);
Это создаст звук с пиковым значением, что половина пикового значения первого воспроизведением. То, что не означает, что он имеет половину интенсивности, или, используя лучшие условия, мощность. Сила синусоиды не линейно связана с ее амплитудой, но это совершенно другая история.
Подводя итог: делать то, что вы хотите, вам нужно знать всю систему, участвующую в воспроизведении звука, вам нужно будет узнать какую-то физику, чтобы вычислить силу, а затем, именно тогда, можно написать код, который, умножая синусоид на некоторую вычисленную константу, воспроизводит звуковую волну с заданной интенсивностью :)
Спасибо, это действительно то, что мне нужно знать! Поэтому, чтобы добавить 'k * 10' дБ, мне нужно умножить амплитуду на' sqrt (10)^k'. – gleerman
Да, я думаю, это правильно. Например. 60 дБ - коэффициент 1000, поэтому k = 6 => sqrt (10)^6 = 3.16227766016838^6 = 1000. –