音频库-bass使用

BASS音频库是一款对非商业用户免费的音频处理类库。功能强大,支持几乎所有音频的解码编码等处理。以及强大的扩展功能!BASS在很多软件中都可以看到其身影,不管是音乐播放器还是视频播放器还是其他媒体处理软件。比如其中一款比较有名的叫做AIMP3的音乐播放器,里面就用到BASS音频库。 还有国产视频软件 快播,迅雷看看等等,里面都有用到BASS音频库。


BASS音频库官网 http://www.un4seen.com/

现在我就简单介绍如何用C#调用BASS音频库实现播放音乐。

首先你先到官网下载BASS音频库 先点击左边导航的BASS 然后下载



下载之后,再把这个页面拉下来找到 Bass.Net 下载这个别人封装好的.NET平台的类库。



当然也可以不下载这个Bass.Net,自己也可以封装。只是比较麻烦而已。


下载好了这两个文件之后。你先安装好Bass.Net,他会自动注册Bass.Net.dll组件。安装过程略过! Bass.Net有两种框架,一种是.Net 2.0 的和 .Net 4.0 的。其实用法都一样。 我以2.0为例。


现在新建个.Net 2.0项目! 你可以在解决方案的项目的属性里修改目标框架。



OK了,现在添加Bass.Net的引用。 右键解决方案管理器里的引用,添加引用。在.NET分类里找到刚才安装好的 BASS.NET API for .Net 确定



最后还要把BASS音频库(bass.dll,第一个下载的)放到Debug目录里。 基本工作做好了。 现在开始编写代码!


在一个窗体是添加两个按钮!一个为打开按钮,一个为播放按钮!



先对窗体加载事件写代码!用来初始化BASS音频库。 双击窗体,进入代码编辑模式。
先添加对Bass命名空间的引用。
using Un4seen.Bass;

在窗体的Load事件里写代码



第一个参数是输出设备的编号,-1是采用默认设备输出,第二个参数是输出采样率,第三个参数是初始化设备的输出模式,最后一个是句柄,为本窗体的句柄就可以了。

现在写打开按钮的单击事件,双击打开按钮,进入编辑模式。

然后定义全局的字符串字段: string fileName; 来保存文件名。 定义一个文件打开对话框,用来打开一个文件,获取文件名。



现在编写播放按钮的单击事件。双击播放按钮,进入编辑模式。

定义一个全局Int的字段: int stream; 音频流句柄。

先用Bass.BASS_StreamCreateFile创建音频流,第一个参数是文件名,第二个参数是文件流开始位置,第三个是文件流长度 0为使用文件整个长度,最后一个是流的创建模式。

然后用Bass.BASS_ChannelPlay来播放音乐,第一个参数是刚才创建的音频流句柄,第二个是是否要重新开始播放。



现在基本播放功能写好了。当然还要一些收尾工作,就是释放资源!为了程序的安全稳定!(.NET可以自动处理托管资源,对于非托管资源就要自己释放了)

你可以在窗体的关闭事件里写释放资源。

OK了,调用Bass音频库实现简单的播放功能。 Bass.Net在没有注册的情况下在每次启动时都会有个版权提示窗体显示。 当然如果自己封装的话就不会有这些问题!
更多功能的实现你可以参考Bass.Net 的API文档,或者BASS音频库官网。

Bass.BASS_ChannelPause(stream);//音乐暂停
Bass.BASS_ChannelIsActive(stream);//音乐当前播放状态
Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetPosition(stream));//当前播放时间(单位秒)
Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));//当前音乐持续时间(单位秒)

Bass.Net 的API文档网址: http://bass.radio42.com/help/

单独使用bass.dll 可以支持MP3、OGG、WAV等格式音乐的播放。如果要实现播放其他格式的音乐,可以到官网下载扩展,那些扩展都有文档说明。

这次教程就这么多了,先让大家了解BASS音频库的基本使用方法。对于那些英文资料,你们可以使用翻译工具来阅读,学会自学! 如果还有什么问题你们可以提出来,我会尽量帮你们解答!
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Bass中实现音频播放完成回调函数,您可以使用BASS_ChannelSetSync函数来注册一个同步事件。这个函数可以让您在通道的播放位置到达指定位置时执行一个回调函数。为了实现播放完成回调函数,您可以将同步类型设置为BASS_SYNC_END。 下面是一个示例代码: ```C++ #include <bass.h> // 回调函数 void CALLBACK MySyncProc(HSYNC handle, DWORD channel, DWORD data, void *user) { // 音频播放完成时执行的操作 } int main() { // 初始化Bass BASS_Init(-1, 44100, 0, 0, NULL); // 加载音频文件 HSTREAM stream = BASS_StreamCreateFile(FALSE, "audio.mp3", 0, 0, 0); // 注册同步事件 BASS_ChannelSetSync(stream, BASS_SYNC_END, 0, MySyncProc, NULL); // 开始播放 BASS_ChannelPlay(stream, FALSE); // 等待播放完成 // ... // 关闭Bass BASS_Free(); return 0; } ``` 在上面的代码中,我们首先调用BASS_Init函数来初始化Bass。然后,我们使用BASS_StreamCreateFile函数来加载音频文件,并得到一个音频流的句柄。接下来,我们使用BASS_ChannelSetSync函数来注册一个同步事件,将同步类型设置为BASS_SYNC_END,这意味着当音频播放到结尾时将执行MySyncProc函数。最后,我们调用BASS_ChannelPlay函数来开始播放音频,并等待播放完成。 在MySyncProc函数中,您可以执行任何想要在音频播放完成时执行的操作。注意,这个函数将在Bass的内部线程中被调用,因此您需要注意线程安全问题。如果您需要在MySyncProc函数中使用共享资源,您可能需要使用同步机制来保证线程安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值