Я хочу реализовать (отключение / включение звука и увеличение / уменьшение громкости) для динамика и наушников с помощью программы c. Использование утилиты командной строки amixer, как показано в этой ссылке https://askubuntu.com/questions/371970/how-to-switch-between-headphones-and-speakers-manually-from-command-line, работает, те же вещи, которые мне нужно реализоватьс помощью программы на Си.
Поэтому я попытался разными способами.Я видел этот пример для регулировки громкости Master Установка общей громкости ALSA из кода C
и для отключения / включения Master Linux ALSA / Sound-API Вопросы - Как вы отключаете звук??
оба решения идеально подходят для конфигурации Master.Но здесь, в моем случае, я хочу реализовать ту же функциональность для динамика и наушников. Так что вместо «Мастер», если я заменил selem_name на «Динамик или Наушники + L0», который я нашел с помощью команды amixer, он выдает ошибку.
Здесь мне нужно отключить / включить звук «Динамик» или «Наушники».
Если я использую * 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);
}
Есть ли решение дляОтключение звука / включение определенного устройства (динамик и наушники)? Спасибо всем за помощь.