如何使用ALSA API在应用程序中在单声道和立体声之间切换声音输出?

问题描述 投票:0回答:1

可以在asoundrc配置文件中执行此操作,但是我需要一个应用程序级别的解决方案,而无需重启应用程序。到目前为止,我的应用程序的init部分已经包含了以下代码行:

snd_pcm_hw_params_set_channels (cd::output_handle, cd::output_params, (unsigned int) 2);

音频数据流来自CD驱动器,因此它始终具有2个声道(立体声)。我可以简单地将通道数实时设置为1吗?谢谢。

c++ alsa
1个回答
0
投票

仅当PCM流未运行时,才能更改硬件参数。参见:https://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html。您需要先用所需的配置填充snd_pcm_hw_params_t结构,然后用snd_pcm_hw_params()应用此配置。例如:

int err;
snd_pcm_t *handle;
snd_pcm_hw_params_t *params;
snd_pcm_hw_params_alloca(&params);

err = snd_pcm_open(&handle, "default" //, ...
//...
err = snd_pcm_hw_params_any(handle, params);
//...

if((err = snd_pcm_hw_params_set_channels(handle, params, 2)) == 0) {
    err = snd_pcm_hw_params(handle, params);
}
© www.soinside.com 2019 - 2024. All rights reserved.