2011-09-21 65 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)