用API mciSendString可以同時(shí)播放多個(gè)聲音,需要提供路徑。
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元西鄉(xiāng)塘做網(wǎng)站,已為上家服務(wù),為西鄉(xiāng)塘各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
資源文件很麻煩,要用反射讀取出來,再用IO寫到磁盤路徑。
你是做游戲把?軟糖建議是不要使用資源文件,而使用本地文件。
用個(gè)BGM文件夾保存背景音樂,用SE文件夾保存音效(學(xué)習(xí)RPG Maker的做法)
API代碼奉上,具體實(shí)現(xiàn)模塊字?jǐn)?shù)超過最大值,請(qǐng)下載附件
Imports?System.Text
'''?summary
'''?可播放MPEG,AVI,WAV,MP3,MID,WMA等格式的音頻文件,*不支持OGG
'''?/summary
Public?Class?音頻設(shè)備
'聲明API函數(shù):?mciSendString
System.Runtime.InteropServices.DllImport("winmm.dll",?EntryPoint:="mciSendString")
Public?Shared?Function?mciSendString(strCommand?As?String,
strReturn?As?StringBuilder,
iReturnLength?As?Integer,
hwndCallback?As?Integer)?As?Integer
End?Function
'聲明API函數(shù):?mciGetErrorString
System.Runtime.InteropServices.DllImport("winmm.dll",?EntryPoint:="mciSendString")
Public?Shared?Function?mciGetErrorString(errCode?As?Integer,
errMsg?As?StringBuilder,
buflen?As?Integer)?As?Integer
調(diào)用方法
Public?Class?Form1
Dim?音頻設(shè)備?As?New?音頻設(shè)備
Private?Sub?Button1_Click(sender?As?Object,?e?As?EventArgs)?Handles?Button1.Click
Dim?路徑?=?"F:\音樂文件名.mp3"
音頻設(shè)備.打開("自定義名稱1",?路徑)
音頻設(shè)備.播放("自定義名稱1")
'音頻設(shè)備.暫停("自定義名稱1")
'音頻設(shè)備.繼續(xù)("自定義名稱1")
'音頻設(shè)備.關(guān)閉("自定義名稱1")
End?Sub
End?Class
如滿意,請(qǐng)采納,還有不懂的請(qǐng)追問,謝謝。
Private?Sub?Command1_Click()?''添加音樂文件
On?Error?Resume?Next
CommonDialog1.ShowOpen
Text1.Text?=?CommonDialog1.FileName
End?Sub
Private?Sub?Command2_Click()?'''播放音樂文件
WindowsMediaPlayer1.URL?=?Text1.Text
WindowsMediaPlayer1.Controls.play
End?Sub
Private?Sub?Command3_Click()
End
End?Sub
Private?Sub?WindowsMediaPlayer1_PlayStateChange(ByVal?NewState?As?Long)??'當(dāng)歌曲播放狀態(tài)改變時(shí)觸發(fā)此事件
Static?js?As?Integer
If?NewState?=?1?Then???'如果歌曲播放完畢
js?=?js?+?1????'計(jì)數(shù)+1
If?js??10?Then???'是否少于10次
WindowsMediaPlayer1.Controls.play???'再次播放
Else
js?=?0???'否則停止播放且計(jì)數(shù)清零
End?If
End?If
End?Sub
不過最好的解決辦法是利用歌曲列表來實(shí)現(xiàn),只要在程序中把同一首歌在列表中添加10次,它就會(huì)自動(dòng)重復(fù)播放10次,無須再用程序進(jìn)行額外控制了。這個(gè)就你自己去研究了。
“單曲循環(huán)”就是反復(fù)播放“當(dāng)前正在播放的歌曲”吧!
這個(gè)應(yīng)該不難呀,播放器的“行為控制”,是你的代碼決定的。
如果選擇了“單曲循環(huán)”模式,那就在它播放完后,重新加載這首歌曲來播放唄。
當(dāng)前正在播放的是哪首歌,你的”代碼中“是知道的吧!
思路很重要,我以前做過,上一曲下一曲,這個(gè)控件有自帶的,順序的話就是判斷是否到音樂幀的尾端,如果是,就指向下一曲,循環(huán)的話有單曲和全部,也是比較簡(jiǎn)單,同順序,至于隨機(jī)播放的話,我當(dāng)時(shí)是用隨機(jī)數(shù)解決的,就是計(jì)算列表中有多少首歌曲,計(jì)算之后,進(jìn)行隨機(jī)產(chǎn)生一個(gè)數(shù)字,用該數(shù)字定位歌曲,進(jìn)行播放