linux 软件混音器,Linux音频编程(三)混音器介绍
一、介绍
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音频编程(三)混音器介绍相关推荐
- 小车舵机控制linux软件,在Linux(Ubuntu)上使用串口控制ROBOTIS Dynamxiel舵机
声明:此文档版权归属于北京小芽科技,可以转载,但要声明出处(北京小芽科技博客xiaoyatec.com) 硬件配置: 1.USB2Dynamixel串口模块 2.SMPS2Dynamixel电源模块 ...
- 修改linux软件下载,Linux软件下载以及修改环境变量
一.什么是环境变量 小编的理解就是,告诉系统去哪找到你的文件.简单的例子,当你下载了一个软件Samtools,你想要运行该软件时,如果你不在该软件所在的文件夹, 你就需要在软件命令前加上软件所在的路径 ...
- Linux软件安装的几种常见方式介绍
Linux上的软件安装有以下几种常见方式介绍 1. 二进制发布包 软件已经针对具体平台编译打包发布,只要解压,修改配置即可 2. RPM包 软件已经按照redhat的包管理工具规范RPM进行打包发布, ...
- 初学者linux软件下载,linux爱好者入门教程
linux爱好者入门教程就是GNU系统里面发展的最好的一个操作系统.但是Linux只是一个核心,一个高尚的操作系统核心,一个纯粹的操作系统核心.这个纯粹的高尚的操作系统核心最早是由另一个牛人Linus ...
- linux 软件 库,linux 软件/库 命令集合
Linux Mint的用户自定义菜单在以下目录 ~/.local/share/applications/ 这是一个Home目录下的隐藏文件夹,按Ctrl+H即可显示出隐藏的文件(夹) 现在以Andro ...
- linux软件管家,Linux的conda软件管家
conda开源包管理系统和环境管理系统 ,包括多种语言的包安装,运行,更新,删除,最重要的是可以解决包依赖问题.在做生信分析时,感觉就是一个软件管家一样的存在,在比如安装生信软件等方面上十分方便.下面 ...
- 手机学linux软件下载,Linux标准教科书下载
Linux初心者のための.授业.研修.独学で使える最适な教科书 「Linux标准教科书」は.Linux初心者の方が基础からLinuxを学ぶために最适な教科书です. 本教材は.学校教材.个人教材.社员教 ...
- 如何写linux软件专利,Linux之父:软件专利和方法专利都挺扯淡
Linus Torvalds认为,现在的"版权所有"机制就是犯了大工业带来的资本主义哲学体系中二分法的大错,参与其中的人非成既败,根本没有一个"中间地带"能缓冲 ...
- ipados远程linux软件,JingOS Linux平板系统v0.6下载发布 支持多点触摸手势
原标题:JingOS Linux 平板系统 v0.6 下载发布:iPadOS 风格,附安装方法 1月29日消息 今年1月份,一款新的操作系统 JingOS 官网上线,官方介绍是全球首个 iPadOS ...
- nastran linux软件下载,linux安装nastran记录
在另外开启的一个tty上启动lmgrd linux安装nastran记录 login as: root root@192.168.1.104's password: Last login: Wed A ...
最新文章
- 一周小程序学习 第1天
- BAT 才不关心币价,19年的5大重点在这里!
- linux下挂载windows上的共享目录,并设置所有者为非root用户
- 研究称语言能力比数学能力更重
- 利用socket转发和反弹端口技术突破防火墙进入内
- 【ZJOI2010】数字计数 数位dp
- MIUI 11或随小米MIX4共同发布 登场时间9月至10月间
- 用 Python 爬取了 14 年的福彩 3D 信息!彩民们,只能帮你们到这了
- anaconda python命令_怎么用anaconda命令行?
- 请求到达时先经过过滤器还是拦截器_上海自动卷绕式过滤器价格_康斐净化
- selenium 各浏览器driver下载地址
- 内容创作费时费力?这款AI写作神器超给力!
- PS照片换背景,证件照更换背景色
- python再议装饰器
- 【rust】part-7 self,crate,super、use,as
- Retinanet训练自己的数据(1):数据准备
- OpenCV之findContours获取轮廓(Python版)
- python基础知识集(三)
- 【Axure教程】中继器表格自动合计模板
- matplotlib 中深色颜色选取
热门文章
- tree view android,AndroidTreeView
- centos修改系统语言为英语
- 通过Alexa API获取Alexa排名
- 中国省市县联动地图,可更换成任意省,地图点击省市县下钻。可显示数据并根据数据大小标注不同颜色
- 调用pyecharts包生成辽宁省域地图
- 2023元旦假期值得关注的空投与埋伏任务
- python分别统计男女人数_Python+ITchart实现微信中男女比例,城市分布统计并可视化显示...
- 益达木糖醇广告歌曲英文版--Sitting by the side of the road
- SpringDataJpa的使用 – 实体类序列化
- PWM模式与极性谈论