Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C代码中设置以dB为单位的ALSA主卷_C_Linux_Alsa_Mixer - Fatal编程技术网

从C代码中设置以dB为单位的ALSA主卷

从C代码中设置以dB为单位的ALSA主卷,c,linux,alsa,mixer,C,Linux,Alsa,Mixer,我似乎无法在我的机器上设置以dB为单位的音量 我正在VirtualBox中运行Ubuntu 13.04系统(用于开发) 我按照这些指示去做,一切都很好 但是当我尝试用这个函数在dB中设置它时 snd_混音器_selem_set_回放_dB_all(元素、音量、0) 或者用这个功能 snd_混音器_selem_set_playback_dB(elem,chn,volume,0) 它总是失败,错误代码为-22(参数无效) 在您提问之前:我已经尝试了一系列要设置的音量级别(从-20000到20000)

我似乎无法在我的机器上设置以dB为单位的音量

我正在VirtualBox中运行Ubuntu 13.04系统(用于开发)

我按照这些指示去做,一切都很好

但是当我尝试用这个函数在dB中设置它时

snd_混音器_selem_set_回放_dB_all(元素、音量、0)

或者用这个功能

snd_混音器_selem_set_playback_dB(elem,chn,volume,0)

它总是失败,错误代码为-22(参数无效)

在您提问之前:我已经尝试了一系列要设置的音量级别(从-20000到20000),并且还将最后一个参数更改为三个定义的值[-1,0,1]

下面是我现在测试的完整代码:

#包括
#包括
#包括
void SetAlsaMasterVolume(长卷){
长最小值,最大值;
snd_混合器_t*手柄;
snd_mixer_selem_id_t*sid;
const char*card=“默认”;
const char*selem_name=“Master”;
int x,静音状态;
龙我;
snd_混合器_打开(&handle,0);
snd_混合器_附件(手柄、卡);
snd_mixer_selem_寄存器(handle,NULL,NULL);
snd_搅拌机_负载(手柄);
snd_混合器_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(句柄,sid);
//snd_混音器_selem_get_playback_volume_range(元素、最小值和最大值);
//snd_混音器_selem_set_回放_volume_all(元素、音量*max/100);
snd_混音器_selem_get_playback_dB_range(元素、最小值和最大值);
printf(“最小值:%ld,最大值:%ld\n”,最小值,最大值);
snd_混频器_selem_channel_id_t chn;
对于(chn=0;chn<32;chn++){

对于(i=-1000;i我也遇到了类似的问题。原因似乎是来自pulseaudio的干扰。但要杀死它有点困难。一旦我跑了

mkdir -p ~/.pulse
echo autospawn=no > ~/.pulse/client.conf
killall pulseaudio
pulseaudio死掉了,我正在编写的ALSA程序能够从混音器中获取dB信息

或者,你也可以通过直接与卡片对话,绕着pulseaudio跑一圈

const char *card = "default";


看看这对你有什么帮助。

15774463显然是错误的。检查所有函数的返回值。我已经检查过了。但是snd_mixer_selem_get_playback_volume_range(最小值:0,最大值:65536)的行为正常正如我所提到的,min的值以前是1,直到我尝试设置极高的值,如200000作为音量级别。我不知道如何重置此值。重新启动无法解决此问题。我还检查了snd_mixer_selem_get_playback_dB的值,它也始终返回值15774463,无论我设置了什么音量。返回值是多少(不是输出参数的值)调用的
snd\u mixer\u selem\u get\u playback\u dB\u range
?Ou。那将是-22(EINVAL):P所以已经有问题了…但是有什么问题呢??
const char *card = "hw:0";