7,656
社区成员
我这两天做了一个winform程序,主要是解决拉跨的windows录音问题,大家都知道windows录音机很难用,只能录mic的声音,如果要同时录声卡的声音,需要各种设置,我做的这个录音程序可以同时录两组声音:mic和声卡,停止录音后自动合并两条声轨,形成完整的录音文件,用于卡拉OK、通话录音是极好的。
用了Naudio和FFmpeg,整体实现有不少坑,但问题都不大。
贴一段核心代码,供后来的朋友避坑。
第一个坑:Naudio可以录mic和声卡,但不能同时录音,于是我就new了两个对象,一个录mic一个录声卡,结果也会得到两个音轨文件。
WaveIn() 这个是录Mic的,WasapiLoopbackCapture()这个是录声卡的。
第二个坑:Naudio合并两个音轨文件时要求这两个文件码率必须一致,否则无法合并;
第三个坑:回头重新设置录制音轨的码率,这时候一个巨坑来了,Mic的音轨可以设置码率,例如——
waveIn.WaveFormat = new WaveFormat(25600, 16, 1); //设置采样频率
但是到了录制声卡的时候 WasapiLoopbackCapture(),却不支持设置码率,官方的说法是:录制声卡声音走的是windows默认的设置,这个设置是只读的,不能更改。 这时候你虽然录了两个音轨,但一个文件很小,另一个很大,也无法合并。
于是只能祭出FFmpeg这个杀器,合并音轨之前,先用FF把这两个音轨码率调整一致,就叫对齐吧。 然后合并就没问题了。
成品软件实现的界面:
软件启动界面
软件录音界面
录音结束合并音轨
录音成品文件
发布后的软件包
软件测试了几天也没啥问题了,我想通过什么方法来监听 微信或QQ的来电,一旦来电响铃,软件自动弹出 “是否录音?”的提示,我是一点思路都没有,哪位大神给指个方向呢?