snd_pcm_写入延迟后不工作

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*(

我试着用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*(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参数。