2013-03-15 112 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相同)。因此,请保持总共有多少样品已返回。一旦这个数字等于采样率,你已经播放了一秒的音频。