ALSA关闭PCM手柄失败

时间:2018-04-28 13:20:43

标签: audio alsa pcm

捕获音频后,我使用

snd_pcm_drain(phandle);
snd_pcm_close(phandle);

关闭PCM  但我得到了双重免费或腐败(!pre):0x01694880 ***"错误

首先,我使用以下函数初始化pcm句柄;

static snd_pcm_t *handle;
int initExtAudio()
{
    snd_pcm_hw_params_t *params;
    const char *card = "hw:0,0";

    snd_pcm_open(&handle, card, SND_PCM_STREAM_CAPTURE, 0);

    snd_pcm_hw_params_alloca(&params);

    snd_pcm_hw_params_any(handle, params);

    snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);

    snd_pcm_hw_params_set_channels(handle, params, 2);

    snd_pcm_hw_params(handle, params);
    return 0;
}

然后,我使用snd_pcm_readi(handle, buffer, frames);来读取pcm数据并保存;

最后,我使用uninit函数来关闭pcm句柄:

snd_pcm_drain(handle);
snd_pcm_close(handle);

init - >阅读 - > uninit - > init - >阅读 - > uninit,当第二次取消时,它出现错误:double free or corruption(!pre):0x01694880 ***,那么我应该如何避免这个错误呢?当声卡关闭时,我应该取下手柄,当下次打开时我应该再次启动它,对吗?

0 个答案:

没有答案