VB.net与Media Player9.0嵌入式开发

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

时间: 2016-07-07

VB.net与Media Player9.0嵌入式开发的相关文章

嵌入式开发学习的几种线路图方向

嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式开发Linux方向,关注这个方向,我认为大概分3个阶段: 1.嵌入式linux上层应用,包括QT的GUI开发 2.嵌入式linux系统开发 3.嵌入式linux驱动开发 嵌入式.jpg 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE.VxWorks等等 Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式. 你可以尝试以下路线: (1) C语言是所有编程语言中的强者,单片机.DSP

XP下超级终端与嵌入式开发板交互技巧

一.简介 超级终端是Windows操作系统自带的一个通用的串行交互软件,可以通过这个工具对路由器交换机等进行配置.使用调制解调器.一条零调制解调电缆或以太网连接,再调用此程序能够连接到其他计算机.Telnet 站点.公告板系统 (BBS).联机服务和主机.我们可以用它来调试电路是否可行. 嵌入式开发板基本都有串口,可以通过超级终端与嵌入式系统的串口交互,使超级终端成为嵌入式系统的"显示器". 使用:开始→程序→附件→通讯→超级终端(可新建或者使用现有的连接对设备进行配置); 启动命令:

用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发

1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅支持vs2013.此插件可以在CSDN下载频道下载(http://download.csdn.ne

嵌入式开发基础知识:Linux支持的多种文件系统类型

Linux支持多种文件系统类型,在嵌入式开发中上常用有:ROMFS.JFFS2.NFS.CRAMFS.YAFFS.UBIFS等. JFFS文件系统 JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统.JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中. Jffs2: 日志闪存文件系统版本2 (J

【详解】嵌入式开发中固件的烧录方式

版本:v1.2   Crifan Li 摘要 本文主要介绍了嵌入式开发过程中,将固件从PC端下载到开发板中的各种方式,主要包括NFS挂载,Nand Flash和Nor Flash,USB,RS232,网卡NIC等方式. 本文提供多种格式供: 在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP 下载(7zip压缩包) HTML HTMLs PDF CHM TXT RTF WEBHELP HTML版本的在线地址为: http://www.crifan.com/files/

嵌入式开发C语言位结构体用途详解

在嵌入式开发中,经常需要表示各种系统状态,位结构体的出现大大方便了我们,尤其是在进行一些硬件层操作和数据通信时.但是在使用位结构体的过程中,是否深入思考一下它的相关属性?是否真正用到它的便利性,来提高系统效率? 1.位结构体类型设计 [cpp] view plain copy print? //data structure except for number structure typedef struct symbol_struct { uint_32 SYMBOL_TYPE :5; //da

使用嵌入式开发板实现对车位锁控制的流程及程序实现

随着城市化进程的加快,新能源汽车呼之欲出.在笔者所在的城市,力帆和长安等公司都先后推出了可供市民租用的电动汽车.在享受租车所带来的便利的同时,汽车的充电就成了一个难题,在城市道路和停车场安装充电桩成为解决这个问题的一个有效的手段.汽车充电时,需要有一个可用于停靠的车位,并且这个车位只能在汽车充电的时候使用,在其他时间都不能被占用.也就是说,每个充电的车位需要有一个车位锁,当有汽车充电的时候,车位锁打开,否则车位锁关闭. 本文用嵌入式开发板实现了对车位锁开关的控制,可供相关项目的开发人员参考. 一

嵌入式开发修改u-boot与Linux调试串口总结

近期一个嵌入式开发项目,使用TI Cortex-A8的芯片AM3517作为主控开发.前期使用某公司的核心板搭建开发环境.在自己做底板布板的时候的时候涂个布线方便,改用UART1作为调试串口,而原来某公司给的开发包,已经TI的AM3517 PSP均以UART3作为调试串口.于是在底板焊接完成调试的时候就有了一天痛苦的经历. 嵌入式开发.jpg 在原版的PSP中, 一共有五处使用到UART3作为打印和调试串口: (1)Xloader的打印串口 (2)u-boot的打印串口 (3)内核解压时的信息打印

Google Cloud Next 云技术大会开幕;英伟达发布全新 Jetson TX2 嵌入式开发组件 | AI 开发者头条

▲内容预览: ● Google Cloud Next 云技术大会开幕 ● 英伟达发布全新 Jetson TX2 嵌入式开发组件,强化 AI 智能运算 ● IBM研发大数据模型,为控制埃博拉病毒传播大显身手 ● 谷歌开放大规模音频数据集 AudioSet,助力 AI 音频算法研究    每日推荐 ● 盘点近年来引用最多的深度学习论文 █ Google Cloud Next 云技术大会开幕 Google Cloud Next 云技术大会将于当地时间3月8日上午8:30在美国加州旧金山开幕(北京时间约