从C代码设置ALSA主音量

我一直在寻找一个简单的C代码示例来设置ALSA调音台的主音量,但找不到任何简单的操作。

我对ALSA完全不熟悉,所以做出我自己最小的例子需要时间。 如果有人能提供,我会很高兴。

Solutions Collecting From Web of "从C代码设置ALSA主音量"

以下为我工作。 参数体积在[0,100]范围内给出。 当心,没有错误处理!

void SetAlsaMasterVolume(long volume) { long min, max; 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); snd_mixer_selem_get_playback_volume_range(elem, &min, &max); snd_mixer_selem_set_playback_volume_all(elem, volume * max / 100); snd_mixer_close(handle); } 

我也尝试从ac程序中设置alsa设备的音量。 我可以设置音量,但只能以dB的百分比。 我首先得到音量的范围,得到最小值为0,最大值为67.当我尝试使用函数snd_mixer_selem_ask_playback_dB_vol获得一个非dB值时,我总是得到最小值和最大值的67。 有人有同样的问题,有没有解决方案?

  long value = 0, min_vol=0, max_vol=0; snd_mixer_selem_get_playback_volume_range(elem, &min, &max); cout << "MIN == " << min << endl; // = 0 cout << "MAX == " << max << endl; // = 76 if (snd_mixer_selem_ask_playback_dB_vol(elem, min,1, &min_vol) != 0) cout << "ERROR" << endl; cout << "min_vol == " << min_vol <<endl; // = 76 if (snd_mixer_selem_ask_playback_dB_vol(elem, max,1, &max_vol) != 0) cout << "ERROR" << endl; cout << "max_vol == " << max_vol <<endl; // = 76