カーブを指定してWAVEの音量を調整する。 入力はPCM形式、ステレオ16bitのWAVEと仮定。
short left = reader.ReadInt16(); // 左チャンネル short right = reader.ReadInt16(); // 右チャンネル double volume = 0.5; // 音量(0.0〜1.0) double ratio; // 変化量(0.0〜1.0)
// f(x) = x ratio = volume; left = (short)((double)left * ratio); right = (short)((double)right * ratio);
底を10とした指数カーブ
// f(x) = (n^x - 1.0) / (n - 1.0) ただしn = 10 ratio = (Math.Pow(10.0, volume) - 1.0) / 9.0; left = (short)((double)left * ratio); right = (short)((double)right * ratio);
底を10とした対数カーブ
// f(x) = log_n(x * (n - 1.0) + 1.0) ただしn = 10 ratio = Math.Log10(volume * 9.0 + 1.0); left = (short)((double)left * ratio); right = (short)((double)right * ratio);
// f(x) = (1.0 - cos(x * π)) / 2.0 ratio = (1.0 - Math.Cos(volume * Math.PI)) * 0.5; left = (short)((double)left * ratio); right = (short)((double)right * ratio);