原创

bass.net实现录音功能

2020-04-28 Tuesday 12:30

首先需要先初始化录音,使用方法
Bass.BASS_RecordInit
此方法接受一个整数参数,表明要用哪个输入设备进行录音,如提供-1,则为默认设备,返回值为是否初始化成功。
开始录音可以调用如下方法
this.recordHandle = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, this.recordProc,IntPtr.Zero);
BASS_RecordStart方法的返回值是录音的句柄,方法的前几个参数我们可以先不管,主要关注this.recordProc这个参数。
this.recordProc它是RECORDPROC委托,此委托在录音过程中会被多次调用,会告诉你录音的长度等信息,并且可以控制是否停止录音。
这里需要特意注意一点,因为我们调用bass录音,走的并非是托管代码,因此委托必须要创建成类的成员,不能写成局部变量,否则此变量会被垃圾回收,导致出错。
此委托的定义如下
public delegate bool RECORDPROC(int handle, IntPtr buffer, int length, IntPtr user);
参数含义分别是:录音缓冲区的指针、缓冲区长度、用户自定义数据,返回值如为true,则继续录音,否则停止录音。
本次我们录音最终实现不借助这个委托,我们直接简单的写成这样即可
private bool recoring(int handle, IntPtr buffer, int length, IntPtr user)
{
return true;
}
然后
this.recordProc = new RECORDPROC(this.recoring);
即可。
现在我们进行最关键的一步。
我们要实现吧录音保存成某格式的音频文件,就要使用道编码器,而bass.net默认情况下是只支持wav编码器的,此处我们也已将录音保存成wav文件做演示。
首先我们要实例化编码器,wav编码器的创建方法为
var wav = new EncoderWAV(recordHandle);
构造参数为BASS_RecordStart的返回值,也就是录音句柄。
实例化编码器后我们需要设置一些参数,此处最重要的为
wav.OutputFile = path;
此参数表明录音文件的保存路径。
现在准备工作都已经做好了,我们可以开始真正的录音了!
调用
// 开启编码器
wav.Start(null, IntPtr.Zero, false);
// 开启录音通道
Bass.BASS_ChannelPlay(this.recordHandle, false);
如果要暂停录音的话可以调用
wav.Pause(true);
Bass.BASS_ChannelPause(this.recordHandle);
继续录音调用
wav.Pause(false);
Bass.BASS_ChannelPlay(this.recordHandle, false);
停止录音调用
wav.Stop();
Bass.BASS_ChannelStop(this.recordHandle);
// 释放录音
Bass.BASS_RecordFree();


随手打赏
关闭

感谢您的支持!

扫码打赏,你说多少就多少
打赏二维码

打开

支付宝

扫一扫,即可进行扫码打赏哦