[VB.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控件的添加与使用

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

'退出

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方法 停止播放

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)

l ret为调用mciSend函数的返回值:若为0,表示失败;若为1,表示成功。

l 返回值可忽略,可使用下列方法调用mciSend函数:

Call mciSend("mci命令",0) 或 mciSend("mci命令",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)

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中设计全屏播放按钮,在运行时既能选择全屏播放,也能选择在窗口中播放。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")