我从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项目位于:
答案 0 :(得分:4)
你的for循环应该+ = 2,而不是+ = 1。
for (int n = 0; n < sampleCount; n += 2)