现在的音乐播放器越弄越复杂,使用VisualFreeBASIC可以方便的制作出小巧的MP3播放器,这里使用BASS音频库来播放MP3。BASS音频库是一款对非商业用户免费的音频处理类库。功能强大,支持几乎所有音频的解码编码等处理。(官网地址:http://www.un4seen.com/)该库的函数有很多,具体可以看clsBass.bi文件。这里介绍已使用的几个函数。
定义全局变量
Dim Shared bass As clsBass 'bass.dll的类引用
Dim Shared hs As HSTREAM '当前歌曲打开的流句柄
判断版本并初始化
If HiWord(bass.GetVersion) <> BASSVERSION Then '判断版本
AfxMsg "Bass.dll文件版本不合适!"
Else
If Not bass.Init( -1 ,44100 ,0 ,0 ,NULL) Then '初始化音频库
AfxMsg "初始化错误"
End If
End If
播放
If hs Then '如果播放流句柄不为0,则先停止并释放资源
bass.ChannelStop(hs) '停止播放
bass.StreamFree(hs) '释放原有文件
End If
hs = bass.StreamCreateFile(False, StrPtr(Mp3FilePath(Index)), 0, 0, 0) '建立播放流
If hs < BASS_ERROR_ENDED Then '判断是否打开成功
Print "打开失败"
Print bass.ErrorGetCode
Return 1
Else '成功
maxtime = bass.ChannelBytes2Seconds(hs ,bass.ChannelGetLength(hs ,BASS_POS_BYTE)) '; {总秒数}
Slider1.MaxValue = Int(maxtime * 1000) '设置进度条最大值
bass.ChannelSetSync(hs, BASS_SYNC_END, 0, Cast(SYNCPROC Ptr,@Mp3SyncProc), NULL)
End If
'开始播放
bass.ChannelPlay(hs ,False) ' {参数 1 是流句柄; 参数 2 若是 TRUE 每次都会从头播放}
'回调函数
Sub Mp3SyncProc cdecl(ByVal HSYNC As HANDLE ,ByVal channel As DWORD ,ByVal dat As DWORD ,ByVal user As Any Ptr)
'这里处理播放完成后需要做的工作
End Sub
4.调整播放位置
Dim npos As Single = Slider1.Value / 1000
Dim Position As QWORD = bass.ChannelSeconds2Bytes(hs, npos) '转换成歌曲的位置
bass.ChannelSetPosition(hs, Position, BASS_POS_BYTE) '设置歌曲的位置
5.音量控制
bass.ChannelSetAttribute(hs, BASS_ATTRIB_VOL, Slider2.Value / Slider2.MaxValue)
6.退出释放资源
Function Form1_WM_Close(hWndForm As hWnd) As LResult
bass.ChannelStop(hs) '停止播放
bass.StreamFree(hs) '释放音频流
bass.Stop() '停止所有输出
bass.free()
Function = False ' 返回 TRUE 阻止关闭窗口。
End Function
效果如图所示
完整工程如下:https://github.com/rainheart311/VFB-FullProject/tree/main/MyPlayer