5

Visual Studio 2010 の既存のモノラル (非ステレオ) NAudio の例を次から取得しました。

http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html

以下に示すように、2チャンネルステレオオーディオに変更しました。

public abstract class WaveProvider32 : IWaveProvider 
{ 
  public WaveProvider32() : this(44100, 2) // Was 44100, 1
  {
  }
.
.
. 
}

バッファの最初のフロートに正しいサンプル値を配置し、バッファの 2 番目のフロートにゼロを配置しようとすると、右チャンネルに正弦波が発生し、左チャンネルにはオーディオがないと予想されていました。

左チャンネルと右チャンネルで、位相正弦波から同じ周波数の 10 倍低い振幅が見られます。

それはある種のシグナルブリードスルーによるものですか、それともコードがどのように機能するべきか理解していませんか?

以下は、WaveProvider32 をどのように変更したかのサンプルです。

public class SineWaveProvider32 : WaveProvider32 
{
.
.
.
public override int Read(float[] buffer, int offset, int sampleCount) 
{ 
  int sampleRate = WaveFormat.SampleRate; 
  for (int n = 0; n < sampleCount; n += 1) 
  { 
    buffer[n+offset] = (float)(Amplitude * Math.Sin((2 * Math.PI * sample * Frequency) /    sampleRate)); 

    buffer[n+offset+1] = (float)(0); 
    sample++; 

    if (sample >= sampleRate) 
    {
      sample = 0; 
    }
  } 
  return sampleCount; 
}
}

私が間違っていることについて何かアドバイスはありますか?

よろしく

注: NAudio プロジェクトは次の場所にあります。

http://naudio.codeplex.com/

4

1 に答える 1

4

for ループには += 1 ではなく += 2 が必要です。

for (int n = 0; n < sampleCount; n += 2)
于 2011-09-22T10:18:17.500 に答える