程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 單元八 多媒體處理

單元八 多媒體處理

編輯:.NET實例教程

單元八 多媒體處理
[學習目標] 熟悉VB.Net開發多媒體應用程序的流程。掌握多媒體控件的常用屬性、事件和方法。熟悉多媒體應用程序的設計技巧。
多媒體技術在現代程序設計中有著廣泛的應用,多媒體應用也是當前計算機的一個非常重要的應用,如影音播放、多媒體教學、工程演示等諸多方面。本章介紹了幾種常見多媒體播放軟件的開發實例,以期給讀者有益的啟示。
8.1 MP3播放器
【案例8-1】MP3播放器
MP3是目前最為流行的多媒體格式之一。它是將WAV文件以MPEG2的多媒體標准進行壓縮,壓縮後體積只有原來的1/10至1/15,而音質基本不變。這項技術使得一張碟片上就能容納十多個小時的音樂節目,相當於原來的十多張CD唱片。MP3也是網絡上非常流行的一種音樂格式。
MP3不是Windows的標准格式,因此Windows並不直接支持此類型的文件,本案例使用AxWindowsMediaPlayer控件實現MP3音樂的播放。播放器運行界面如圖8-1所示。在本案例中,單擊"添加"按鈕可一次添加多個MP3文件作為播放列表存放在ListVIEw控件中,雙擊列表中的曲目可以刪除之,還可以再按"添加"按鈕新增文件到列表中,並設置了播放時間與進度、曲名、快進、後退和暫停,退出、狀態欄等功能。
 
圖8-1 MP3播放器運行界面
[技能目標]
1.使用AxWindowsMediaPlayer控件播放MP3音樂
2.獲取當前播放時間與進度
3.添加和刪除播放文件
[操作要點與步驟]
1.建立一個新的Windows應用程序,命名為vbnet8-1。
2.在窗體上添加如下控件:2個Label 控件,一個TrackBar 控件,6個Button控件,1個ListVIEw控件,一個StatusBar控件,一個OpenFileDialog控件和一個Timer控件。調整控件大小及位置。
 
AxWindowsMediaPlayer不是VB.Net的標准控件,必須先添加到工具箱。添加AxWindowsMediaPlayer控件方法如下:
在工具箱上右擊鼠標,在彈出的菜單中選擇"添加/移出項…",在彈出的自定義工具箱的COM組件選項卡對話框中選中Windows Media Player復選框,然後確定,AxWindowsMediaPlayer就添加到工具箱中了。如圖8-2所示。
 
圖8-2 添加AxWindowsMediaPlayer控件
3.在"屬性"窗口中設置窗體及各控件的相關屬性,控件的部分屬性設置如表8-1。
表8-1 控件屬性設置
控件類別 控件名稱 屬性 設置結果
Form Form1 Text Vbnet8-1
Button Button1 Text 暫停
 Button2 Text 添加
 Button3 Text 播放
 Button4 Text 向前
 Button5 Text 向後
 Button6 Text 退出
Label Label1 Text 00:00]長度:00分00秒
  TextAlign MiddleCenter
 Label2 Text 
  TextAlign MiddleCenter
TrackBar TrackBar1  
ListView ListView1 VIEw  Details
 ColumnHeader1 Text 序號
  TextAlign Left
 ColumnHeader2 Text 歌曲名
  TextAlign Center
 ColumnHeader3 Text 路徑
  TextAlign Center
AxWindowsMediaPlayer AxWindowsMediaPlayer1 Visible False
 
沒有設置屬性的控件及所有屬性均為默認值。上表中的ColumnHeader1是添加Column屬性後的設置,這種設置方法在前面的章節中介紹過。
 
4.以上三步完成了界面設計,現開始編寫代碼。


(1)首先在Form1類裡定義幾個變量,代碼如下:
Dim paths() As String        '定義打開文件路徑數組
Dim FileName As String       '定義文件名稱
Dim SingName As String       '定義歌曲名稱
Dim i As Integer
Dim selIndex As Integer  
Dim path As String
(2)為Form1_Load()事件中添加如下代碼,對控件初始化。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       .ListVIEw1.FullRowSelect = True  '可以整行選取
       .ListVIEw1.MultiSelect = True    '可以選取多項
       .ListVIEw1.HoverSelection = True  '鼠標懸在上面一段時間即表示選取該項
       .Button3.Enabled = False
End Sub
(3)為"添加"命令按鈕添加代碼,啟動打開文件對話框,可以一次向ListVIEw1控件中添加多個MP3文件,並顯示播放順序,歌曲名和歌曲所在路徑,代碼如下。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles Button2.Click
        Dim sfile As String  '定義歌曲名稱
        Dim j As Integer    '定義循環變量
        Dim count As Integer  '定義已有歌曲數目
        With .OpenFileDialog1  '打開新文件
            .Title = "打開mp3文件"
            .CheckFileExists = True
            .CheckPathExists = True
            .Multiselect = True
            .Filter = "mp3文件(*.mp3)|*.mp3"
            .ShowDialog()
            paths = .FileNames
        End With
            i = paths.GetUpperBound(0)  '獲取此次打開的文件數目
            For j = 0 To i
            count = .ListVIEw1.Items.Count   '獲取現有文件數目
            sfile = paths(i - j).Substring(paths(j).LastIndexOf("\") + 1)  '獲取歌曲名稱
            Dim mitem As New ListVIEwItem(count + 1, j)
            mitem.SubItems.Add(sfile)
            mitem.SubItems.Add(paths(i - j))
           .ListVIEw1.Items.Add(mitem)  '把新打開的文件添加到列表控件中
           .Button3.Enabled = True
        Next
End Sub
(4)為"播放"、"暫停"、"退出"、"向前"、"向後"命令按鈕添加代碼,用來控制音樂的播放,代碼如下。
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles Button3.Click
        .AxWindowsMediaPlayer1.URL = Path  '設置播放文件
        .AxWindowsMediaPlayer1.Ctlcontrols.play()  '開始播放
        Label2.Text = FileName
        .Button2.Enabled = True
        Dim s1, s2 As Integer
        s1 = .AxWindowsMediaPlayer1.currentMedia.duration
        s2 = .AxWindowsMediaPlayer1.Ctlcontrols.currentPosition
        End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles_ Button1.Click
        AxWindowsMediaPlayer1.Ctlcontrols.pause() '暫停'
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles Button6.Click
        Close()
        End  

'退出程序
 End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
Handles Button4.Click
       AxWindowsMediaPlayer1.Ctlcontrols. fastForward () '向前
        End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles Button5.Click
      AxWindowsMediaPlayer1.Ctlcontrols.fastReverse() '向後
    End Sub  

(5)為Timer控件添加代碼,主要獲得當前播放進度,代碼如下。
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)_
 Handles Timer1.Tick
        Dim d1, d2 As Integer
        Dim m1, m2 As Integer
        Dim s1, s2 As Integer
        d1 =AxWindowsMediaPlayer1.Ctlcontrols.currentPosition  '獲取當前播放進度
        d2 =AxWindowsMediaPlayer1.currentMedia.duration     '獲取需要的總時間
        .TrackBar1.Value = d1
        m1 = d1 \ 60 : s1 = d1 Mod 60
        m2 = d2 \ 60 : s2 = d2 Mod 60
        Label1.Text = "已播放 " & m1 & ":" & Format(s1, "00") & _
            " ( " & m2 & ":" & Format(s2, "00") & " )"        '顯示播放進度
    End Sub
 
使用.Duration和.CurrentPosition方法分別獲取播放該首音樂需要的時間和當前的播放進度。
 
(6)為ListVIEw1 控件的雙擊事件添加代碼,當雙擊選擇的項時,則表示刪除選取的該項,代碼如下。
Private Sub ListVIEw1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles ListVIEw1.DoubleClick
       ListVIEw1.SelectedItems.Item(0).Remove()   '雙擊表示刪除該項
      End Sub
 
使用.Remove方法,可以將所選擇的項移除。


 
(7)為ListVIEw1控件的單擊事件添加代碼,當單擊選擇項時,則停止當前的播放而播放剛選取的文件,代碼如下。
Private Sub ListVIEw1_Click(ByVal sender As Object, ByVal e As System.EventArgs)_
                    Handles ListVIEw1.Click
        Dim str As String
        selIndex = .ListVIEw1.SelectedItems(0).Text - 1
        FileName = .ListVIEw1.SelectedItems.Item(0).SubItems(1).Text  '獲取歌曲名稱
        path = .ListVIEw1.SelectedItems.Item(0).SubItems(2).Text    '獲取歌曲路徑
        AxWindowsMediaPlayer1.URL = path          '設置播放文件
        AxWindowsMediaPlayer1.Ctlcontrols.play()     '開始播放
        Label2.Text = FileName
        Timer1.Enabled = True
        .Button2.Enabled = True
        Dim s1, s2 As Integer
        s1 =AxWindowsMediaPlayer1.Ctlcontrols.Duration
        s2 =AxWindowsMediaPlayer1.Ctlcontrols.currentPosition
        str = FileNa.Substring(FileNa.LastIndexOf("."))
        FileName = FileNa.Remove(FileNa.Length - _
        str.Length, str.Length)
        Label2.Text = FileName   '對字符串進行處理,僅獲取無後綴歌曲名
      End Sub
至此,程序編寫完成,按F5鍵或工具欄上的運行按鈕運行,添加mp3文件,便可播放了。
[相關知識]
VB.Net的多媒體編程技術中,AxWindowsMediaPlayer是常用的控件。AxWindowsMediaPlayer是Windows Media Player 9.0中的ActiveX 控件,使用之前要求系統中已安裝這個多媒體播放器。此控件的添加已在前面介紹,以下是幾個常用屬性和方法。
 1. URL屬性
用來指定所要播放的多媒體文件路徑與文件名。因在窗體上所建立的控件有操作面板,面板上有播放、停止、暫停等按鈕,故只要URL屬性有指定的多媒體文件的路徑與文件名,就能播放使用。屬性值的指定方法有如下兩種:
(1)通過AxWindowsMediaPlayer控件的屬性窗口,在URL屬性欄中直接輸入多媒體文件的路徑與文件名。

如:
輸入"D:\VB.Net\媒體文件\cure.wav"
(2)通過代碼在程序中指定,即將多媒體文件的路徑與文件名以字符串類型指定給URL屬性。如:
AxWindowsMediaPlayer1.URL="D:\VB.Net\媒體文件\cure.wav"
 
在VB.Net中多媒體控件名稱為AxWindowsMediaPlayer,與VB6.0中的AxMediaPlayer不同,另外屬性URL在VB6.0中是Filename。
 
2. Ctlcontrols屬性
Ctlcontrols屬性是AxWindowsMediaPlayer的一個重要屬性, 此控件中有許多常用成員。
(1) 方法play
用於播放多媒體文件,其格式為:
窗體名.控件名.Ctlcontrols.play()
如: AxWindowsMediaPlayer1.Ctlcontrols.play()  '此處缺省窗體名是Me
(2) 方法pause
用於暫停正在播放的多媒體文件,其格式為:
窗體名.控件名.Ctlcontrols.pause()
如: AxWindowsMediaPlayer1.Ctlcontrols.pause()
(3) 方法stop
用於停止正在播放的多媒體文件,其格式為:
窗體名.控件名.Ctlcontrols.stop()
如: AxWindowsMediaPlayer1.Ctlcontrols.stop()
(4) 方法fastforward
用於將正在播放的多媒體文件快進,其格式為:
窗體名.控件名.Ctlcontrols.fastforward()
如: AxWindowsMediaPlayer1.Ctlcontrols.forward()
(5) 方法fastreverse
窗體名.控件名.Ctlcontrols.fastreverse()
如: AxWindowsMediaPlayer1.Ctlcontrols.fastreverse()
6. 屬性CurrentPosition
用於獲取多媒體文件當前的播放進度,其值是數值類型,使用格式為:
窗體名.控件名.Ctlcontrols.currentPosition
d1 =AxWindowsMediaPlayer1.Ctlcontrols.currentPosition
其中d1 是一個整型變量。
7. 屬性Duration
用於獲取當前多媒體文件的播放的總時間,其值為數值類型,其使用格式為:
窗體名.控件名.currentMedia.duration
如:d2 =AxWindowsMediaPlayer1.currentMedia.duration
其中d2是一個整型變量。

TrackBar是個滾動條類的控件,不過左右兩端沒有箭頭。控件的主要屬性及功能如表8-2如所示。
表8-2 TrackBar主要屬性與說明
屬性 說明
SmallChange 設置或取得按下鍵盤方向鍵時,每按一次移動滑塊的距離數值,這種方式為細調,默認值為1。
LargeChange 按下鍵盤PgUp、PgDn所改變的值,或拖動滑塊所改變的值,這種方式為粗調,默認值為5。
TickFrequency 設置TrackBar控件中滑塊刻度間的距離。
Maximum 設置或獲取TrackBar控件的最大值,默認值為10。
Minimum 設置或獲取TrackBar控件的最小值,默認值0。
Value TrackBar上滑塊目前所在位置的值
OrIEntation 設置TrackBar控件是呈水平或垂直顯示。其值為"Horizontal"時水平顯示,為"Vertical"時垂直顯示。
TickStyle TrackBar上刻度所出現的位置,有四種情況,如圖8-3所示。


圖8-3 TrackBar刻度位置
在本案例中,TrackBar和Timer兩個控件聯合起來以獲得文件播放進度。其他控件在前面的章節中已作過介紹,在此不再介紹。
[要點分析]
1. 本案例是播放mp3文件,所以在打開文件時,使用了語句OpenFileDialog1.Filter = "mp3文件(*.mp3)|*.mp3" 。
2. 本案例播放的是聲音文件,因些AxWindowsMediaPlayer控件的Visible屬性值設置為False,即播放控件不可見。
8.2 視頻播放器
【案例8-2】多媒體播放器
本案例是使用AxWindowsMediaPlayer控件制作的簡易視頻播放器,它具有比較強大的功能,可以控制播放的狀態,如播放、暫停和停止,可以調節播放的音量,可以顯示已播放時間,可全屏播放也可在窗口中播放,可測試系統中光驅個數與盤符,打開和關閉光驅倉門,顯示播放文件名稱及當前系統時間等。程序運行界面如圖8-5所示。
 
圖8-5 視頻播放器運行界面
[技能目標]
1. 使用AxWiondowsMediaPlayer控件播放多媒體音影文件
2. 使用TrackBar 控件調節播放音量
3. 獲取計算機系統光驅信息
4. 利用軟件實現光驅倉門的打開和關閉的方法
[操作要點與步驟]
1.建立一個新的Windows應用程序項目,項目名為vbnet8-2。
2.在窗體上添加控件:一個AxWinodowMediaPlayer控件,一個OpenFileDialog控件,一個Timer時間控件,五個Button命令按鈕,四個Label標簽控件,一個TrackBar控件,一個StatusBar 控件。調整各控件的位置及大小。
3.在"屬性"窗口中設置窗體及各控件的相關屬性,控件屬性設置如表8-2。
表8-2 各控件屬性設置結果
控件類別 控件名稱 屬性 設置結果
Form Form1 Text Vbnet8-2
Button Button1 Text 播放
 Button2 Text 暫停
 Button3 Text 停止
 Button4 Text 打開文件
 Button5 Text 打開和關閉光驅倉門
Label Label1 Text 文件信息
 Label2 Text 曲名
 Label3 Text 
 Label4 Text 
AxWindowsMediaPlayer AxWindowsMediaPlayer1 fullScreen True
  uiMode None


沒有設置屬性的控件及所有屬性均為默認值。
 
4.以上三步完成了界面設計,現開始編寫代碼。
(1)首先在Form1的Load事件編寫代碼,獲得本機的光驅信息,代碼如下。
  Private Sub form1_Load(ByVal sender As System.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()
                Label3.Text = "這台計算機共有 " & k & _
    " 台CD-ROM" & "分別是" & cdlabel & " "
            Next
        Else
            cdlabel = cdlabel + _
            AxWindowsMediaPlayer1.cdromCollection.Item(0).driveSpecifIEr()
/>            Label3.Text = "這台計算機共有 " & k & _
       " 台CD-ROM" & "分別是" & cdlabel & " "
        End If
    End Sub
(2)為"打開文件"按鈕編添加代碼,打開多媒體影視文件,並將打開的文件作為播放的文件,代碼如下。
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                    Handles Button4.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
(3)為"播放"、"暫停"、"停止"按鈕添加代碼,以控制播放影視文件過程,代碼如下。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                   Handles Button1.Click
        AxWindowsMediaPlayer1.Ctlcontrols.play() '播放
    End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                     Handles Button2.Click
        AxWindowsMediaPlayer1.Ctlcontrols.pause() '暫停
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                    Handles Button3.Click
        AxWindowsMediaPlayer1.Ctlcontrols.stop() '停止
    End Sub
(4)為AxWindowsMediaPlayer1控件的PlayStateChange事件添加代碼,以獲取當前播放文件的名稱及總的播放時間信息,代碼如下。
Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e _
        As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles _
             AxWindowsMediaPlayer1.PlayStateChange
        '表示播放媒體發生變化時觸發此事件
        Label4.Text = "此文件播放總時間是" & _
        AxWindowsMediaPlayer1.currentMedia.durationString()
        Timer1.Enabled = True
        Label2.Text = "歌名:" & _
        AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Title", "", 0)
  End Sub
(5)為Timer控件的Tick事件添加代碼,以獲取當前文件已播放時間和在狀態欄上顯示當前系統時間信息,代碼如下。
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                  Handles Timer1.Tick
        Label4.Text = "已經播放時間:" & _
   CInt(AxWindowsMediaPlayer1.Ctlcontrols.currentPosition) & "秒"
        StatusBar1.Panels(5).Text = Now
    End Sub
(6)為TrackBar1控件添加代碼,以調整播放影視文件時的音量,代碼如下:
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 Media Player播放器不僅可播放mp3文件,而且還可以播放cd,vcd,avi等多種音像文件。多媒體控件AxWindowsMediaPlayer添加方法及常用屬性在上面案例中已說明,在此僅做相關補充。
1. CdromCollection屬性
功能:獲取系統中光驅信息。
2. Count屬性
功能:獲取系統中光驅數目
例如:k = AxWindowsMediaPlayer1.CdromCollection.Count()
獲取系統中光驅數,其值存放於整型變量k中。
3. Item方法或程序
功能:獲取光驅在系統中的編號,此編號從0開始。
4. DriveSpecifIEr屬性
功能:獲取光驅的盤符。
例如:
Cdlabel = AxWindowsMediaPlayer1.CdromCollection.Item(i).DriveSpecifIEr()
其作用是:把系統中第i個光驅的盤符字符串賦值給變量cdlabel。
5. Eject方法
功能:用於打開或關閉光驅倉門。
例如:
AxWindowsMediaPlayer1.CdromCollection.Item(i).Eject()  '打開或關閉第i個光驅倉門
6. Volume屬性
功能:設置播放時的音量。
例如:AxWindowsMediaPlayer1.Settings.Volume = TrackBar1.Value
其作用是:調整播放音量為TrackBar1控件所指示的音量值。
7. AutoStart屬性
功能:自動播放,其默認值為True。
若其值設置為True,當AxWindowsMediaPlayer控件中添加多媒體文件時,無須按播放按鈕便會自動播放;若其值設置為False,則添加多媒體文件時,必須要按播放按鈕才會播放。
例如:AxWindowsMediaPlayer1.Setting.AutoStart=False
8. Mute屬性
功能:設置播放時是否靜音,其默認值為False。
若其值為True,則AxWindowsMediaPlayer控件在播放媒體文件時,會是靜音狀態;若其值為False,則播放媒體文件時有聲音。
9. UiMode屬性
功能:設置播放時是否顯示播放器原來的控制按鈕和進度滑塊及音量調節等。若其值為None,則不顯示;若為Full,則顯示。
1. OpenFileDialog控件
在案例8-2中,當單擊"打開文件"按鈕時,用於啟動打開文件對話框,以選擇要打開的多媒體文件。此多媒體播放器可以播放任何Windows Media Player可播放的文件,程序中無須用Filter屬性設置文件過濾器。
2. TrackBar控件
案例中使用TrackBar調節播放音量。用鼠標拖動TrackBar上的滑塊,即可調增加或減小播放音量。其實現由以下語句完成:
AxWindowsMediaPlayer1.Settings.Volume = TrackBar1.Value。
3. Timer控件
觸發Timer的事件是Tick,以獲取當前播放的多媒體文件已播放時間,另外在狀態欄上顯示系統的當前時間。其實現格式是:
AxWindowsMediaPlayer1.Ctlcontrols.currentPosition '已播放時間
StatusBar1.Panels(5).Text = Now      '在狀態欄的Panel(5)中顯示當前系統時間
4. Label控件
案例中的Label標簽控件用於顯示與正播放的多媒體文件相關的信息,如曲名、已播放時間、光驅信息等。主要是在程序中通過改變Label控件的Text屬性實現。
例如:
Label4.Text = "已經播放時間:" &  _ CInt(AxWindowsMediaPlayer1.Ctlcontrols.currentPosition) & "秒"
8.3 Flash播放器
【案例8-3】Flash播放器
Flash動畫十分流行,發展很快,但有時下載了一些動畫也無法播放,這需在計算機系統中安裝一個Flash動畫播放器。本案例是一個簡易的動畫播放器,可打開Flash文檔並播放,也可暫停、繼續播放和退出操作,並且能顯示當前播放時間和進度指示。其運行界面如圖8-6所示。
 
圖8-6 Flash 播放器運行界面
[技能目標]
1.AxShockwaveFlash控件的添加與使用

r />2.菜單控制播放的方法
3.播放進度指示的實現
[操作要點與步驟]
1.建立一個新的Windows應用程序項目,項目名為vbnet8-3。
2.在窗體上添加控件:一個AxShockwaveFlash控件,一個mainmenu控件,一個TrackBar控件,一個Label標簽控件,一個StatusBar 控件,一個OpenFileDialog控件,一個Timer時間控件。調整各控件的位置及尺寸。
 
AxshockwaveFlash控件的添加方法與AxWindowsMediaPlayer控件添加方法相似。在自定義工具箱對話框的COM組件選項卡中,選中Shockwave Flash Object復選框,該控件就添加到工具箱中了,如圖8-7所示。
 
圖8-7 添加AxShockwaveFlash 控件
3. 設置各控件屬性值,如表8-3所示。
表8-3 控件屬性設置
控件類型 控件名 控件屬性 屬性值
Form Form1 Text Vbnet8-3
Mainmenu Mainmenu1 RighttoLeft Inherit
 MenuItem1 Text 文件
 MenuItem2 Text 打開
 MenuItem3 Text 退出
 MenuItem4 Text 控制
 MenuItem5 Text 停止播放
 MenuItem6 Text 繼續播放
TrackBar TrackBar1 Minmum 0
  Maximum 10
Label Label1 Text 播放進度
AxShockwaveFlash AxShockwaveFlash1 BackGroundColor 0
  Dock None


沒有設置屬性的控件及所有屬性均為默認值。上表中的StatusBarPanel是StatusBar1控件中添加Panel屬性後的設置。
 
4. 為控件添加代碼。
(1)在Form1類中定義變量,代碼如下。
Dim PathNames() As String
'定義文件路徑數組
Dim count As Integer
'定義打開多文件的文件數目
Dim i As Integer
(2)為"文件"菜單的"打開"子菜單添加代碼,可選擇打開多個.swf文件,播放文件並顯示播放進度,代碼如下。
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                        Handles MenuItem2.Click
        With .OpenFileDialog1
            .Title = "打開Flash動畫文件"
            .CheckFileExists = True
            .CheckPathExists = True
            .Multiselect = True
            '支持多選
            .Filter = "Flash動畫(*.swf)|*.swf"
            .ShowDialog()
            PathNames = .FileNames
        End With
        If PathNames Is Nothing Then
            Exit Sub
        End If
       .AxShockwaveFlash1.MovIE = PathNames(count)
        '設置播放的文件路徑
        .TrackBar1.Maximum = .AxShockwaveFlash1.TotalFrames
        .AxShockwaveFlash1.Play()
        '開始播放
        .AxShockwaveFlash1.Loop = True
        .Timer1.Enabled = True
    End Sub
(3)為"停止播放"、"繼續播放"、"退出"子菜單添加代碼,以控制動畫播放過程,代碼如下。
Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                        Handles MenuItem5.Click
        '停止播放
        .AxShockwaveFlash1.Stop()
    End Sub

 Private Sub MenuItem6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                         Handles MenuItem6.Click
        .AxShockwaveFlash1.Play()
        '繼續播放
    End Sub

 Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                         Handles MenuItem3.Click
        '退出
  &nbs

p;     End
    End Sub
(4)為Time1的Tick事件添加代碼,以獲取當前播放進度,代碼如下:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                  Handles Timer1.Tick
        .TrackBar1.Value = .AxShockwaveFlash1.CurrentFrame
        '獲取當前進度
        .Label1.Text = "已播放百分比:" & _
        .TrackBar1.Value * 100 \ _
        .TrackBar1.Maximum + 1 & "%"
        '獲取當前進度的百分比
    End Sub
至此,代碼編寫完成,按F5運行,得到如前界面。
[相關知識]
在VB.NET中,不僅可以使用無比豐富的.Net類庫,而且還可以使用系統中安裝的COM組件。AxShockwaveFlash控件可實現在窗體中播放指定的Flash動畫。該組件在系統安裝時自動安裝在系統中,其常用的屬性和方法如下。
1. MovIE屬性
功能:指定播放的.swf格式文件。
例如: AxShockwaveFlash1.MovIE = PathNames(count)
2. TotalFrame屬性
功能:獲取播放文件的總幀數。
例如: TrackBar1.Maximum =AxShockwaveFlash1.TotalFrames
3. CurrentFrame屬性
功能:獲取播放文件的當前幀。
例如: TrackBar1.Value = AxShockwaveFlash1.CurrentFrame
4. isPlaying屬性
功能:判斷是否正在播放。
5. Play方法
功能:開始播放文件。
例如: AxShockwaveFlash1.Play()
6. Back方法
功能:跳到動畫的上一幀。
例如: AxShockwaveFlash1.Back()
7. Forward方法
功能:跳到動畫的下一幀。
例如: AxShockwaveFlash1.Forward()
8.GotoFrame方法
功能:跳到動畫指定的幀。
9. Stop方法
功能:暫停播放動畫文件。
例如: AxShockwaveFlash1.Stop()
10. Loop屬性
功能:是否循環播放。如果其值為True,則循環播放;若其值為False,則不循環播放。
例如: AxShockwaveFlash1.Loop = True  '循環播放
8.4 DVD播放器
【案例8-3】DVD播放器
在多媒體領域,最熱門、最"終極"的就要算DVD了。DVD全面實現了MPEG2的性能指標,它的水平清晰度高達540線,比LD還64高出一大截;其聲音也采用了真正5.1通道(左右主音箱、中量、後方左右環繞及一路超重低音輸出)。不過要注意的是,這些優異的視聽效果是源於MPEG2的技術標准,而不是DVD技術本身。只不過采用MTG2的多媒體文件體積太過巨大,普通的CD碟已無法容納,而DVD技術的超高容量恰好與之相得益彰。目前最低容量(單面單層的DVD碟片容量是4.7G)可播放133分鐘,正好包括一部完整的故事片。
DVD是一種高質量的視頻壓縮技術 視頻的壓縮需要通過一定的編碼的。計算機系統中安裝了DVD解碼器後,Windows Media Player直接用於播放DVD。利用VB.Net的COM組件中的AxMSWebDVD控件等可開發功能強大的DVD播放器。
本案例是用VB.Net開發的簡易DVD播放器,具有播放、暫停、停止、彈出等功能。其運行界面如圖8-8所示。
 
圖8-8 DVD播放器運行界面
[技能目標]
1. AxMSWebDVD控件的使用
2. DVD播放器的系統環境
[操作要點與步驟]
1. 新建Windows應用程序項目,項目名為Vbnet8-4。
2. 在窗體中添加控件:一個AxMSWebDVD控件,四個Button命令按鈕控件,一個StatusBar控件。
 
AxMSWebDVD控件的添加方法與AxWindowsMediaPlayer控件添加方法相似。在自定義工具箱對話框的COM組件選項卡中,選中MSWebDVD Class復選框,該控件就添加到工具箱中了,如圖8-8所示。
 
 
圖8-8添加AxMSWebDVD 控件
3. 為窗體中的控件設置屬性值。各控件的屬性設置如表8-4所示.
表8-4 控件屬性設置結果
控件類型 控件名稱 屬性 屬性設置
Form Form1 Text Vbnet8-4
AxMSWebDVD AxMSWebDVD1 Dock None
  Visible True
Button Button1 Text 播放
 Button2 Text 暫停
 Button3 Text 停止
 Button4 Text 彈出
4. 至此,界面設計完成,以下編寫程序代碼。
(1)首先在Form1_Load()中設置各按鈕的狀態,"播放"是有效狀態,用於啟動DVD播放文件,其它幾個處於無效狀態。代碼如下。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                    Handles MyBase.Load
        Button1.Enabled = True
        Button2.Enabled = False
        Button3.Enabled = False
        Button4.Enabled = False
    End Sub
(2)為"播放"按鈕添加代碼。單擊"播放"按鈕,開始播放DVD光驅中的碟片,此時"暫停"、"停止"變為有效狀態,"播放"、"彈出"按鈕變為無效。代碼如下。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                    Handles Button1.Click
        AxMSWebDVD1.Play()
        Button2.Enabled = True
        Button3.Enabled = True
        Button1.Enabled = False
        Button4.Enabled = False
    End Sub
(3)為"暫停"按鈕添加代碼。單擊"暫停"按鈕,暫停播放,此時"播放"、"停止"變為有效狀態,"彈出"為無效狀態。單擊"播放"按鈕時,繼續播放。代碼如下。


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                     Handles Button2.Click
        AxMSWebDVD1.Pause()
        Button1.Enabled = True
        Button3.Enabled = True
        Button4.Enabled = False
    End Sub

(4)為"停止"按鈕添加代碼。單擊"停止"按鈕,停止播放,"暫停"處於無效狀態,"播放"和"彈出"處於有效狀態。代碼如下。
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
               ;      Handles Button3.Click
        AxMSWebDVD1.Stop()
        Button2.Enabled = False
        Button1.Enabled = True
        Button4.Enabled = True
    End Sub

(5)為"彈出"按鈕添加代碼。單擊"彈出"按鈕,打開光驅倉門,同時"播放"、"暫停"、"停止"按鈕的狀態變為無效。代碼如下。
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
                Handles Button4.Click
        AxMSWebDVD1.Eject()
        Button1.Enabled = False
        Button2.Enabled = False
        Button3.Enabled = False
    End Sub
至此代碼添加完成,按F5或工具欄的運行按鈕就可運行程序了。
[相關知識]
在VB.Net的工具箱中,通過快捷菜單中"添加/移除項…"添加AxMSWebDVD控件,它是制作DVD播放器所需要的。其常用屬性和方法如表8-5所示。
表8-5 AxMsWebDVD控件的屬性和方法
屬性和方法 說明
Anchor屬性 控件的定位點。定位點定義控件綁定到容器的哪些邊
Dock屬性 控件的停靠點。指示停靠到容器的哪些邊
Locked屬性 確定控件能否移動和改變大小
Visible屬性 確定控件是否可見
mute屬性 指定播放是否消音
Play方法 播放DVD
Pause方法 暫停播放
Stop方法 停止播放

r />Eject方法 彈出DVD光驅倉門
 [要點分析]
DVD是一種高質量的視頻壓縮技術 視頻的壓縮需要通過一定的編碼的。計算機系統中安裝了DVD解碼器後,Windows Media Player直接用於播放DVD。利用VB.Net的COM組件中的AxMSWebDVD控件等可開發功能強大的DVD播放器。
本案例程序設計比較簡單,通過按鈕控制文件的播放、暫停、停止和光驅倉門的打開。在設計過程中要注意各按鈕的狀態是否有效,以免發生錯誤。
[知識擴展]
1. API函數sndPlaySoundA
(1) 自定義函數可播放音頻文件函數--sndPlay
在Windows XP的winmm.dll動態鏈接庫存(DLL)中有一個播放音頻文件的API函數sndPlaySoundA,它可用來播放*.WAV音頻文件.但VB.Net要使用它時,需先自定義函數,再調用使用。
①聲明
Private Declare Function sndPlay Lib "winmm.dll" Alias "sndPlyaSoundA" (ByVal sndName As String,Byval flags As Long) As Long
l 所聲明的sndPlay函數取自winmm.dll的sndPlaySoundA函數,要在窗體或模塊的聲明區聲明。
l 所聲明的sndPlay函數有兩個參數,第一個參數sndName為字符串類型數據;第二個參數flags 為長整型數據。
②調用
在程序代碼中調用sndPlay函數來播放.wav音頻文件的語法如下:
ret=sndPlay("文件名.wav",flags)
l flags自變量:指定播放音頻文件的方式,如表8-6
表8-6 flags參數的值及播放方式對應表
Flags 播放方式
0 一定要等音頻文件播放完畢後,程序才能繼續運行
1 可一邊播放音頻文件,一邊運行程序
2 設置當所指定的音頻文件不存在時,不會出現Windows 的警告聲音,否則會出現警告聲音。
4 可先將音頻文件加載到字符串自變量sndName中,當需要播放時,再用flags=4來播放字符串參數sndName內的聲音數據,可避免讀取音頻文件時造成的延遲現象。
8 可將音頻文件當作背景音樂循環播放,但flags同時也要設置為1,即合並使用flags自變量值:flags=1+8=9
16 如果正在播放所指定的音頻文件,則返回函數原調用處
l Ret為調用sndPlay函數的返回值:
若返回為0表示失敗;返回為1表示成功。
l 如果返回值可忽略,可使用下列方法調用sndPlay函數:
Call sndPlay("文件名.wav",flags)
或sndPlay("文件名.wav",flags)
(2) 自定義停止播放音頻文件函數--sndStop
wav音頻文件一經播放,一定要到完畢。若flags=9,則會一直重復播放而不會停止,除非再一次調用sndPlay函數(flags參數不能再設為9或8),但必須再播放一次函數所指定的音頻文件。用下列方式處理,可立即停止播放。
①聲明
Private Declare Function sndStop Lib "winmm.dll" Alias_ "sndPlaySoundA"(ByVal_ NUL As String, ByVal Uflags As Long) As Long
l 所聲明的sndStop函數取自winmm.dll的sndPlaySoundA函數,一樣要在窗體或模塊的聲明定義。
l 所聲明的sndStop函數有兩個參數,皆為長整型數據。
②調用
當程序正在播放wav音頻文件時,用下列方法調用sndStop可停止播放。
Call sndStop(0,0)
或: sndStop(0,0)
2. API函數mciSendStringA
(1)  自定義可播放多媒體文件的函數--mciSend
在Windows XP的動態鏈接庫(DLL)中,API函數mciSendStringA可播放*.wav、*.midi……等多媒體文件。但在VB.Net中要使用時,必須先聲明自定義函數再調用。
①聲明
Private Declare Function mciSend Lib "winmm.dll" Alias_ "sndSendStringA"_
(ByVal Command As String, ByVal ReturnString As String, ByVal ReturnLength_
 As Long,ByVal Callback As Long) As Long
l 所聲明的mciSend函數取自winmm.dll的mciSendStringA函數,要在窗體或模塊的聲明區聲明。
l mciSend函數的四個參數,前兩個為字符串類型,後兩個為長整型。
②調用
在程序代碼中調用mciSend函數播放多媒體文件的語法如下:
ret=mciSend("mci命令",0,0,0)
l ret為調用mciSend函數的返回值:若為0,表示失敗;若為1,表示成功。
l 返回值可忽略,可使用下列方法調用mciSend函數:
Call mciSend("mci命令",0,0,0) 或 mciSend("mci命令",0,0,0)
l mci命令為字符串類型自變量,不同參數有不同的功能,其說明如表8-6所示。
表8-6 mci命令
Mci命令 參數 功能
Open 文件名[type型式][alias別名] 打開多媒體文件
Close 文件名 關閉
Play 文件名[from start][to end] 播放
Pause  暫停
Resume 文件名 恢復播放
Seek 文件名[to 位置|to start|to end] 移到
Stop 文件名 停止
③ 實例
l 打開一個*.wav文件,並將其別名設成sng
mciSend("opne c:\song\test.wav type vaveaudio alias sng",0,0,0)
l 播放別名為sng的多媒體文件
mciSend("play sng",0,0,0,0)
l 只播放別名為sng多媒體文件的50ms--120ms的范圍
mciSend("play sng 50 120",0,0,0)
l 暫停當前播放的多媒體文件
mciSend("pause",0,0,0)
l 繼續播放別名為sng的多媒體文件
mciSend("resume sng 300",0,0,0)
l 將播放位置移到別名為sng的多媒體文件300ms的地方
mciSend("seek sng 300",0,0,0)
l 停止播放名為sng的多媒體文件。如果再播放時,只須再用play命令即可。
MciSend("stop sng",0,0,0)
l 關閉別名為sng的多媒體文件。如果再播放時,須先用open打開文件,再用play播放。
mciSend("close sng",0,0,0)
練習園地8
一、基礎題
1.簡述添加AxWindowsMediaPlayer控件、AxshockwaveFlash控件、AxMSWebDVD控件的方法。
2. AxWindowsMediaPlayer控件、AxshockwaveFlash控件、AxMSWebDVD控件有哪些主要屬性和事件?
3.使用AxWindowsMediaPlayer控件,在播放時怎樣設置該控件才不可見?
二、實戰題
1.制作並調試本章中所有案例。
2.制作一個功能完善的視頻播放器,界面如圖8-9,在圖(a)、(b)、(c)和(d)分別給出了相應菜單的下拉菜單。
(a)                               (b)


                   (c)                              (d)
圖8-9 視頻播放器界面
2.自行設計一個CD播放器。


三、挑戰題
1.打開"錄音機"程序窗口,依次錄制表8-7中所列語音,分別保存到相對應的音頻文件。
表8-7 語言與文件對應表
語音 文件名
Orange Fruit1.wav
Mango Fruit2.wav
Tomato Fruit3.wav
Strawberry Fruit4.wav
Apple Fruit5.wav
Banana Fruit6.wav
Watermelon Fruit7.wav
Pear Fruit8.wav
2.設計認識水果中英文名稱的程序,程序運行界面如圖8-10所示。當按下某一水果圖標時,就會出現該水果的中文名稱、英文名稱、並且發出該水果英文單字的語音。水果英文單字語音取自習題一所錄制的音頻文件,水果圖案可取自素材庫。
 
圖8-10
3.請在案例8-3、8-3中設計全屏播放按鈕,在運行時既能選擇全屏播放,也能選擇在窗口中播放。

 


    本文檔由《WorkHelper 辦公助手》(http://workhelper.blogbus.com)收集並發布。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved