一、介绍

1、mixer:用来控制多个输入、输出的音量,也控制输入(microphone,line-in,CD)之间的切换,可以将多个信号组合或者叠加在一起。声卡上的混音器由多个混音通道组成,它们可以通过声卡驱动程序提供的设备文件/dev/mixer进行编程(对混音器进行操作的软件接口),混音器主要是对声卡的输入增益和输出增益进行调节。

2、混音器的操作不符合典型的读/写操作模式,除了open和close系统调用,大部分通过ioctl系统调用来完成的。与/dev/dsp不同,/dev/mixer允许多个应用程序同时访问,并且混音器的设置值会一直保持到对应的设备文件被关闭为止。Linux上的声卡驱动程序大多都支持将混音器的ioctl操作直接应用到声音设备上,也就是说如果已经打开了/dev /dsp,那么就不用再打开/dev/mixer来对混音器进行操作,而是可以直接用打开/dev/dsp时得到的文件标识符来设置混音器。

二、Mixer编程

1、使用ioctl系统调用的控制命令由SOUND_MIXER或者MIXER开头,以下常用的几个混音器控制命令:

SOUND_MIXER_VOLUME 主音量调节

SOUND_MIXER_BASS 低音控制

SOUND_MIXER_TREBLE 高音控制

SOUND_MIXER_SYNTH FM 合成器

SOUND_MIXER_PCM 主D/A 转换器

SOUND_MIXER_SPEAKER PC 喇叭

SOUND_MIXER_LINE 音频线输入

SOUND_MIXER_MIC 麦克风输入

SOUND_MIXER_CD CD 输入

SOUND_MIXER_IMIX 放音音量

SOUND_MIXER_ALTPCM 从D/A 转换器

SOUND_MIXER_RECLEV 录音音量

SOUND_MIXER_IGAIN 输入增益

SOUND_MIXER_OGAIN 输出增益

SOUND_MIXER_LINE1 声卡的第1 输入

SOUND_MIXER_LINE2 声卡的第2 输入

SOUND_MIXER_LINE3 声卡的第3 输入

2、(1)在进行混音器编程时,可以使用 SOUND_MIXER_READ宏来读取混音通道的增益大小,如下:

int vol;

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

printf("Mic gain is at %d %%\n", vol);

对于只有一个混音通道的单声道设备来说,返回的增益大小保存在低位字节中。

(2)支持多个混音通道的双声道设备来说,返回的增益大小实际上包括两个部分,分别代表左、右两个声道的值,其中低位字节保存左声道的音量,而高位字节则保存右声道的音量。下面的代码可以从返回值中依次提取左右声道的增益大小:

int left, right;

left = vol & 0xff;

right = (vol & 0xff00) >> 8;

printf("Left gain is %d %%, Right gain is %d %%\n",left, right);

(3)设置混音通道的增益大小,则可以通过SOUND_MIXER_WRITE宏来实现,此时遵循的原则与获取增益值时的原则基本相同,设置输入增益如下:

vol = (right << 8) + left;

ioctl(fd, SOUND_MIXER_WRITE(SOUND_MIXER_MIC), &vol);

(4)声卡驱动程序提供了多个 ioctl系统调用来获得混音器的信息,返回一个整型的位掩码(bitmask)中每一位分别代表一个特定的混音通道,如果相应的位为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");

(5)其是否是一个有效的录音源,如下:

ioctl(fd, SOUND_MIXER_READ_RECMASK, &recmask);

if (recmask & SOUND_MIXER_CD)

printf("The CD input can be a recording source");

(6)目前大多数声卡提供多个录音源,通过SOUND_MIXER_READ_RECSRC可以查询出当前正在使用的录音源,同一时刻能够使用几个录音源是由声卡硬件决定的。类似地,使用SOUND_MIXER_WRITE_RECSRC可以设置声卡当前使用的录音源,例如下面的代码可以将CD输入作为声卡的录音源使用:

devmask = SOUND_MIXER_CD;

ioctl(fd, SOUND_MIXER_WRITE_DEVMASK, &devmask);

(7)所有的混音通道都有单声道和双声道的区别,如果需要知道哪些混音通道提供了对立体声的支持,可以通过SOUND_MIXER_READ_STEREODEVS来获得。

三、参考:

1、mixer.h

原文链接:

2、mixer.c

原文链接:

原文:https://www.cnblogs.com/L-102/p/11526525.html

linux 软件混音器,Linux音频编程(三)混音器介绍相关推荐

  1. 小车舵机控制linux软件,在Linux(Ubuntu)上使用串口控制ROBOTIS Dynamxiel舵机

    声明:此文档版权归属于北京小芽科技,可以转载,但要声明出处(北京小芽科技博客xiaoyatec.com) 硬件配置: 1.USB2Dynamixel串口模块 2.SMPS2Dynamixel电源模块 ...

  2. 修改linux软件下载,Linux软件下载以及修改环境变量

    一.什么是环境变量 小编的理解就是,告诉系统去哪找到你的文件.简单的例子,当你下载了一个软件Samtools,你想要运行该软件时,如果你不在该软件所在的文件夹, 你就需要在软件命令前加上软件所在的路径 ...

  3. Linux软件安装的几种常见方式介绍

    Linux上的软件安装有以下几种常见方式介绍 1. 二进制发布包 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 2. RPM包 软件已经按照redhat的包管理工具规范RPM进行打包发布, ...

  4. 初学者linux软件下载,linux爱好者入门教程

    linux爱好者入门教程就是GNU系统里面发展的最好的一个操作系统.但是Linux只是一个核心,一个高尚的操作系统核心,一个纯粹的操作系统核心.这个纯粹的高尚的操作系统核心最早是由另一个牛人Linus ...

  5. linux 软件 库,linux 软件/库 命令集合

    Linux Mint的用户自定义菜单在以下目录 ~/.local/share/applications/ 这是一个Home目录下的隐藏文件夹,按Ctrl+H即可显示出隐藏的文件(夹) 现在以Andro ...

  6. linux软件管家,Linux的conda软件管家

    conda开源包管理系统和环境管理系统 ,包括多种语言的包安装,运行,更新,删除,最重要的是可以解决包依赖问题.在做生信分析时,感觉就是一个软件管家一样的存在,在比如安装生信软件等方面上十分方便.下面 ...

  7. 手机学linux软件下载,Linux标准教科书下载

    Linux初心者のための.授业.研修.独学で使える最适な教科书 「Linux标准教科书」は.Linux初心者の方が基础からLinuxを学ぶために最适な教科书です. 本教材は.学校教材.个人教材.社员教 ...

  8. 如何写linux软件专利,Linux之父:软件专利和方法专利都挺扯淡

    Linus Torvalds认为,现在的"版权所有"机制就是犯了大工业带来的资本主义哲学体系中二分法的大错,参与其中的人非成既败,根本没有一个"中间地带"能缓冲 ...

  9. ipados远程linux软件,JingOS Linux平板系统v0.6下载发布 支持多点触摸手势

    原标题:JingOS Linux 平板系统 v0.6 下载发布:iPadOS 风格,附安装方法 1月29日消息 今年1月份,一款新的操作系统 JingOS 官网上线,官方介绍是全球首个 iPadOS ...

  10. nastran linux软件下载,linux安装nastran记录

    在另外开启的一个tty上启动lmgrd linux安装nastran记录 login as: root root@192.168.1.104's password: Last login: Wed A ...

最新文章

  1. 一周小程序学习 第1天
  2. BAT 才不关心币价,19年的5大重点在这里!
  3. linux下挂载windows上的共享目录,并设置所有者为非root用户
  4. 研究称语言能力比数学能力更重
  5. 利用socket转发和反弹端口技术突破防火墙进入内
  6. 【ZJOI2010】数字计数 数位dp
  7. MIUI 11或随小米MIX4共同发布 登场时间9月至10月间
  8. 用 Python 爬取了 14 年的福彩 3D 信息!彩民们,只能帮你们到这了
  9. anaconda python命令_怎么用anaconda命令行?
  10. 请求到达时先经过过滤器还是拦截器_上海自动卷绕式过滤器价格_康斐净化
  11. selenium 各浏览器driver下载地址
  12. 内容创作费时费力?这款AI写作神器超给力!
  13. PS照片换背景,证件照更换背景色
  14. python再议装饰器
  15. 【rust】part-7 self,crate,super、use,as
  16. Retinanet训练自己的数据(1):数据准备
  17. OpenCV之findContours获取轮廓(Python版)
  18. python基础知识集(三)
  19. 【Axure教程】中继器表格自动合计模板
  20. matplotlib 中深色颜色选取

热门文章

  1. tree view android,AndroidTreeView
  2. centos修改系统语言为英语
  3. 通过Alexa API获取Alexa排名
  4. 中国省市县联动地图,可更换成任意省,地图点击省市县下钻。可显示数据并根据数据大小标注不同颜色
  5. 调用pyecharts包生成辽宁省域地图
  6. 2023元旦假期值得关注的空投与埋伏任务
  7. python分别统计男女人数_Python+ITchart实现微信中男女比例,城市分布统计并可视化显示...
  8. 益达木糖醇广告歌曲英文版--Sitting by the side of the road
  9. SpringDataJpa的使用 – 实体类序列化
  10. PWM模式与极性谈论