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:\WMSDK\WMPSDK9\ redist\wmppia.dll(regasm是.net提供的pia註冊程式,path是它的路徑,你可以用搜尋功能來找到它)。 

 各位別以為註冊了pia就可以編程了,你還得將它添加到全域緩衝中。在命令視窗中輸入:[path]Gacutil /i C:\WMSDK\WMPSDK9\redist\wmppia.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控制項來調整播放音量。T  imer1的interval設定為1000。

圖3

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

Private Sub Button1_Click(ByVal sender As System.Object,
  ByVal e As System.EventArgs) Handles Button1.Click
        '開啟和關閉所有光碟機倉門
        Dim i
        Dim k = AxWindowsMediaPlayer1.cdromCollection.count()
        If k > 1 Then
            For i = 0 To k - 1
                AxWindowsMediaPlayer1.cdromCollection.Item(i).eject()
            Next
        Else
            AxWindowsMediaPlayer1.cdromCollection.Item(0).eject()
        End If
    End Sub
 Private Sub Form1_Load(ByVal sender As Object,
      ByVal e As System.EventArgs) Handles MyBase.Load
        '獲得電腦中有多少個光碟機和它們的盤符
        Dim i
        Dim cdlabel As String
        Dim k = AxWindowsMediaPlayer1.cdromCollection.count()
        If k > 1 Then
            For i = 0 To k - 1
                cdlabel = cdlabel &
    AxWindowsMediaPlayer1.cdromCollection.Item(i).driveSpecifier()
                Label1.Text = "這台電腦共有 " & k &
    " 台CD-ROM" & "分別是" & cdlabel & " "
            Next
        Else
            cdlabel = cdlabel +
       AxWindowsMediaPlayer1.cdromCollection.Item(0).driveSpecifier()
            Label1.Text = "這台電腦共有 " & k &
       " 台CD-ROM" & "分別是" & cdlabel & " "
        End If
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object,
      ByVal e As System.EventArgs) Handles Button2.Click
        Dim strfilename As String
        Dim OpenFileDialog1 As System.Windows.Forms.OpenFileDialog =
   New System.Windows.Forms.OpenFileDialog()
        OpenFileDialog1.ShowDialog()
        strfilename = OpenFileDialog1.FileName
        AxWindowsMediaPlayer1.URL = strfilename
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Button3.Click
        AxWindowsMediaPlayer1.controls.play()'播放
    End Sub
    Private Sub Button5_Click(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Button5.Click
        AxWindowsMediaPlayer1.controls.stop()'停止
    End Sub
Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object,
 ByVal e As AxMicrosoft.MediaPlayer.Interop._WMPOCXEvents_PlayStateChangeEvent) Handles
   AxWindowsMediaPlayer1.PlayStateChange
'表示播放媒體發生變化時觸發此事件
        Label4.Text = "此檔案播放總時間是" &
     AxWindowsMediaPlayer1.currentMedia.durationString
        Timer1.Enabled = True
        Label5.Text = "標題" &
    AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Title", "", 0)
        Label6.Text = "作者" &
    AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Author", "", 0)
           End Sub
    Private Sub Button4_Click(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Button4.Click
        AxWindowsMediaPlayer1.controls.pause()'暫停
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Timer1.Tick
        Label2.Text = "已經播放時間" &
   CInt(AxWindowsMediaPlayer1.controls.currentPosition) & "秒"
    End Sub
    Private Sub TrackBar1_Scroll(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles TrackBar1.Scroll
        AxWindowsMediaPlayer1.settings.volume = TrackBar1.Value'調整輸出音量
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

圖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.