5

我从以下位置获取了 Visual Studio 2010 的现有单声道(非立体声)NAudio 示例:

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

并将其更改为具有两个声道立体声音频,如下所示:

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

当我尝试在缓冲区中的第一个浮点数中放置正确的样本值并在缓冲区中的第二个浮点数中放置一个零时,我期望在右声道上得到一个正弦波,而在左边没有音频。

我看到左声道与右声道的相位正弦波频率相同,幅度低 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

Your for loop should have += 2, not += 1.

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