我在 Linux 上使用 Alsa amixer 库控制扬声器的音量。我遇到的问题是它没有在 [0,100] 百分比之间以适当的比例控制音量。我从这里得到的这个示例代码 从 C 代码中设置 ALSA 主音量
//volume.c
#include<stdio.h>
#include<alsa/asoundlib.h>
int main(int argc, char *argv[])
{
long volume=atoi(argv[1]);
long min, max;
snd_mixer_t *handle;
snd_mixer_selem_id_t *sid;
const char *card = "hw:0";
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);
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);
}
//compiling source code
gcc volume.c -o volume -lasound
//set volume of speaker 90%
./volume 90
上面的程序没有以我作为参数传递的适当百分比设置音量。
给体积程序的百分比 -> 实际设定体积
0->0
10->2
20->6
30->10
40->15
50->22
60->31
70->41
80->56
90->75
100->100
如上所示,当我在 [0,100]% 范围内设置音量时,我得到不同比例的结果音量。例如。对于值 40,它将音量设置为 15%。
如何在 [0,100] 百分比之间以适当的比例设置音量?