重复正弦声音的错误

时间:2013-07-09 06:50:59

标签: c# .net naudio

我的代码是什么:

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次迭代后,声音停止了:(。我需要做什么,我的声音一直重复?

1 个答案:

答案 0 :(得分:0)

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