天天看點

VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

1 用VBA播放聲音的方法

  • 需要調用windows裡的api (添加頭檔案,調用子產品)
  • 以下這幾個方法,都隻适合播放小音頻,因為這些方法是把這些檔案讀入記憶體了,比較費。
  • 以下的這幾個方法,隻試過支援.wav 不知道是否支援.mp3
  • 在其他語言裡,這個檔案的路徑""的斜杠,可能需要轉義,比如寫兩個 \\ 的斜杠轉義

1.1 用 sndPlaySound32() 播放聲音檔案

  • 需要調用API 如 Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA"
  • Private Declare PtrSafe Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszName As String, ByVal uFlags As Long) As Long
  • 如果是64位系統,需要加 PtrSafe 關鍵字,否則不需要
  • sndPlaySound32(檔案參數)       參數這寫聲音檔案的絕對路徑就行
  • 參數1:聲音檔案,應該可以支援 .wav  
  • 參數2:0 或0 &
Private Declare PtrSafe Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszName As String, ByVal uFlags As Long) As Long

Sub test1()

Call sndPlaySound32("F:\cowork\俄羅斯方塊\true2.wav", 0&)  '這裡寫聲音檔案的絕對路徑就行

End Sub
           

1.2 用 sndPlaySound() 播放聲音檔案

  • 需要調用API 如 Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA"
  • Private Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
  • 如果是64位系統,需要加 PtrSafe 關鍵字,否則不需要
  • sndPlaySound  參數1,參數2
  • call sndPlaySound (參數1,參數2)
  • 參數1:聲音檔案,絕對路徑
  • 參數2:
  • SND_ASYNC 異步 ,也可以用1,播放開始後即往下執行了
  • SND_SYNC 同步 ,也可以用0,播放完了才往下執行
  • SND_NODEFAULT ?給目錄用的?
  • BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);
  • SND_ASYNC、SND_LOOP、SND_MEMORY、SND_NODEFAULT、SND_NOSTOP和SND_SYNC的組合
  • 關閉方法:播放一個不存在的聲音檔案
  • call  sndPlaySound("",1) 
Private Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long


Sub testSound2()

sndPlaySound "F:\cowork\FangCloudV2\個人檔案\2學習\4EXCEL和VBA\3VBA項目\俄羅斯方塊\true2.wav", SND_ASYNC

End Sub
           

這樣也可以

Sub testSound2()

sndPlaySound "F:\cowork\FangCloudV2\個人檔案\2學習\4EXCEL和VBA\3VBA項目\俄羅斯方塊\true2.wav", SND_NODEFAULT

End Sub
           

1.3 用 PlaySound() 播放聲音檔案

  • 需要調用API 如 Function PlaySound Lib "winmm.dll" Alias "PlaySoundA"
  • Private Declare PtrSafe Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
  • 如果是64位系統,需要加 PtrSafe 關鍵字,否則不需要
  • PlaySound
  • call  PlaySound()
  • PlaySound 參數1 參數2 參數3
  • 參數1:檔案名
  • 參數2:必須是0
  • 參數3:1 背景播放,8循環播放,9(1+8)背景循環播放
  • 關閉方法:播放一個不存在的聲音檔案
  • call  PlaySound("",0,1) 
  • BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
Private Declare PtrSafe Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long


Sub testSound3()

Call PlaySound("F:\cowork\FangCloudV2\個人檔案\2學習\4EXCEL和VBA\3VBA項目\俄羅斯方塊\true2.wav", 0, 8)

End Sub
           
  • 網上有詳細解釋,太複雜,備忘在這
  • https://blog.csdn.net/renai2008/article/details/7747799
  • https://blog.csdn.net/grass_zhou/article/details/4348060

1.4 播放聲音的不同方式,外部調用等(這部分轉載,學習)

  • https://blog.csdn.net/jx464741012/article/details/84357540
  • 沒看懂,以後學習
1. 通過filename來定位檔案播放
PlaySound(TEXT("c:\\crossing field.wav"), NULL, SND_FILENAME | SND_ASYNC); // TEXT()函數處理寬字元問題,SND_FILENAME辨別采用檔案名播放,SND_ASYNC辨別異步播放,即PlaySound函數開始播放後便傳回執行代碼而不是等到播放完了再執行(此種方式對應SND_SYNC) 
           
sndPlaySound(TEXT("c:\\crossing field.wav"), SND_FILENAME | SND_ASYNC);
           

2. 通過資源檔案播放

首先将wav檔案添加進資源.rc檔案,假設檔案ID為IDR_WAVE1,則代碼如下

PlaySound((LPCTSTR)IDR_WAVE1, NULL, SND_RESOURCE | SND_ASYNC | SND_LOOP); // 将檔案ID強制轉換為LPCTSTR型資料,然後标明是采用資源檔案的形式播放(SND_RESOURCE),異步(SND_ASYNC),循環(SND_LOOP)
           
sndPlaySound((LPCTSTR)IDR_WAVE1, SND_RESOURCE | SND_ASYNC | SND_LOOP); // 同PlaySound
           
第一種方式是外部調用,是以生成的exe檔案很小,而第二種第三種會把wav檔案壓進exe檔案,是以檔案會變得特别大……

1.5 EXCEL也可以用  windowsMediaPlayer

  • 先在excel裡插入 mediaPlayer
  • 開發工具---插入---其他控件
  • 選擇 Windows mediaPlayer
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

使用這段代碼可以播放音樂

Sub 播放()
Sheets("sheet2").WindowsMediaPlayer1.URL = ThisWorkbook.Path & "\true2.wav"
Sheets("sheet2").WindowsMediaPlayer1.Controls.Play  '播放
End Sub
           

'Sheets("sheet1").WindowsMediaPlayer1.Controls.stop  '停止播放

'Application.OnTime "15:07", "播放"         '設定播放時間

1.6 通過beep API

  • API
  • 響鈴API函數聲明
  • Private Declare PtrSafe Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long  
  • 參數
  • dwFreq:Long型,聲音頻率(從37Hz到32767Hz)。
  • dwDuration:Long型,聲音的持續時間,以毫秒為機關。如為-1,表示一直播放聲音,直到再次調用該函數為止。

測試基本的beep2個參數效果

Private Declare PtrSafe Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long  '響鈴API函數聲明
 
 
Sub play1()
    'beep 頻率,持續時間duration 毫秒

    Beep 100, 500
    Beep 1000, 500
    Beep 3000, 500
    
    Beep 2000, 400
    Beep 2000, 800
    Beep 2000, 1500
    
    
    DoEvents
End Sub
           
  • 有大佬用BEEP寫了個歡樂頌,能運作,挺有意思的,下面是傳送門
  • https://blog.csdn.net/jyh_jack/article/details/83444328?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control
  • 定義聲音高低,音樂盲不懂,貼在這

1.7 Application.Speech.Speak

  • 這樣是不是可以實作人機對話了?
  • 寫法1:
  • Application.Speech.Speak ""
  • 寫法2:
  • range.speak
  • 寫法3:
  • CreateObject("SAPI.SpVoice").Speak Range("A1").Value
Sub play2()

Application.Speech.Speak "hello"
Application.Speech.Speak "It's time to do something."
Application.Speech.Speak "fire in the hole."


End Sub
           
  • 很好玩,還可以讀中文,實測可行
Sub play3()

Application.Speech.Speak Range("a1").Value


End Sub
           
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

range.speak

selection.speak

Sub play3()

Application.Speech.Speak Range("a1").Value    '試了下是串行的,同步執行
Range("a2").Speak
Selection.Speak

End Sub
           
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

CreateObject("SAPI.SpVoice").Speak Range("A1").Value

Sub play4()

CreateObject("SAPI.SpVoice").Speak Range("A1").Value

End Sub
           

大神的語速例子,VBS的代碼

Sub test11()



Dim objSV
Set objSV = CreateObject("SAPI.SpVoice")
objSV.Speak ("大家好,我是" & objSV.Voice.GetDescription & ",下面我給大家說一段繞密碼.")
objSV.Rate = 5
objSV.Speak ("巴老爺有八十八棵芭蕉樹 來了八十八個把式要在巴老爺八十八棵芭蕉樹下住 巴老爺拔了八十八棵芭蕉樹 不讓八十八個把式在八十八棵芭蕉樹下住 八十八個把式燒了八十八棵芭蕉樹 巴老爺在八十八棵樹邊哭")
objSV.Rate = 0
objSV.Speak ("太快了屌爆了有木有,我慢一點再說一次吧.")
objSV.Rate = 3
objSV.Speak ("巴老爺有八十八棵芭蕉樹 來了八十八個把式要在巴老爺八十八棵芭蕉樹下住 巴老爺拔了八十八棵芭蕉樹 不讓八十八個把式在八十八棵芭蕉樹下住 八十八個把式燒了八十八棵芭蕉樹 巴老爺在八十八棵樹邊哭")
objSV.Rate = 0
objSV.Speak ("本期節目到此結束.謝謝收聽!")

End Sub
           

https://jingyan.baidu.com/article/4f7d5712a6e0671a20192716.html

https://tieba.baidu.com/p/2026221833

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next '因為表上内容倍全删後,下面方法會報錯
Application.Speech.Speak Target, True

End Sub
           

可實作每次sheet内容改變後,自動讀語音

指定讀一列或部分得也可以

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 Then


'Target.Speak  '無法操作其他
Application.Speech.Speak Target, True

End If
End Sub
           
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

target.value    取其中得數值來讀

target.text  取其中得文本,小數點也會讀出來

speech.speak "",0,0,0

speech.speak "",1,0,0  '允許異步,處理其他,否則預設是同步無法響應

speech.speak "",1,0,1  '打斷效果未試驗出來

多句放一起得時候,需要每個都是 1/true 才會異步

speech.speak "",1,0,0

speech.speak "",1,0,0

實測很多問題

https://blog.csdn.net/sysdzw/article/details/90680255

如果像停止聲音?

在主程式代碼中,應該是在循環操作過程的任意位置(或你喜歡的位置)中,

插入如下代碼:

For i = 1 To N

……

DoEvents

If [a1] = "" Then '這裡的[a1] = "" 為終止條件,可以自己重新定義

Exit Sub 或END

End If

……

Next

++++++++++++++++++

然後,另外寫一個終止條件的代碼,比如:

Sub StopMacro()

    [a1] = ""   '終止條件,可以自己改條件

End Sub

++++++++++++++++++

然後,在工作簿或窗體上加入這個可執行終止代碼的宏的按鈕即可。

https://tieba.baidu.com/p/4089338277?red_tag=3448404053

這個可以達到和放在worksheet change裡得事件一樣得效果

會一直監測這個單元格 (監控全表?)

Sub ttf7()

Application.Speech.SpeakCellOnEnter = True
Application.Speech.Speak Range("H13")



End Sub
           

https://docs.microsoft.com/zh-cn/office/vba/api/excel.application.showtooltips

https://docs.microsoft.com/zh-cn/office/vba/api/excel.speech.direction

Application.Speech.Direction = xlSpeakByRows

https://tieba.baidu.com/p/138682414?red_tag=0595033674

2 在窗體裡播放聲音和視訊檔案

2.1 在窗體裡用 windowsMediaPlayer的播放器,播放聲音,甚至視訊?

  1. 建立窗體
  2. 增加windowsMediaPlayer的播放器
  3. 增加控制按鈕,給窗體裡增加代碼
  4. 然後,運作窗體
  5. 點選按鈕

2.2 如何增加windowsMediaPlayer的播放器

VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

2.3 代碼

  • 其中WindowsMediaPlayer1是控件的名稱
  • 關鍵代碼
  • WindowsMediaPlayer1.URL = path1 & "true2.wav"
  • 需要是絕對路徑,但也可以取得檔案 path 再組合相對路徑稱為 可支援移動 的絕對路徑,将表格和資源打包在一起。
  • WindowsMediaPlayer1.Controls.Play
  • 控制播放
Private Sub CommandButton1_Click()

path1 = ThisWorkbook.Path & "\"

WindowsMediaPlayer1.URL = path1 & "true2.wav"
WindowsMediaPlayer1.Controls.Play


End Sub

Private Sub WindowsMediaPlayer1_OpenStateChange(ByVal NewState As Long)

End Sub
           
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

 音樂控件的播放

  • 播放音樂的屬性
  • 播放器.url
  • 播放器.controls.play    
  • WindowsMediaPlayer1.URL = "C:\Users\Administrator\Desktop\rain.mp3"
  • WindowsMediaPlayer1.Controls.Play
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?
VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?
Private Sub WindowsMediaPlayer1_Click(ByVal nButton As Integer, ByVal nShiftState As Integer, ByVal fX As Long, ByVal fY As Long)

WindowsMediaPlayer1.URL = "C:\Users\Administrator\Desktop\rain.mp3"
WindowsMediaPlayer1.Controls.Play

End Sub
           

2 用加載lib 調用API的方法

Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Sub auto_open()
    ReturnSoundValue=mciExecute("open " & ThisWorkbook.Path &
    "\上海灘.mid ALIAS rsv")
    mciExecute "play rsv"
End Sub
Sub關閉()
    mciExecute "close rsv"
End Sub
           

是不是隻能播放MP3?

一次播放多個MP3?

http://club.excelhome.net/thread-1400639-1-1.html

其他方法

http://www.excelpx.com/thread-177197-1-1.html

用shell?

http://club.excelhome.net/thread-553187-1-1.html

http://www.cnitblog.com/asfman/articles/35982.html

https://www.cnblogs.com/keno/archive/2013/01/30/MediaPlayer.html

wmp.dll控件常用屬性 

    本人在網上收集到windows media player 控件的一些屬性,望對有需要的朋友有所幫助。(在計算機中裝了wmp9以上,就會有wmp.dll控件,屬性如下所示)

屬性/方法名: 說明:

[基本屬性]  

URL:String; 指定媒體位置,本機或網絡位址

uiMode:String; 播放器界面模式,可為Full, Mini, None, Invisible

playState:integer; 播放狀态,1=停止,2=暫停,3=播放,6=正在緩沖,9=正在連接配接,10=準備就緒

enableContextMenu:Boolean; 啟用/禁用右鍵菜單

fullScreen:boolean; 是否全屏顯示

[controls] wmp.controls //播放器基本控制

controls.play; 播放

controls.pause; 暫停

controls.stop; 停止

controls.currentPosition:double; 目前進度

controls.currentPositionString:string; 目前進度,字元串格式。如“00:23”

controls.fastForward; 快進

controls.fastReverse; 快退

controls.next; 下一曲

controls.previous; 上一曲

[settings] wmp.settings //播放器基本設定

settings.volume:integer; 音量,0-100

settings.autoStart:Boolean; 是否自動播放

settings.mute:Boolean; 是否靜音

settings.playCount:integer; 播放次數

[currentMedia] wmp.currentMedia //目前媒體屬性

currentMedia.duration:double; 媒體總長度

currentMedia.durationString:string; 媒體總長度,字元串格式。如“03:24”

currentMedia.getItemInfo(const string); 擷取目前媒體資訊"Title"=媒體标題,"Author"=藝術家,"Copyright"=版權資訊,"Description"=媒體内容描述,"Duration"=持續時間(秒),"FileSize"=檔案大小,"FileType"=檔案類型,"sourceURL"=原始位址

currentMedia.setItemInfo(const string); 通過屬性名設定媒體資訊

currentMedia.name:string; 同 currentMedia.getItemInfo("Title")

[currentPlaylist] wmp.currentPlaylist //目前播放清單屬性

currentPlaylist.count:integer; 目前播放清單所包含媒體數

currentPlaylist.Item[integer]; 擷取或設定指定項目媒體資訊,其子屬性同wmp.currentMedia 

//2...

==========WindowsMediaPlayer的常用屬性和方法===========

[基本屬性] 

URL:string                            可以指定媒體位置 

enableContextMenu:Boolean 顯示/不顯示播放位置的右鍵菜單 

fullScreen:boolean                 全屏顯示 

stretchToFit:boolean              非全屏狀态時是否伸展到最佳大小 

uMode:string                         播放器的模式,full:有下面的控制條; none:隻有播放部份沒有控制條 

playState:integer                    目前控件狀态,下面是三種基本狀态: 

3:正在播放 

2:暫停 

1:已停止 

狀态變化時會觸發OnStatusChange事件 

[controls] 

可通過WindowsMediaPlayer.controls對播放器進行控制并取得相關的一些資訊: 

 controls.play;       播放 

 controls.stop;       停止 

 controls.pause;      暫停 

 controls.currentPosition:Double 目前播放進度 

 controls.currentPositionString:string 時間格式的字元串 "0:32" 

[currentMedia] 

可以通過WindowsMediaPlayer.currentMedia取得目前媒體的資訊 

 currentMedia.duration  Double 總長度 

 currentMedia.durationString 時間格式的字元串 "4:34" 

[settings] 

可以通過WindowsMediaPlayer.settings對播放器進行設定,包括音量和聲道等。 

settings.volume:integer 音量 (0-100) 

settings.balance:integer 聲道,通過它應該可以進行立體聲、左聲道、右聲道的控制。 

-->

<input type="button" value='換檔案' οnclick="MediaPlayer.controls.src='d:\xx.mid';">

WindowsMediaPlayer1.settings.playCount = 設定播放的次數

第n個播放完

n+=1

if 循環.cheked=true  then n-=1

播放(n)

Private Sub File1_Click()

    WindowsMediaPlayer1.url = App.Path + "\" + File1.List(File1.ListIndex)

    WindowsMediaPlayer1.Controls.play

End Sub

Private Sub Form_Load()

    File1.Path = App.Path

End Sub

Private Sub WindowsMediaPlayer1_OpenStateChange(ByVal NewState As Long)

    WindowsMediaPlayer1.url = App.Path + "\1.mp3"

    WindowsMediaPlayer1.Controls.play

    'WindowsMediaPlayer1.controls.pause '暫停

    'Controls.currentPosition = 10 '設定bai目前播du放未知zhi

End Sub

播放多個和播放下一曲?

vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦

假設該控件名bai為axWindowsMediaPlayer1。該控件有一PlayStateChange事件du,觸發zhi該事件時檢dao查axWindowsMediaPlayer1.playState或e.newState是否為WMPLib.WMPPlayState.wmppsMediaEnded,如是,再執行你zhuan的代碼。shu

WMP控件需要依賴WMP,其實有一些更好的方案的,比如說bass(播放絕大多數格式音樂),DirectShow(調用系統自帶解碼器)等等。

VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

知道播放到第bai幾秒的代碼du

Private Sub Form_Load()

Timer1.Interval = 500

End Sub

Private Sub Timer1_Timer()

Text1.Text = WindowsMediaPlayer1.Controls.currentPositionString

End Sub

知道是否在播zhi放dao,是zhuan否停止shu的代碼

Private Sub WindowsMediaPlayer1_PlayStateChange(ByVal NewState As Long)

If NewState = 1 Then Me.Caption = "停止"

If NewState = 3 Then Me.Caption = "正在播放"

End Sub

舉例bai

Private Sub WindowsMediaPlayer1_PlayStateChange(ByVal NewState As Long)

If NewState = 1 Then '1為停止du(一曲播完zhidao)

WindowsMediaPlayer1.Controls.play '再播放

End If

end sub

NewState判斷zhuan這個shu值

    WindowsMediaPlayer1.close

Private Sub UserForm_Click()

    play1.Visible = False

    arr = array("xiao3.mp3","xue3.mp3","sheng1.mp3")

    for each p in arr

        play1.URL = p

        play1.Controls.Play

        Sleep 2000

    next

End Sub

VBA關于聲音的多種實作方法1 用VBA播放聲音的方法2 在窗體裡播放聲音和視訊檔案2 用加載lib 調用API的方法是不是隻能播放MP3?一次播放多個MP3?vb2010如何在windowsmediaplayer結束以後觸發下一個事件?比如,結束以後label1.text="天氣不錯”謝謝啦VB 如何實時知道Windows mediaplayer的播放狀态,比如播放到第幾秒了,至少得知道是否在播放,是否停止?

用的是2010版本,其他版本未嘗試

首先添加引用: 在 COM 元件中找到 Windows Media Player 并引用

然後在工具箱界面右擊選擇“選擇項” 在新視窗中選擇 “Windows Media Player”并确定, 這樣就添加了該元件

曾用到的簡單設定:

MediaPlayer.uiMode = "none"; //隐藏播放控制條
MediaPlayer.URL = Application.StartupPath + "\\MediaVideo\\Animation.avi"; //播放路徑
MediaPlayer.settings.setMode("loop", true); //循環播放
           
  • 1
  • 2
  • 3

最後結束項目時應釋放該資源:

MediaPlayer.close();
MediaPlayer.Controls.Clear();
MediaPlayer.Dispose();
           

2.4 特殊實作

  • 除了實作,點選播放音樂
  • 特定時機判斷後,播放音樂
  • 甚至可以隐藏 播放器,但一樣可以控制它
  • 可以實作EXCEL,播放背景音樂等等
vba