snd_pcm_写入延迟后不工作
我试着用ALSA发出嘟嘟声。应发出2声嘟嘟声,第二声应在延迟1秒后发出。我的代码如下所示snd_pcm_写入延迟后不工作,c,linux,alsa,C,Linux,Alsa,我试着用ALSA发出嘟嘟声。应发出2声嘟嘟声,第二声应在延迟1秒后发出。我的代码如下所示 if ((err = snd_pcm_prepare (playback_handle)) < 0) { printf("cannot prepare audio interface for use \n"); return -1; } for (i = 0; i < TABLE_SIZE; i ++){ samples[i] = 100*sin(2.0*pi*f*(
if ((err = snd_pcm_prepare (playback_handle)) < 0) {
printf("cannot prepare audio interface for use \n");
return -1;
}
for (i = 0; i < TABLE_SIZE; i ++){
samples[i] = 100*sin(2.0*pi*f*(i/44100.0));
if ((err = snd_pcm_writei (playback_handle, &samples[i], 4)) != 4) {
printf("write to audio interface failed \n");
return -1;
}
}
//snd_pcm_drain(playback_handle);
printf("ending beep !!! \n");
sleep(1);
if ((err = snd_pcm_prepare (playback_handle)) < 0) {
printf("cannot prepare audio interface for use \n");
return -1;
}
for (i = 0; i < TABLE_SIZE; i ++){
samples[i] = 100*sin(2.0*pi*f*(i/44100.0));
if ((err = snd_pcm_writei (playback_handle, &samples[i], 4)) != 4) {
printf("write to audio interface failed \n");
return -1;
}
}
这里第一声嘟嘟声正常,但第二声嘟嘟声不正常。有谁能帮我解决这个问题。snd\u pcm\u write*只将样本写入缓冲区,但当所有样本都在缓冲区中时立即返回
要等待缓冲区中的所有样本播放完毕,请调用snd\u pcm\u drain。显示代码后会发生什么?显示代码片段后,我将关闭播放句柄。谢谢。问题解决了。问题在于设置hw参数。