SOUND_MIXER_RECLEV 灌音音量
SOUND_MIXER_IGAIN 输入增益
SOUND_MIXER_LINE1 声卡的第1 输入
- int register_sound_dsp(struct file_operations *fops, int dev);
SOUND_MIXER_LINE2 声卡的第2 输入
SOUND_MIXER_LINE3 声卡的第3 输入
对声卡的输入增益和输出增益进行调节是混音器的一个重要感化,今朝大年夜部分声卡采取的是8 位或者16 位的增益控制器,声卡驱动法度榜样会将它们变换成百分比的情势,也就是说无论是输入增益照样输出增益,其取值范围都是大年夜0 到100。
• SOUND_MIXER_READ
在进行混音器编程时,可以应用 SOUND_MIXER_READ 宏来攫取混音通道的增益大年夜小,例如如下代码可以获得麦克风的输入增益:
- ioctl(fd, SOUND_MIXER_READ(SOUND_MIXER_MIC), &vol);
对于只有一个混音通道的单声道设备来说,返回的增益大年夜小保存在低位字节中。而对于支撑多个混音通道的双声道设备来说,返回的增益大年夜小实际上包含两个部分,分别代表左、右两个声道的值,个中低位字节保存左声道的音量,而高位字节则保存右声道的音量。下面的代码可以大年夜返回值中依次提取阁下声道的增益大年夜小:
- int left, right;
- left = vol & 0xff;
- right = (vol & 0xff00) >> 8;
• SOUND_MIXER_WRITE
如不雅想设置混音通道的增益大年夜小,则可以经由过程SOUND_MIXER_WRITE 宏来实现,例如下面的语句可以用来设置麦克风的输入增益:
- vol = (right << 8) + left;
- ioctl(fd, SOUND_MIXER_WRITE(SOUND_MIXER_MIC), &vol);
• 萌芽Mixer信息
声卡驱动法度榜样供给了多个ioctl()体系调用来获得混音器的信息,它们平日返回一个整型的位掩码,个中每一位分别代表一个特定的混音通道,如不雅响应的位为1,则解释与之对应的混音通道是可用的。经由过程 SOUND_MIXER_READ_DEVMASK 返回的位掩码萌芽出可以或许被声卡支撑的每一个混音通道,而经由过程SOUND_MIXER_READ_RECMAS 返回的位掩码则可以萌芽出可以或许被算作灌音源的每一个通道。例如,如下代码可用来检查CD 输入是否是一个有效的混音通道:
- ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devmask);
- if (devmask & SOUND_MIXER_CD)
- printf("The CD input is supported");
如下代码可用来检查CD 输入是否是一个有效的灌音源:
大年夜多半声卡供给了多个灌音源,经由过程 SOUND_MIXER_READ_RECSRC 可以萌芽出当前正在应用的灌音源,同一时刻可应用2个或2个以上的灌音源,具体由声卡硬件本身决定。响应地,应用 SOUND_MIXER_WRITE_RECSRC可以设置声卡当前应用的灌音源,如下代码可以将CD输入作为声卡的灌音源应用:
SOUND_MIXER_OGAIN 输出增益
- devmask = SOUND_MIXER_CD;
- ioctl(fd, SOUND_MIXER_WRITE_RECSRC, &devmask);
以下代码实现了应用/dev/mixer 接口对混音器进行编程的过程,该法度榜样可对各类混音通道的增益进行调节。
[cpp] view plain copy
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/ioctl.h>
- #include <fcntl.h>
- #include <linux/soundcard.h>
- /* 用来存储所有可用混音设备的名称 */
- const char *sound_device_names[] = SOUND_DEVICE_NAMES;
- int fd; /* 混音设备所对应的文件描述符 */
推荐阅读
视野。但不知为何,法度榜样员在很多人中的印象并不是特别好,蓬头垢面、满脸油光、格子衫、小短裤似乎成了法度榜样员的代名词。 反不雅同一公司里的其它岗亭,产品、运营、>>>详细阅读
本文标题:Linux音频设备驱动架构及应用编程
地址:http://www.17bianji.com/lsqh/38578.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示