VB.net與Media Player9.0嵌入式開發

來源:互聯網
上載者:User

Windows Media Player 9.0是微軟推出的最新數位媒體播放器,它除了繼承了media player 8.0的優秀之處外,還添加了許多的實用功能。不過這些功能並不是本文講述的重點,本文要講的是如何利用media player來編寫一個自己的嵌入式軟體,並讓它擁有播放cd,vcd,avi,mp3等的功能。 

要編寫這個程式你首先要熟悉vb.net,因為本程式是使用vb.net編寫。在你的電腦上要安裝windows media player 9.0。最後最關鍵的是要安裝windows mendia player 9.0 sdk,在sdk中包含了一個dll,這個dll的作用是完成com和.net之間的轉換,因為media player 9.0的編程要使用一個media player 9.0 activeX控制項,而activeX的本質就是一個com。對於windows mendia player 9.0 sdk可以到微軟的msdn去下載。

完成上面3個軟體的安裝後還不可以動手編寫代碼,因為要保證mendia player 9.0要與.net架構通訊,還必須註冊mendia player 9.0的pia,所謂pia是"Primary interop assemblies"的縮寫本人將它翻譯為"原始內部彙編集",之所以要先註冊它是因為com技術誕生在.net技術之前要讓com和.net通訊就要一個中介層來串連這兩邊在mendia player 9.0中使用mendia player 9.0 sdk redist目錄下的wmppia.dll來註冊mendia player 9.0的pia,在命令視窗中輸入:[path]regasm c:WMSDKWMPSDK9 redistwmppia.dll(regasm是.net提供的pia註冊程式,path是它的路徑,你可以用搜尋功能來找到它)。 

各位別以為註冊了pia就可以編程了,你還得將它添加到全域緩衝中。在命令視窗中輸入:[path]Gacutil /i C:WMSDKWMPSDK9redistwmppia.dll(Gacutil是.net提供的全域緩衝添加程式,path是它的路徑,你可以用搜尋功能來找到它) 

完成上面的5個步驟後就可以開始編寫代碼了。為了讓.net使用pia,我們必須要在代碼的開頭添加下面一條語句: Imports Microsoft.MediaPlayer.Interop現在就可以開始我們的編程之旅了。

右擊vs.net ide的控制項工具箱,在捷徑功能表中單擊"自訂工具箱",在"自訂工具箱"中選中"windows media player"並單擊"確定"(圖1)

圖1

此時會在控制項工具攔底部添加一個mendia的控制項標誌。雙擊此控制項,將它放在窗

體上。右擊它並點擊"屬性"在出現的屬性視窗(圖2)中將"選擇模式"設定為"none"並單擊"確定",這樣做的目的是去掉原來的播放控制項。

圖2

然後在視窗中在添加3的控制項,在屬性視窗中將TrackBar1控制項的最大和最小值設定為100和0,因為media的音量範圍是0到100,我們用TrackBar1控制項來調整播放音量。Timer1的interval設定為1000。

圖3

現在可以輸入以下代碼了:

Code:
  1. Private Sub Button1_Click(ByVal sender As System.Object,    
  2. ByVal e As System.EventArgs) Handles Button1.Click   
  3.         '開啟和關閉所有光碟機倉門   
  4. Dim i   
  5. Dim k = AxWindowsMediaPlayer1.cdromCollection.count()   
  6. If k > 1 Then  
  7. For i = 0 To k - 1   
  8. AxWindowsMediaPlayer1.cdromCollection.Item(i).eject()   
  9. Next  
  10. Else  
  11. AxWindowsMediaPlayer1.cdromCollection.Item(0).eject()   
  12.   End If  
  13.  End Sub  
  14.  Private Sub Form1_Load(ByVal sender As Object,   
  15. ByVal e As System.EventArgs) Handles MyBase.Load   
  16.         '獲得電腦中有多少個光碟機和它們的盤符   
  17.  Dim i   
  18.  Dim cdlabel As String  
  19. Dim k = AxWindowsMediaPlayer1.cdromCollection.count()   
  20. If k > 1 Then  
  21.  For i = 0 To k - 1   
  22.  cdlabel = cdlabel &    
  23. AxWindowsMediaPlayer1.cdromCollection.Item(i).driveSpecifier()   
  24. Label1.Text = "這台電腦共有 " & k &    
  25. " 台CD-ROM" & "分別是" & cdlabel & " "  
  26.  Next  
  27. Else  
  28.  cdlabel = cdlabel +    
  29. AxWindowsMediaPlayer1.cdromCollection.Item(0).driveSpecifier()   
  30.  Label1.Text = "這台電腦共有 " & k &    
  31. " 台CD-ROM" & "分別是" & cdlabel & " "  
  32.         End If  
  33.     End Sub  
  34. Private Sub Button2_Click(ByVal sender As System.Object,   
  35.     ByVal e As System.EventArgs) Handles Button2.Click   
  36.         Dim strfilename As String  
  37.         Dim OpenFileDialog1 As System.Windows.Forms.OpenFileDialog =   
  38. New System.Windows.Forms.OpenFileDialog()   
  39.         OpenFileDialog1.ShowDialog()   
  40.         strfilename = OpenFileDialog1.FileName   
  41.         AxWindowsMediaPlayer1.URL = strfilename   
  42.     End Sub  
  43.     Private Sub Button3_Click(ByVal sender As System.Object,   
  44.     ByVal e As System.EventArgs) Handles Button3.Click   
  45.         AxWindowsMediaPlayer1.controls.play()'播放   
  46.     End Sub  
  47.     Private Sub Button5_Click(ByVal sender As System.Object,   
  48.     ByVal e As System.EventArgs) Handles Button5.Click   
  49.     AxWindowsMediaPlayer1.controls.stop()'停止   
  50.     End Sub  
  51. Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object,   
  52.  ByVal e As AxMicrosoft.MediaPlayer.Interop._WMPOCXEvents_PlayStateChangeEvent) Handles    
  53.  AxWindowsMediaPlayer1.PlayStateChange   
  54. '表示播放媒體發生變化時觸發此事件   
  55.         Label4.Text = "此檔案播放總時間是" &   
  56. AxWindowsMediaPlayer1.currentMedia.durationString   
  57.  Timer1.Enabled = True  
  58.  Label5.Text = "標題" &    
  59. AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Title", "", 0)   
  60. Label6.Text = "作者" &    
  61. AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Author", "", 0)   
  62.            End Sub  
  63.     Private Sub Button4_Click(ByVal sender As System.Object,   
  64.      ByVal e As System.EventArgs) Handles Button4.Click   
  65.         AxWindowsMediaPlayer1.controls.pause()'暫停   
  66.     End Sub  
  67.     Private Sub Timer1_Tick(ByVal sender As System.Object,   
  68.     ByVal e As System.EventArgs) Handles Timer1.Tick   
  69.         Label2.Text = "已經播放時間" &   
  70. CInt(AxWindowsMediaPlayer1.controls.currentPosition) & "秒"  
  71.     End Sub  
  72.  Private Sub TrackBar1_Scroll(ByVal sender As System.Object,   
  73.     ByVal e As System.EventArgs) Handles TrackBar1.Scroll   
  74.    AxWindowsMediaPlayer1.settings.volume = TrackBar1.Value'調整輸出音量   
  75. End Sub  

程式說明:當你按下F5開始編譯時間,系統會提示你有一個錯誤,這個錯誤就是在"Windows 表單設計器產生的程式碼"中的"Me.AxWindowsMediaPlayer1.enabled = True"這條語句引起的,其原因是media player 9.0的控制項與.net的相容問題,此問題已經得到微軟的證實,在下一版本中即vs2003.net將不會有此問題,在此版本中解決方案是將此代碼去掉即可。

文中使用的getItemInfoBytype屬性是用來讀取中繼資料的中的資訊(對於中繼資料的定義見sdk),這些資訊是在媒體建立時輸入進去的,但是這個屬性並不會在你編寫代碼時自動出現,有就是說不具備智能填充功能,其原因是media player 9.0控制項的某些新功能是通過介面發布的,而未在com類型庫中發布,所以不具備智能填充功能。不過你可以按照sdk給出的文法書寫,編譯器不會識別不出來的。程式中對檔案的播放時間的計算單位是秒,如果你感興趣可以將它轉換為mm:ss的格式。

運行4

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.