如何使用 ALSA API 在应用程序中切换单声道和立体声输出?
How can I switch my sound output between mono and stereo in an app using the ALSA API?
可以在 asoundrc
配置文件中执行此操作,但我需要一个无需重新启动应用程序的应用程序级解决方案。到目前为止,我的应用程序的初始化部分有这行代码:
snd_pcm_hw_params_set_channels (cd::output_handle, cd::output_params, (unsigned int) 2);
音频数据流来自 CD 驱动器,因此它始终具有 2 个声道(立体声)。我可以简单地将通道数即时设置为 1 吗?谢谢。
只有当 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(¶ms);
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);
}
可以在 asoundrc
配置文件中执行此操作,但我需要一个无需重新启动应用程序的应用程序级解决方案。到目前为止,我的应用程序的初始化部分有这行代码:
snd_pcm_hw_params_set_channels (cd::output_handle, cd::output_params, (unsigned int) 2);
音频数据流来自 CD 驱动器,因此它始终具有 2 个声道(立体声)。我可以简单地将通道数即时设置为 1 吗?谢谢。
只有当 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(¶ms);
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);
}