2

そのため、NAudioを使用してC#でシンセサイザーを最初からコーディングしています。私はそれが異なる周波数を演奏するようになりました、それはクールです、しかし私は高いピッチが低いピッチよりかなり大きいことに気づきます。これはこの効果によるものですか?

http://en.wikipedia.org/wiki/Equal-loudness_contour

または、正弦波を生成しているときに何か間違ったことをしていますか?本当に必要な場合、等ラウドネス曲線をどのように実装しますか?

ありがとう

私のコード:

NAudioは、波形を表すために-1から+1の範囲の浮動小数点値で満たされたバッファを想定しています。

正弦波の生成:

buffer[n + offset] = (float)(Amplitude * Math.Sin(angle));
angle = (angle + angleIncrement) % (2 * Math.PI);

頻度の設定:

public double Frequency
{
    set
    {
        angleIncrement = 2 * Math.PI * value / sampleRate;
    }
    get
    {
        return angleIncrement * sampleRate / 2 / Math.PI;
    }
}
4

1 に答える 1

1

等ラウドネス曲線に基づいてシンセサイザーからのオーディオの振幅を制御することは、おそらくあなたが望むものではありません。

In theory, you would need to know the absolute level (SPL) produced by the speakers in order to choose the appropriate contour. In practice, a bigger issue would be when you extend your synthesizer to use complex waveforms instead of merely pure tones, possibly processed by filters etc. The equal-loudness contours are based on pure tones, and when you generate complex signals (i.e. containing many frequencies) you would instead need a loudness model to estimate the loudness of your synthesized sound.

于 2013-03-19T12:46:35.600 に答える