作家
登录

Linux音频设备驱动架构及应用编程

作者: 来源: 2017-11-08 09:18:19 阅读 我要评论

SOUND_MIXER_RECLEV 灌音音量

SOUND_MIXER_IGAIN 输入增益

SOUND_MIXER_LINE1 声卡的第1 输入

  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 宏来攫取混音通道的增益大年夜小,例如如下代码可以获得麦克风的输入增益:

  1. ioctl(fd, SOUND_MIXER_READ(SOUND_MIXER_MIC), &vol); 

对于只有一个混音通道的单声道设备来说,返回的增益大年夜小保存在低位字节中。而对于支撑多个混音通道的双声道设备来说,返回的增益大年夜小实际上包含两个部分,分别代表左、右两个声道的值,个中低位字节保存左声道的音量,而高位字节则保存右声道的音量。下面的代码可以大年夜返回值中依次提取阁下声道的增益大年夜小:

  1. int leftright
  2.  
  3. left = vol & 0xff; 
  4.  
  5. right = (vol & 0xff00) >> 8;  

• SOUND_MIXER_WRITE


如不雅想设置混音通道的增益大年夜小,则可以经由过程SOUND_MIXER_WRITE 宏来实现,例如下面的语句可以用来设置麦克风的输入增益:

  1. vol = (right << 8) + left
  2.  
  3. ioctl(fd, SOUND_MIXER_WRITE(SOUND_MIXER_MIC), &vol);  

• 萌芽Mixer信息

声卡驱动法度榜样供给了多个ioctl()体系调用来获得混音器的信息,它们平日返回一个整型的位掩码,个中每一位分别代表一个特定的混音通道,如不雅响应的位为1,则解释与之对应的混音通道是可用的。经由过程 SOUND_MIXER_READ_DEVMASK 返回的位掩码萌芽出可以或许被声卡支撑的每一个混音通道,而经由过程SOUND_MIXER_READ_RECMAS 返回的位掩码则可以萌芽出可以或许被算作灌音源的每一个通道。例如,如下代码可用来检查CD 输入是否是一个有效的混音通道:

  1. ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devmask); 
  2.  
  3. if (devmask & SOUND_MIXER_CD) 
  4.  
  5. printf("The CD input is supported");  

如下代码可用来检查CD 输入是否是一个有效的灌音源:

大年夜多半声卡供给了多个灌音源,经由过程 SOUND_MIXER_READ_RECSRC 可以萌芽出当前正在应用的灌音源,同一时刻可应用2个或2个以上的灌音源,具体由声卡硬件本身决定。响应地,应用 SOUND_MIXER_WRITE_RECSRC可以设置声卡当前应用的灌音源,如下代码可以将CD输入作为声卡的灌音源应用:

SOUND_MIXER_OGAIN 输出增益

  1. devmask = SOUND_MIXER_CD; 
  2.  
  3. ioctl(fd, SOUND_MIXER_WRITE_RECSRC, &devmask);  

以下代码实现了应用/dev/mixer 接口对混音器进行编程的过程,该法度榜样可对各类混音通道的增益进行调节。

[cpp] view plain copy

  1. #include <unistd.h>   
  2. #include <stdlib.h>   
  3. #include <stdio.h>   
  4. #include <sys/ioctl.h>   
  5. #include <fcntl.h>   
  6. #include <linux/soundcard.h>   
  7.    
  8. /* 用来存储所有可用混音设备的名称 */   
  9. const char *sound_device_names[] = SOUND_DEVICE_NAMES;   
  10. int fd; /* 混音设备所对应的文件描述符 */   

      推荐阅读

      程序员的未来在哪里?扎心了

    视野。但不知为何,法度榜样员在很多人中的印象并不是特别好,蓬头垢面、满脸油光、格子衫、小短裤似乎成了法度榜样员的代名词。 反不雅同一公司里的其它岗亭,产品、运营、>>>详细阅读


    本文标题:Linux音频设备驱动架构及应用编程

    地址:http://www.17bianji.com/lsqh/38578.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)