ALSA - snd_pcm_writei - 不使用所有帧

时间:2017-06-23 14:18:42

标签: c

当我设置非阻塞模式时,我的播放在大约20秒后停止。我首先读取一个完成RAM的文件,缓冲区被称为" buffer_alsa&#34 ;,其中有bframes帧(这里是6894888)。在阻止模式下播放它的工作原理。使用非阻塞模式,它在1048576帧后停止。我循环了,但没有变化。有什么想法吗?

snd_pcm_open(&handle, carddevice, SND_PCM_STREAM_PLAYBACK,SND_PCM_NONBLOCK)
//...
pcm = snd_pcm_writei(handle, buffer_alsa, bframes);
if (pcm < 0)
pcm = snd_pcm_recover(handle, pcm, 0);
if (pcm < 0)
{
std::cout << "              snd_pcm_writei failed:  " <<   snd_strerror(pcm) << std::endl;
return;
}
if (pcm > 0 && pcm < bframes)
{
std::cout << "                   expected / wrote:  " << bframes << " / " << pcm << std::endl;
//return;
}


output:
expected / wrote:  6894888 / 1048576

0 个答案:

没有答案