音の強さ(つまり、音の大きさ)は、音波の振幅によって決まります。サインの振幅を増減するには、サインにスケール係数を掛ける必要があります。一般的に言えば:
A*sin(2*pi*f)
ピーク値(したがって振幅)がA、周波数がfHzの正弦波を生成します。もちろん、それは継続的な世界です。
とはいえ、音の強さを制御するには、一定の値を掛ける必要があります。
次に、関数がどのようにsound
機能するかを確認する必要があります。公式ドキュメントから:
サウンド関数は、yに-1から1までの浮動小数点数が含まれていることを前提とし、その範囲外の値をクリップします。
これは大まかに次のように解釈されます。振幅yが1に等しい場合、サウンドカードは可能な限り大きな音を発します。おっと、問題が発生しました。実際の音の強さは、主にサウンドカードとPCに接続されているスピーカーに依存します...したがって、デシベル単位で音を吐き出す一般的な機能を作成するのはそれほど簡単ではありません...
コンセプトを試して、それに慣れたい場合は、次のことを試してください。
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);
これにより、最初に再生されたもののピーク値の半分のピーク値を持つサウンドが作成されます。それは、それが半分の強度、またはより良い用語を使用すると、パワーを持っていることを意味するものではありません。正弦波のパワーはその振幅と直線的には関係ありませんが、それはまったく別の話です。
要するに、あなたがやりたいことをするためには、音の再生に関係するシステム全体を知る必要があり、パワーを計算するためのいくつかの物理学を知る必要があります。正弦波に計算された定数を掛けて、指定された強度の音波を再生するコードを記述します:)