Windows上的音频采集技术
在制作发布端的时候,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音,对于音频处理的技术,主要有如下几种:
- 采集麦克风输入
- 采集声卡输出
- 将音频数据送入声卡进行播放
- 对多路音频输入进行混音处理
以下有两份代码可以参考:
a.XP带回声消除功能的DirectSound音频采集
b.Vista以上带回声消除功能的Windows Core Audio
1.Windows上音频处理的API
在Windows操作系统上,常用的音频处理技术主要包括:Wave系列API函数、DirectSound、Core Audio。
其中,Core Audio只可以在Vista以上(包括Vista)的操作系统中才能使用,主要用来取代Wave系列API函数和DirectSound。
Core Audio实现的功能也比较强大,能实现对麦克风的采集、声卡输出的采集、控制声音的播放。
而Wave系列的API函数主要是用来实现对麦克风输入的采集(使用WaveIn系列API函数)和控制声音的播放(使用后WaveOut系列函数)。
DirectSound能够实现的功能估计和Wave系列API差不多,可能会更强一些(由于没有使用过DirectSound,不太肯定!)。
为了实现采集模块对操作系统的兼容性更好,基本上对麦克风输入的采集使用WaveIn系列API函数比较多;
在Windows XP系统中,没有直接提供对声卡输出进行采集的API,因此,在Windows XP要实现对声卡输出的采集会比较麻烦。 通常可选用支持混音的声卡,然后通过使用声卡的混音模块来实现采集,但并不是所有的声卡都支持混音的功能,这样的方案不具备通用性。
要实现通用性,可以采用虚拟声卡的方式来实现,从驱动层获取声卡的输出数据,但这种方案实现难度会比较大。
而在Vista以上的系统中,如Win7,则可以使用Core Audio中的API函数来实现采集声卡输出的功能。
对于混音模块的实现,目前基本是使用自定义的混音算法来完成功能,系统没有直接的API函数可供调用。
2.使用WaveIn系列API函数实现麦克风输入采集
涉及的API函数:
waveInOpen
开启音频采集设备,成功后会返回设备句柄,后续的API都需要使用该句柄
调用模块需要提供一个回调函数(waveInProc),以接收采集的音频数据
waveInClose
关闭音频采集模块
成功后,由waveInOpen返回的设备句柄将不再有效
waveInPrepareHeader
准备音频采集数据缓存的空间
waveInUnprepareHeader
清空音频采集的数据缓存
waveInAddBuffer
将准备好的音频数据缓存提供给音频采集设备
在调用该API之前需要先调用waveInPrepareHeader
waveInStart
控制音频采集设备开始对音频数据的采集
waveInStop
控制音频采集设备停止对音频数据的采集
音频采集设备采集到音频数据后,会调用在waveInOpen中设置的回调函数。
其中参数包括一个消息类型,根据其消息类型就可以进行相应的操作。
如接收到WIM_DATA消息,则说明有新的音频数据被采集到,这样就可以根据需要来对这些音频数据进行处理。
3.使用Core Audio实现对声卡输出的捕捉
涉及的接口有:
IMMDeviceEnumerator
IMMDevice
IAudioClient
IAudioCaptureClient
主要过程:
创建多媒体设备枚举器(IMMDeviceEnumerator)
通过多媒体设备枚举器获取声卡接口(IMMDevice)
通过声卡接口获取声卡客户端接口(IAudioClient)
通过声卡客户端接口(IAudioClient)可获取声卡输出的音频参数、初始化声卡、获取声卡输出缓冲区的大小、开启/停止对声卡输出的采集
通过声卡采集客户端接口(IAudioCaptureClient)可获取采集的声卡输出数据,并对内部缓冲区进行控制
4.常用的混音算法
混音算法就是将多路音频输入信号根据某种规则进行运算(多路音频信号相加后做限幅处理),得到一路混合后的音频,并以此作为输出的过程。
我目前还做过这一块,搜索了一下基本有如下几种混音算法:
将多路音频输入信号直接相加取和作为输出
将多路音频输入信号直接相加取和后,再除以混音通道数,防止溢出
将多路音频输入信号直接相加取和后,做Clip操作(将数据限定在最大值和最小值之间),如有溢出就设最大值
将多路音频输入信号直接相加取和后,做饱和处理,接近最大值时进行扭曲
将多路音频输入信号直接相加取和后,做归一化处理,全部乘个系数,使幅值归一化
将多路音频输入信号直接相加取和后,使用衰减因子限制幅值
(完)
转载于:https://www.cnblogs.com/fuland/p/3717655.html
Windows上的音频采集技术相关推荐
- Windows上的音频采集技术比对
[转]Windows上的音频采集技术 转自http://blog.csdn.net/wxl1986622/article/details/44230149 前一段时间接到一个任务,需要采集到声卡的输出 ...
- 【VS开发】Windows上的音频采集技术
前一段时间接到一个任务,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音. 之前一直没有研究过音频的相关技术,这次就顺便抽出一点时间去了解了一下Windows上采集音频的相关技术. 对于音频处 ...
- Windows平台音频采集技术介绍
音频处理的相关技术: 采集麦克风输入 采集声卡输出 将音频数据送入声卡进行播放 对多路音频输入进行混音处理 在Windows操作系统上,音频处理技术主要是采用微软提供的相关API:Wave系列API函 ...
- Windows Core Audio 音频开发技术指南
在音视频通信处理流程中,音频方面最基本的无外乎就是音频的采集和播放.windows 平台下,有很多音频采集播放的方法.作为一个 windows 端音频应用程序开发人员,经常会被各种可用的API淹没,比 ...
- 树莓派上做音频采集,采集pcm数据并直接保存pcm数据
前言 看了很长时间关于alsa音频驱动的一些中英文资料,终于把这个程序给搞出来了.这个程序实现的是在树莓派上通过usb音频采集卡进行音频采集,并直接将pcm数据保存起来,通过c语言实现. 项目地址 a ...
- android手机采集,Android手机直播之采集技术分析
近两年来直播行业越来越火,图玩智能科技为企业提供直播平台二次开发服务以及各类app的开发,欢迎随时咨询www.toivan.com. 作为Android手机直播的研发,本着技术分享的精神,现在写一系列 ...
- 实时音视频的那些事儿(二)—— 音频采集
前言 实时音频采集作为音频存储.处理的基础,无论在直播.通讯.音乐制作等领域中都扮演着重要的角色.通过选择合适的麦克风.采样率以及压缩算法等技术手段,可以达到高质量音频采集的目标.今天就详细的介绍一下 ...
- 音频采集(AudioRecorder)
https://www.jianshu.com/p/125b94af7c08 音频采集(AudioRecorder) 安仔夏天勤奋 2018.05.08 21:50* 字数 1426 阅读 2134评 ...
- Linux 下查看麦克风或音频采集设备
前言 最近需要在树莓派上做音频采集和音频处理,所以第一步得在树莓派系统下查看到当前的音频输入和音频输出设备.树莓派安装了raspberry系统,raspberry系统隶属于debian系统. 一.如何 ...
最新文章
- RPC框架——简单高效hessian的使用方式
- USB协议基础知识笔记
- java 分布式任务_一个简单的基于 Redis 的分布式任务调度器 —— Java 语言实现...
- 【力荐】Select查询语句中LIKE关键词的优化方法分析
- 3.2.1 OS之虚拟内存的基本概念(局部性原理、高速缓存、虚拟内存的实现)
- sun.misc.BASE64Decoder导入异常及处理思路
- sql server 2012中red gate的sql source control消失
- linux每日命令(2):ps命令
- MySQL select
- 佳能 2900 linux 驱动下载,在Linux下安装打印驱动,以佳能LBP2900+为例
- libreoffice word转pdf时中文乱码问题解决
- 华硕电脑光驱位换成固态硬盘
- BJ54坐标或者XA80坐标到WGS84坐标的转换(小工具附代码)
- 疯狂的长租公寓:自如、蛋壳们2020的生死决战
- 第三方物流学习(五)
- 怎么用键盘快捷键将光标定位到浏览器地址栏
- 微星 GE63 声音异常处理方法 声音忽大忽小 有杂音 爆音
- 2021年十大网络安全发展趋势预测
- Vue 插件记录(yarn安装方式)
- 2019考研——北京交通大学(计算机技术)复试经验分享
热门文章
- java配置文件中的plugin,启用ContextReplacementPlugin以忽略webpack中的配置和测试设置文件...
- java接口有非抽象方法_[Java教程]纳尼,java可以在接口中实现非抽象方法了?
- 深入解读:KubeVela 与 PaaS 有何不同?
- 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找
- Linux环境安装Mysql
- mysql galera cluster实现vip_2019年学MySQL,最佳的10本新书
- python优秀库_2017年度15个优秀的数据科学领域Python库
- python不包含某字符,查找不包含某些文本字符串的所有文本文件
- 用户表如何区分普通用户和管理员_普通用户如何辨别铝合金型材的好坏?
- 【每周CV论文】初学GAN图像风格化必须要读的文章