2013-07-09 86 views
0

什么是我的代码:错误与重复正弦波音

void SpeakThreadFunction() 
    { 
     while (SpeakThreadState) 
     { 
      Speaker.Play(); 
      Thread.Sleep(100); 
      Speaker.Stop() 
      Thread.Sleep(Interval); 
     } 
    } 
//Speaker is WaveOut 

而且Speaker.InitSineWaveProvider32

public class SineWaveProvider32 : WaveProvider32 
{ 
    int sample; 

    public SineWaveProvider32() 
    { 
     Frequency = 1000; 
     Amplitude = 0.25f;  
    } 

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

后我的周期10-15重复,声音停止:(。我需要做的,我的声音重复所有的时间?

回答

0

你不会有太多的成功尝试不断启动并停止这样的声卡,NAudio中默认的WaveOut缓冲区大小为100ms,打开声卡一次,然后发送正弦波部分和零部分,创建你想要的声音效果要好得多