2011-09-21 23 views
3

我把现有的单(非立体声)n音讯例如为Visual Studio 2010的:n音讯 - 如何正弦波只发送给一个音频通道上的插孔

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; 
} 
} 

什么,我做错了什么建议?

问候

注:n音讯项目位于:

http://naudio.codeplex.com/

回答

3

您的循环应该有+ = 2,而不是+ = 1

for (int n = 0; n < sampleCount; n += 2)