Как изменить громкость динамика с помощью библиотеки Alsa? - PullRequest
0 голосов
/ 19 июня 2019

Я управляю громкостью динамика через библиотеку Alsa amixer в Linux.У меня проблема в том, что он не контролирует громкость в правильном масштабе между [0,100] процентами. Этот пример кода, который я получил отсюда Установите основной объем ALSA из кода C

//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 * ​​1020 *

60-> 31

70-> 41

80-> 56

90-> 75

100-> 100

Как показано выше, когда я устанавливаю громкость в диапазоне [0,100]%, я получаю приведенный объем в другом масштабе.для значения 40 он установит громкость на 15%.

Как настроить громкость в правильном масштабе в пределах [0,100] процента?

1 Ответ

0 голосов
/ 19 июня 2019

Вы видите логарифмический масштаб. Таким образом, установленный вами процент хорошо конвертируется для вас, чтобы наши уши имели линейную шкалу.

Это единственный правильный способ установки громкости, так как здесь вы можете прочитать , например, .

...