ALSA-snd_pcm_写入-不使用所有帧

ALSA-snd_pcm_写入-不使用所有帧,c,C,当我设置非阻塞模式时,我的播放在大约20秒后停止。我首先将一个文件完整地读到RAM中,缓冲区称为“buffer_alsa”,其中有bframes帧(这里是6894888)。在阻塞模式下播放它可以工作。以非阻塞模式播放,在1048576帧后停止。我绕了一圈,但没有变化。有什么想法吗 snd_pcm_open(&handle, carddevice, SND_PCM_STREAM_PLAYBACK,SND_PCM_NONBLOCK) //... pcm = snd_pcm_writei(ha

当我设置非阻塞模式时,我的播放在大约20秒后停止。我首先将一个文件完整地读到RAM中,缓冲区称为“buffer_alsa”,其中有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
snd_pcm_打开(&handle,carddevice,snd_pcm_STREAM_回放,snd_pcm_NONBLOCK)
//...
pcm=snd_pcm_writei(句柄、缓冲区、B帧);
如果(pcm<0)
pcm=snd_pcm_recover(句柄,pcm,0);
如果(pcm<0)
{

std::cout 1048576是一个可疑的整数(1MB)。这可能是某种缓冲区溢出或循环缓冲区问题吗?您能听到select的非阻塞套接字吗?第36页