c - 设置ALSA流插件的音量

标签 c alsa

我需要能够设置 ALSA 流的音量(来自 PCM 接口(interface)的 snd_pcm_t)

我编写ALSA流公共(public)函数:

int alsa_thread_startup(const char *pdevice, const char *cdevice, int latency,
                FILE *__error_fp,
                int verbose);

void alsa_thread_stop(void);

pdevice 是播放设备,cdevice 是捕获设备。

我发现 snd_pcm_t 和控制接口(interface)之间没有任何联系。我使用了错误的 API 吗?

amixer 控件 -c0(主板):

numid=9,iface=MIXER,name='Master Mono Playback Switch'
numid=10,iface=MIXER,name='Master Mono Playback Volume'
numid=1,iface=MIXER,name='Master Playback Switch'
numid=2,iface=MIXER,name='Master Playback Volume'
numid=24,iface=MIXER,name='PCM Playback Switch'
numid=25,iface=MIXER,name='PCM Playback Volume'
numid=38,iface=MIXER,name='Surround Jack Mode'
numid=7,iface=MIXER,name='Surround Playback Switch'
numid=8,iface=MIXER,name='Surround Playback Volume'
numid=3,iface=MIXER,name='Center Playback Switch'
numid=4,iface=MIXER,name='Center Playback Volume'
numid=5,iface=MIXER,name='LFE Playback Switch'
numid=6,iface=MIXER,name='LFE Playback Volume'
numid=18,iface=MIXER,name='Line Playback Switch'
numid=19,iface=MIXER,name='Line Playback Volume'
numid=20,iface=MIXER,name='CD Playback Switch'
numid=21,iface=MIXER,name='CD Playback Volume'
numid=17,iface=MIXER,name='Mic Boost (+20dB)'
numid=37,iface=MIXER,name='Mic Front Input Switch'
numid=30,iface=MIXER,name='Mic Select'
numid=15,iface=MIXER,name='Mic Playback Switch'
numid=16,iface=MIXER,name='Mic Playback Volume'
numid=13,iface=MIXER,name='Phone Playback Switch'
numid=14,iface=MIXER,name='Phone Playback Volume'
numid=22,iface=MIXER,name='Aux Playback Switch'
numid=23,iface=MIXER,name='Aux Playback Volume'
numid=29,iface=MIXER,name='Mono Output Select'
numid=26,iface=MIXER,name='Capture Source'
numid=27,iface=MIXER,name='Capture Switch'
numid=28,iface=MIXER,name='Capture Volume'
numid=31,iface=MIXER,name='IEC958 Playback Con Mask'
numid=32,iface=MIXER,name='IEC958 Playback Pro Mask'
numid=35,iface=MIXER,name='IEC958 Playback AC97-SPSA'
numid=33,iface=MIXER,name='IEC958 Playback Default'
numid=41,iface=MIXER,name='IEC958 Playback Source'
numid=34,iface=MIXER,name='IEC958 Playback Switch'
numid=40,iface=MIXER,name='IEC958 Capture Switch'
numid=11,iface=MIXER,name='Beep Playback Switch'
numid=12,iface=MIXER,name='Beep Playback Volume'
numid=39,iface=MIXER,name='Channel Mode'
numid=36,iface=MIXER,name='Duplicate Front'
numid=42,iface=MIXER,name='External Amplifier'
numid=43,iface=PCM,name='Playback Channel Map'

amixer 控件 -c1 (saa7134):

numid=2,iface=MIXER,name='Line Volume',index=1
numid=3,iface=MIXER,name='Line Volume',index=2
numid=5,iface=MIXER,name='Line Capture Switch',index=1
numid=6,iface=MIXER,name='Line Capture Switch',index=2
numid=1,iface=MIXER,name='Video Volume'
numid=4,iface=MIXER,name='Video Capture Switch'

最佳答案

PCM设备和控制接口(interface)之间没有直接连接。

是否存在仅影响 PCM 设备的控件取决于硬件。 如果存在,通常称为“PCM 播放音量”。按名称搜索该控件。 (请注意,在所有 AC'97 任何 HDA 编解​​码器上,此控制仅影响两个前置 channel 。)

关于c - 设置ALSA流插件的音量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404265/

相关文章:

c - 确定一个数字是否是素数而不使用循环和突变?

无法动态链接到MongoDB c驱动库

c++ - IPv6 下的网络字节顺序是否毫无意义?

c - 从结构数组中删除元素

android - 音频无法在 Virtualbox 上运行的 Android 上运行?

audio - TravisCI 没有音频设备

c - C中的高效字符串连接

c - ALSA相当于/dev/audio dump?

audio - 在 Linux 上以低延迟捕获声音

android - 在vm中启动自编译android时出错