我想使用 c 程序为扬声器和耳机实现(静音/取消静音和音量增大/减小)。使用 amixer 命令行实用程序,如此链接所示https://askubuntu.com/questions/371970/how-to-switch-在耳机和扬声器之间手动从命令行它可以工作,我需要使用 C 程序实现相同的东西。
所以我尝试了不同的方法。我看到了这个例子,用于 从 C 代码控制 Master Set ALSA 主音量的音量
对于 Master Linux ALSA/Sound-API 问题的静音/取消静音 - 你如何静音?
这两种解决方案都非常适合主配置。但在我的情况下,我想为扬声器和耳机实现相同的功能。因此,如果我用扬声器或耳机 + L0 替换selem_name而不是“主” ,我发现使用 amixer 命令会引发错误。
在这里,我需要将“扬声器”或“耳机”静音/取消静音。
如果我在下面的代码中使用 *selem_name = "Speaker" 或 "Headphone",则会引发如下所示的错误:
是不是给定的 selem_name 无效?如果是这样,我如何列出扬声器和耳机的有效 selem_name?我使用它从 amixer 命令行实用程序中找到的那个。
我必须为扬声器和耳机使用什么 API?
Errorr eturn by test.c program:
alsa: simple.c:346: snd_mixer_selem_has_playback_switch: Assertion
`elem' failed.
Aborted
//test.c
#include<stdio.h>
#include<alsa/asoundlib.h>
void SetAlsaSpeakerMute()
{
snd_mixer_t *handle;
snd_mixer_selem_id_t *sid;
const char *card = "default";
const char *selem_name = "Speaker";
snd_mixer_open(&handle, 0);
snd_mixer_attach(handle, card);
snd_mixer_selem_register(handle, NULL, NULL);
snd_mixer_load(handle);
snd_mixer_selem_id_alloca(&sid);
snd_mixer_selem_id_set_index(sid, 0);
snd_mixer_selem_id_set_name(sid, selem_name);
snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid);
if (snd_mixer_selem_has_playback_switch(elem)) {
snd_mixer_selem_set_playback_switch_all(elem, 0);
}
snd_mixer_close(handle);
}
int main()
{
SetAlsaSpeakerMute();
return 0;
}
//For const char *selem_name = "Master" this program works fine.
//This can mute Mixer of default sound card
void SetAlsaMasterMute()
{
snd_mixer_t *handle;
snd_mixer_selem_id_t *sid;
const char *card = "default";
const char *selem_name = "Master";
snd_mixer_open(&handle, 0);
snd_mixer_attach(handle, card);
snd_mixer_selem_register(handle, NULL, NULL);
snd_mixer_load(handle);
snd_mixer_selem_id_alloca(&sid);
snd_mixer_selem_id_set_index(sid, 0);
snd_mixer_selem_id_set_name(sid, selem_name);
snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid);
if (snd_mixer_selem_has_playback_switch(elem)) {
snd_mixer_selem_set_playback_switch_all(elem, 0);
}
snd_mixer_close(handle);
}
是否有任何解决方案可以将特定设备(扬声器和耳机)静音/取消静音?感谢所有帮助。