2013-03-15 113 views
-1

使用例如在博客上我已經輸出的正弦波:n音訊正弦波

public class SineWaveProvider32 : WaveProvider32{ 

    int sample; 

    public SineWaveProvider32() 
    { 
     Frequency = 1000; 
     Amplitude = 0.25f; // let's not hurt our ears    
    } 

    public float Frequency { get; set; } 
    public float Amplitude { get; set; } 

    public override int Read(float[] buffer, int offset, int sampleCount) 
    { 
     int sampleRate = WaveFormat.SampleRate; 
     for (int n = 0; n < sampleCount; n++) 
     { 
      buffer[n+offset] = (float)(Amplitude * Math.Sin((2 * Math.PI * sample * Frequency)/sampleRate)); 
      sample++; 
      if (sample >= sampleRate) sample = 0; 
     } 
     return sampleCount; 
    } 
} 

當我玩這個正弦波的無限循環。想知道如何輸出給定長度的聲音?

+0

請勿以這種方式刪除內容。 – 2013-04-30 08:10:24

回答

2

只要Read不返回0,正弦波將繼續播放。Read返回寫入緩衝區的樣本數(只要尚未完成,應始終與sampleCount相同)。因此,請保持總共有多少樣品已返回。一旦這個數字等於採樣率,你已經播放了一秒的音頻。