C#混音同时录制采集声卡和麦克风话筒
在项目中,我们可能需要同时录制声卡的声音和麦克风的声音,比如直播间,在线教学。那么如何实现呢?当然是采用SharpCapture!下面开始演示关键代码,您也可以在文末下载全部源码:
设置授权
第一步:在引用了SharpCapture.dll之后,调用SharpCapture方法之前,一定要先通过下面代码来设置授权信息,如果是试用版,直接输入Test即可。
KeyMgr.SetKey("Test");
获取IMixer的示例
从之前的一篇博文中,我们介绍了一张图看懂SharpCapture,从那篇文章我们可以看出,SharpCapture通过IMixer进行混音,混音就是指将声卡的声音和麦克风的声音录制为一路声音,方便后续处理。那么如何获取该接口的示例,从而使用该接口提供的各个方法呢?请看下面的代码:
//麦克风采集,默认采集第一个麦克风
microphone = CaptureFactory.GetMicrophoneCapture(0);
//声卡数据采集
soundcard = CaptureFactory.GetSoundcardCapture();
//创建混音器
mixer = CaptureFactory.GetAudioMixter(microphone, soundcard, SoundcardMixMode.DoubleChannel, true);
混音器需要您传入声卡采集器和麦克风采集器,同时设置混音的方式,比如这里是左右声道都参与混音,同时输出时保留双声道.如果您不知道该如何设置,可以使用该设置即可.
绑定事件
获取到了IMixer的示例后,为其绑定事件MixedAudioDataCaptured。每当引擎采集到声音数据并混音之后,就会将数据上交给该事件的响应函数上,您就可以进行下一步的处理,比如保存为音频文件。
//注册采集到声音数据的事件,每当采集到声音数据,就通过该事件上报
mixer.AudioMixed += new SGDelegate<byte[]>(MixedAudioDataCaptured);
处理数据
可以在获取到声音字节流后进行后续处理。
/// <summary>
/// 采集到声音数据
/// </summary>
/// <param name="audioData">声音数据</param>
public void MixedAudioDataCaptured(byte[] audioData)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new SGDelegate<byte[]>(MixedAudioDataCaptured), audioData);
}
else
{
//写入wav文件中
if (mixWav != null)
{
mixWav.WriteAudioData(audioData);
}
}
}
开始采集
处理完上述步骤后,就可以开始采集了。如下:
//开始采集和混音
microphone.Start();
soundcard.Start();
停止采集
您可以通过下面的代码停止采集:
//停止采集和混音
microphone.Stop();
soundcard.Stop();
demo源码下载
C#混音同时录制采集声卡和麦克风话筒的更多相关文章
- Android音视频之MediaRecorder音视频录制
前言: 公司产品有很多地方都需要上传音频视频,今天抽空总结一下音频视频的录制.学习的主角是MediaRecorder类. MediaRecorder类介绍: MediaRecorder类是Androi ...
- Android 音视频开发(七): 音视频录制流程总结
在前面我们学习和使用了AudioRecord.AudioTrack.Camera.MediaExtractor.MediaMuxer API.MediaCodec. 学习和使用了上述的API之后,相信 ...
- AVAudioFoundation(4):音视频录制
本文转自:AVAudioFoundation(4):音视频录制 | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 采集设备的音视 ...
- FL Studio中如何制作和混音警报声
警报声在当今的许多电影配乐中,或者电子音乐的环境fx中经常出现.为了使用这种尖刺的警示声音,我们除了自己录制已有的警报声以外,也可以使用FL Studio20中的合成器和混音插件来制作属于自己的警报声 ...
- [Android] 混音线程MixerThread
MixerThread是Android音频输出的核心部分,所有Android的音频都需要经过MixerThread进行混音后再输出到音频设备. MixerThread的继承关系如下: MixerThr ...
- WebRTC 学习之 Conference 实现混音混屏
混音 混音的意义就是将多个音频流混成一路音频,在Conference 的实现中有分为终端实现和服务器实现. 1. 终端混音实现: 终端接受到多路(一般是多个用户)的音频流之后,在终端本地将多路音频流混 ...
- 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能
“ 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求.” 0 ...
- (二) ffmpeg filter学习--混音实现
Audio 混音实现 从FFMPEG原生代码doc/examples/filtering_audio.c修改而来. ffmpeg版本信息 ffmpeg version N-82997-g557c0df ...
- XAudio2学习之混音
XAudio2不仅能够进行採样率转换.还能够进行混音.所谓混音就是将多路音频混合成一路进行输出.混音主要是IXAudio2SubmixVoice进行此项功能. 数据由IXAudio2SourceVoi ...
随机推荐
- mysql pi() 获取pi
mysql> select pi(); +----------+ | pi() | +----------+ | 3.141593 | +----------+ row in set (0.00 ...
- hdoj - 1864 最大报销额
Problem Description 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品 ...
- SSM项目实战 之 Shiro
目录 Shiro 概述 shiro核心概念 核心类 整体类图 主要概念 Shiro架构 认证 什么是认证 关键对象 使用ini完成认证 认证流程 自定义realm 散列密码 授权 什么是授权 使用in ...
- 剑指offer:链表中环的入口结点
题目描述: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路分析: 这道题首先需要判断链表是否存在环,很快就能想到用快慢指针来判断. 由于快慢指针的相遇位置并不一定为链 ...
- 正则表达式在线分析 regex online analyzer
https://regexper.com/#%2F%5B0-9%5D%5Cs%5B0-9%5D%2F https://regexper.com/ http://regexone.com/lesson/ ...
- Springboot单元测试Junit深度实践
Springboot单元测试Junit深度实践 前言 单元测试的好处估计大家也都知道了,但是大家可以发现在国内IT公司中真正推行单测的很少很少,一些大厂大部分也只是在核心产品推广单测来保障质量,今天这 ...
- pg执行计划分析小笔记
开发同事问,为什么一个标量子查询,放在where子句后进行大小判断,比不放在where子句后进行判断大小运行的更快?按道理加了一次判断,不是应该变慢么? 把语句拿过来,看了一下两个语句的执行计划: 语 ...
- gmake: Nothing to be done for `all'.
安装gc_buffercache的时候报错: [root@~ pg_buffercache]# gmake gmake: Nothing to be done for `all'. 解决方法: > ...
- 廖雪峰Git教程3
转自:https://www.liaoxuefeng.com/wiki/896043488029600 [标签管理] 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签 ...
- Pycharm连接远程服务器并进行代码上传+远程调试
前提:需要有一个远程服务器,知道他的ip.port.user.password 一.连接远程服务器 进入配置页面 Pycharm菜单栏,如下图所示,依次点击 Tools -> Deploymen ...