【发布时间】:2015-03-14 16:07:50
【问题描述】:
对于此代码:
while (1) {
generate_noise(frames, period_size);
snd_pcm_writei(dev, frames, period_size);
}
效果很好..
但是对于这个:
generate_noise(frames, period_size);
while (1) {
snd_pcm_writei(dev, frames, period_size);
}
声音坏了。每次迭代都有一个可听见的破裂声! 这会导致总是更新缓冲区。 为什么?
更新:
typedef struct {
int16_t left;
int16_t right;
} pcm_frame;
...
void
generate_noise(pcm_frame *frames, const size_t size)
{
size_t pos = 0;
while (pos < size) {
frames[pos].left = rand() % 200;
frames[pos].right = rand() % 200;
pos += 1;
}
}
【问题讨论】:
-
generate_noise 是否每次生成不同的样本? ,如果没有,snd_pcm_writei 是否有足够的延迟来确保写入完成(处理器的运行速度可能比 PCM 块快)?
-
@bare_metal 我正在更新帖子以获取更多信息。
-
在第一种情况下,您每次都会生成新样本,而在第二种情况下,您会一次又一次地使用相同的样本。
标签: c buffer alsa circular-buffer