我的代码是什么:
void SpeakThreadFunction()
{
while (SpeakThreadState)
{
Speaker.Play();
Thread.Sleep(100);
Speaker.Stop()
Thread.Sleep(Interval);
}
}
//Speaker is WaveOut
而Speaker.Init
是SineWaveProvider32
。
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 :(得分:0)
尝试不断启动和停止这样的声卡,你将不会有太大的成功。 NAudio中的默认WaveOut缓冲区大小为100毫秒长。打开声卡一次,然后发送部分正弦波,然后是零,以创建你想要的声音会好得多。