单元八 多媒体处理
[学习目标] 熟悉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.获取当前播放时间与进度
[操作要点与步骤]
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. 获取计算机系统光驱信息
[操作要点与步骤]
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方法或程序
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,当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控件的添加与使用
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属性后的设置。
(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
'退出
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属性
例如: 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
[相关知识]
在VB.NET的工具箱中,通过快捷菜单中"添加/移除项…"添加AxMSWebDVD控件,它是制作DVD播放器所需要的。其常用属性和方法如表8-5所示。
Anchor属性 控件的定位点。定位点定义控件绑定到容器的哪些边
Dock属性 控件的停靠点。指示停靠到容器的哪些边
Locked属性 确定控件能否移动和改变大小
Visible属性 确定控件是否可见
mute属性 指定播放是否消音
Play方法 播放DVD
Pause方法 暂停播放
Stop方法 停止播放
Eject方法 弹出DVD光驱仓门
[要点分析]
DVD是一种高质量的视频压缩技术 视频的压缩需要通过一定的编码的。计算机系统中安装了DVD解码器后,Windows Media Player直接用于播放DVD。利用VB.NET的COM组件中的AxMSWebDVD控件等可开发功能强大的DVD播放器。
本案例程序设计比较简单,通过按钮控制文件的播放、暂停、停止和光驱仓门的打开。在设计过程中要注意各按钮的状态是否有效,以免发生错误。
[知识扩展]
1. API函数sndPlaySoundA
在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
若返回为0表示失败;返回为1表示成功。
l 如果返回值可忽略,可使用下列方法调用sndPlay函数:
Call sndPlay("文件名.wav",flags)
或sndPlay("文件名.wav",flags)
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
在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)
l ret为调用mciSend函数的返回值:若为0,表示失败;若为1,表示成功。
Call mciSend("mci命令",0) 或 mciSend("mci命令",0)
l mci命令为字符串类型自变量,不同参数有不同的功能,其说明如表8-6所示。
表8-6 mci命令
Mci命令 参数 功能
Open 文件名[type型式][alias别名] 打开多媒体文件
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)
l 播放别名为sng的多媒体文件
mciSend("play sng",0)
l 只播放别名为sng多媒体文件的50ms--120ms的范围
mciSend("play sng 50 120",0)
l 暂停当前播放的多媒体文件
mciSend("pause",0)
l 继续播放别名为sng的多媒体文件
mciSend("resume sng 300",0)
l 将播放位置移到别名为sng的多媒体文件300ms的地方
mciSend("seek sng 300",0)
l 停止播放名为sng的多媒体文件。如果再播放时,只须再用play命令即可。
MciSend("stop sng",0)
l 关闭别名为sng的多媒体文件。如果再播放时,须先用open打开文件,再用play播放。
mciSend("close sng",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中设计全屏播放按钮,在运行时既能选择全屏播放,也能选择在窗口中播放。