第3章多媒体音频播放器优秀课件.ppt

上传人:石*** 文档编号:91097837 上传时间:2023-05-21 格式:PPT 页数:42 大小:2.27MB
返回 下载 相关 举报
第3章多媒体音频播放器优秀课件.ppt_第1页
第1页 / 共42页
第3章多媒体音频播放器优秀课件.ppt_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《第3章多媒体音频播放器优秀课件.ppt》由会员分享,可在线阅读,更多相关《第3章多媒体音频播放器优秀课件.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第3章多媒体音频播放器第1 页,本讲稿共42 页第3章 多媒体音频播放器学习目标:几种重要的音频格式 媒体控制接口类MCI 命令 媒体控制接口类MCI 设备mciSendString 和mciSendCommand 函数的使用第2 页,本讲稿共42 页3.1几种重要的音频格式3.1.1波形音频 波音音频是一种电子数字化的声音,是计算机播放音频的一种重要格式,它存储的是声音的波形信息,当播放波形音频时,不管播放文件的设备是何种类型,都会得到相似的声音,波形音频文件通常wav 作为文件扩展名。由于采用波形音频存储电子化声音需要大量的存储空间,因此它一般只用于短时间的声音播放。波形音频主要有以下几个

2、属性,他们决定了声音的质量。(1)采样平率(2)量化位数(3)声道数第3 页,本讲稿共42 页3.1几种重要的音频格式3.1.2 MIDI音频 MIDI(Musical Instrument Digital Interface)在多媒体音频中占有重要的位置,是播放和录制音乐的国际标准。它确定了连接音乐设备的电缆线、硬件和通信协议。多媒体PC 只需要具有MIDI 接口和MIDI 合成器就可具备处理MIDI 的功能。MIDI 在处理音乐时是将MIDI 音乐设备上产生的活动编码记录下来,将这些数据传递到MIDI 合成器上就能重现原来的演奏。MIDI 的消息有两种类型:状态字节和数字字节;状态字节u

3、发送的类别(动作和函数);数字字节总是跟在状态字节后,表示发送消息的实际值。数字字节的个数取决与状态字节表示的消息类型。MIDI 通过通道字节最高位区别这两种类型。最高位为1,表示状态字节,为0 表示数字字节。所有MIDI 消息通过通道来接收和发送。通道上能够传递不同乐器的声音。音序器根据通道传递的消息,让不同的乐器演奏不同声部。使用通道,使MIDI 的音乐效果大大增强。但是如果不对声道和相应乐器作统一规定的话将会造成混乱。Windows 使用通用的MIDI 标准定义通道的分配。第4 页,本讲稿共42 页3.1几种重要的音频格式3.1.3 CD音频CD 音频采用红皮书标准,通过CD-ROM 驱

4、动器来播放CD 音频。CD 音频需要的存储量大,一张光盘约能存储70 分钟左右的CD 音频。国际标准化组织对光盘的数据格式作了详细的规定。红皮书是CD 标准的第一个文本,发表于1981 年,描述了CD-DA 的信息和编码格式。其采样率为44.1kHz,每个样本量化位数为16 位。一般情况下,整个光盘都用来存储CD 音频数据,并划分为多个音轨,轨道的具体长度可以不定,通常一个音轨对应一首曲目。CD 音频的长度用分、秒、帧的形式来衡量,最小的单位是帧,每一帧为1/75 秒。第5 页,本讲稿共42 页3.2媒体控制接口类MCIMCI 提供了标准的播放多媒体设备和记录多媒体文件的命令,这些命令使得我们

5、的应用程序可以与设备无关的方式控制音频和视频设备。对所有支持的媒体类型(音频、MIDI、CD 音频、数字视频等)而言,这些命令的接口都是类似的。第6 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令MCI 支持命令字符串和命令消息两种方式控制MCI 设别,我们可以在MCI 应用程序中使用其中的任何一种或混合使用这两种方式。命令消息接口包含常数和结构信息。使用全局函数mciSendCommand 向某个MCI 设备发送消息。命令字符串接口则提供命令消息的文本版本,它是比命令消息接口要高级的MCI 接口。使用命令字符串接口时,必须使用全局函数mciSendString 向某个

6、MCI 设备发送字符串。Microsoft Windows 操作系统在向指定的MCI 设备发送该字符串时将其解释成相应的命令消息。第7 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令 命令消息方式使用结构检索信息,这些结构包含了不同设备的不同信息。而命令字符串方式则将检索到的信息打包到一个字符串中,读者使用MCI 命令字符串方式翻译该字符串。在一般不需要检查MCI 命令返回值时,我们推荐读者使用MCI 命令字符串方式操作MCI 设备它更易于理解和记忆,在本实例中,我们将使用命令消息方式而不是命令字符串方式。第8 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1

7、 MCI命令1.全局函数mciSendCommandmciSendCommand 负责向指定的MCI 设备发送一个命令消息,其函数原型为:MCIERROR mciSendCommand(MCIDEVICEID IDDevice,UINT uMsg,DWORD fdwCommand,DWORD dwParam);其中的参数IDDevice 表示接收该消息的MCI 设备类型。MCI_OPEN 命令消息不实用此参数,参数uMsg 为相应的命令消息,参数fdwCommand 为命令消息的标志,参数dwParam 则为命令消息包含参数的结构地址。第9 页,本讲稿共42 页3.2媒体控制接口类MCI 3.

8、2.1 MCI命令 如果mciSendCommand 成功发送命令消息,函数返回0,否则返回相应的MCI 错误码。需要注意的是,错误码包含在返回的DWORD(双字)类型值的低地址字中。如果该错误与特定的设备有关,则高地址字为发生错误的驱动器标识,否则高地址字为0。有关MCI 错误的信息,请参阅MCI 错误类型一节。第10 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令 如果要检索mciSendCommand 返回值的文本描述,可以使用全局函数mciGetErrorString.MCI 命令消息的语法包含三个元素:常数消息值、包含命令参数的结构和确定命令选项和参数有效字段

9、的标志集合。例如,下面的代码向指定的MCI 设备发送一个MCI_PLAY 命令:mciSendCommand(wDeviceID,/设备标识MCI_PLAY,/命令消息0,/标志(DWORD)(LPVOID)&mciPlayParms);/参数块第1 1 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令 最后一个参数mciPlayParms 为MCI_PLAY_PARMS 类型的结构地址,其中可能包含了回放的开始和结束位置。大多数MCI 命令消息都使用类似的结构包含足够的MCI 操作信息。所有这些结构的第一个参数都是MCI 操作完成后接收MM_MCINOTIFY 通知消息

10、的窗口句柄。第12 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令2.全局函数mciSendString 全局函数mciSendString 负责向MCI 设备发送一个命令字符串。接收命令的设备由字符串的内容指定。MCIERROR mciSendString(LPCTSTR lpszCommand,LPTSTR lpszReturnString,UINT cchReturn,HANDLE hwndCallback);第13 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令 其中的参数lpszCommand 表示MCI 命令字符串(以“0”结束)的地

11、址,参数lpszReturnString 则为返回字符串的缓冲区地址,参数cchReturn 为参数lpszReturnString 指定的字符缓冲区大小,如果命令字符串指定了通知(“notify”)标志,则参数hwndCallback 则为回调窗口的句柄。mciSendString 的返回值与mciSendCommand 相同。第14 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令MCI 命令字符串的语法为典型的“动词 对象 修饰符”结构。每个命令字符串都包括一个命令、一个设备标识符和命令参数。其中的参数对部分命令可选的,而对于部分命令是必须的。一般地,一个命令字符串

12、的形式为:command device_id arguments 其中,command 指定了MCI 命令,例如open、colse 或play 等;device_id 标识了MCI 驱动器的一个实例(device_id 在打开设备时创建);arguments 指定了命令所使用的标志和变量。这里的标志为MCI 命令可识别的关键字,变量为MCI 命令或标志使用的数字或字符串。例如,希望从指定的位置播放到指定的位置,可以使用下面的代码实现:第15 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令DWORD PlayFromTo(LPSTR lpstrAlias,DWORD d

13、wFrom,DWORD dwTo)/形成命令串 Char achCommandBuff128;/发送命令串 Waprintf(achCommandBuff,“paly%s from%u to%u”,lpstrAlias,dwFrom,dwTo);Return mciSendString(achCommandBuff,NULL,0,NULL);这里的“from”和“to”是可识别的预定义标志。第16 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令3.MCI 命令的分类MCI 定义了四种类型的命令:(1)系统命令:(2)必需命令(3)基本命令(4)扩展命令 系统命令和必需命

14、令为所有MCI 设备都必须支持的最小命令集,而基本命令和扩展命令并不为所有的MCI 设备支持。如果应用程序需要使用基本命令和扩展命令,则应该在使用该命令之前查询该设备是否支持它(使用查询命令MCI_GETDEVCAPS)。MCI 命令见教材表3-2所示。第17 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令4.MCI 函数、宏和消息 大多数MCI 应用程序需要重复使用全局函数mciSendString 和mciSendCommand。除了这两个函数之外,MCI 还提供了其他几个不太常用的全局函数。全局函数mciGetErrorString 的意义前文已经述及。此外,全局

15、函数mciGetCreatorTask 允许应用程序使用设备标识符检索创建该标识符的任务句柄。全局函数mciGetYieldProc 与mciSetYieldProc 可以指定或检索与“wait”(MCI_WAIT)标志相关的回调函数地址。第18 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令 大多数MCI 命令需要的设备标识符都由调用MCI_OPEN 命令而得到。但在部分情况下,可能不希望打开该设备而获取设备标识符,此时可以使用全局函数mciGetDeviceID。不同的媒体可能使用不同的时间格式,这些时间格式包括HMS(时/分/秒)格式,MSF(分/秒/帧)格式和T

16、MSF(轨/分/秒/帧)格式等。MCI提供了多个宏以进行媒体的时间格式变换,这些宏有:第19 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令MCI_HMS_HOUR:检索HMS 值的小时字段;MCI_HMS_MINUTE:检索HMS 值的分钟字段;MCI_HMS_SECOND:检索HMS 值的秒字段;MCI_MAKE_HMS:创建HMF 值;MCI_MAKE_MSF 创建MFS 值;MCI_MAKE_TMSF:创建TMSF 值;MCI_MSF_FRAME:检索MSF 值的帧字段;MCI_MSF_MINUTE:检索MSF 值的分钟字段;MCI_MSF_SECOND:检索M

17、SF 值的秒字段;MCI_TMSF_FRAME:检索TMSF 值的帧字段;MCI_TMSF_MINUTE 检索TMSF 值的分钟字段;MCI_TMSF_SECOND:检索TMSF 值的秒字段;MCI_TMSF_TRACK:检索TMSF 值的轨(音轨)字段。第20 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令 MCI 同时提供了两个消息:MM_MCINOTIFY 与MM_MCISIGNAL。前者用于通知应用程序MCI 命令的完成状态(如果使用了“notify”即MCI_NOTIFY 标志),后者只适用于数字视频设备,它用于通知应用程序MCI 设备已经到达指定的位置。5.

18、等待、通知与测试标志 大多数MCI 命令都具有一些特定的标志。等待标志“wait”(MCI_WAIT)和通知标志“notify”(MCI_NOTIFY)是最常见的,它们多多出现在所有的MCI 命令中。测试标志“test”(MCI_TEST)只适用于数字视频设备和VCR 设备。第21 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令MCI 命令通常直接返回,虽然大多数MCI 命令实施的活动可能需要很长的时间才能完成。我们可以使用等待标志设置MCI 命令的返回时间。使用MCI_WAIT 标志将使得应用程序一直处于等待状态,直到所请求的MCI 活动已经执行完毕。例如,下述播放命

19、令将使得应用程序在回放没有完成前一直处于等待状态:mciSendString(play mydevice from 0 to 100 wait,lpszReturnString,lstrlen(lpszReturnString),NULL);第22 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令 需要注意的是,用于可以使用缺省的组合键Ctrl+Break 中断等待状态。使用MCI_BREAK 命令和相应的MCI_BREAK_PARMS 结构参数可以重新定义该组合键。通知标志“notify”(MCI_NOTIFY)用于指定设备在MCI 活动完成后向应用程序发送MM_MCI

20、NOTIFY 消息,此时应用程序必须有一个处理该通知消息的窗口过程。一般地,一个MM_MCINOTIFY 消息用于命令是否成功完成、失败、挂起或取消。第23 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.1 MCI命令 使用此标志时,应用程序必须指定特定的回调消息窗口句柄。在全局函数mciSendString 中,此窗口句柄为最后一个参数;在全局函数mciSendCommand 中,此窗口句柄保存在结构参数的dwCallBack 字段中。测试标志“test”(MCI_TEST)查询设备是否能够执行某个命令。如果该设备不能执行该命令则返回一个错误码。当使用此标志时,如果测试结果出现,控

21、制将返回到应用程序。只有数字视频设备和VCR 设备的除MCI_OPEN 和MCI_CLOSE 以外其他命令支持此标志。第24 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备 每个MCI 多媒体设备都支持一组MCI 核心命令集。不同的媒体设备支持不同的核心命令集。本节谈论MCI 设备以及这些MCI 设备是如何相应标准的MCI 命令的。1.MCI 设备控制 控制媒体设备的方式非常简单,我们所需要做的全部工作就是首先打开设备、然后发送操作命令,最后关闭设备。例如,下面的命令字符串将播放CDAudio 的第3 至第6 音轨:第25 页,本讲稿共42 页3.2媒体控制接口类MCI

22、 3.2.2 MCI设备mciSendString(open cdaudio,lpszReturnString,lstrlen(lpszReturnString),NULL);mciSendString(set cdaudio time format tmsf,lpazReturnString,lstrlen(lpszReturnString),NULL);mciSendString(play cdaudio from 3 to 6,lpazReturnString,lstrlen(lpszReturnString),NULL);mciSendString(close cdaudio,lpaz

23、ReturnString,lstrlen(lpszReturnString),NULL);第26 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备2.MCI 设备类型与设备名称 对某个设备类型而言,可能存在多个共享相同的命令集但操作不同类型数据的MCI 驱动器。要唯一地区分这些MCI 驱动器,需要标识对应的设备名称,见“System.ini”文件中的“mci”小节:mcicdaudio=mcicdasequencer=mciseq.drvwaveaudio=mciwave.drvavivideo=mciavi.drvMPEGVideo=mciqtz.drvvideodis

24、c=mcipionr.drvvcr=mcivisca.drv第27 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备3.打开MCI 设备 在使用MCI 设备之前,必须使用open(MCI_OPEN)命令打开MCI 设备,该命令负责将驱动器装入内存(如果该驱动器没有装入内存的话),并检索设备标识符。在使用新的设备标识符前,应该检查全局函数mciSendString 或mciSendCommand 返回的设备标识符的有效性。第28 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备 与其他MCI 命令消息一样,MCI_OPEN 具有一个机构参数,该参数的缺

25、省类型为MCI_OPEN_PARMS,部分驱动器可能具有扩展的结构类型(WAV 音频的MCI_WAVE_OPEN_PARMS 结构)。除非必须使用扩展结构的附加参数,否则可以在任何MCI设备中使用缺省结构。注意,可以打开的设备数目只与可用内存的大小有关。第29 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备 在前面的代码中可以使用“alias”标志设置设备标识符的别名,别名提供了一种同时打开一个文件或设备的多个实例的手段,还可以使用命令字符串设置WAV 文件的别名,如果使用全局函数mciSendCommand,则可以填充MCI_OPEN_PARMS 结构的lpstrAl

26、ias 成员。第30 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备 在打开MCI 设备时,使用“type”标志可以引用设备类型而不是特定的设备驱动器。例如,下述代码使用“type”标志指定WAV 音频文件“F:JuneJune.wav”,且设置别名为“june”:mciSendString(open F:JuneJune.wav type waveaudio alias chimes,lpszReturnString,lstrlen(lpszReturnString),NULL);使用全局函数mciSendCommand 时,设备类型由MCI_OPEN_PARMS 结

27、构中的lpstrDeviceType 成员指定。第31 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备 已经知道,MCI 设备分为简单设备和复合设备两类。CD 音频和VCD 视频就是简单设备,打开这些简单设备的方法有两种:其一,是设置一个接收注册表或INI 文件中设置的设备名称的字符串(以“0”结束)指针,例如:mciSendString(open videodisc,lpszReturnString,lstrlen(lpszReturnString),NULL);其二,也可以指定设备驱动器的实际名称。此时,应用程序将不再是与设备无关的了。第32 页,本讲稿共42 页3

28、.2媒体控制接口类MCI 3.2.2 MCI设备WAV 音频和MIDI 音频则是复合设备的典型代表。打开复合设备的方法有三种:其一,只指定设备名称,此时没有指定任何复合数据文件。其二,只指定文件名,此时没有提供设备类型,相应的设备类型由Windowws 操作系统注册表中的文件关联属性确定。其三,提供设备类型和文件名,此时MCI 将忽视系统注册表中的文件关联属性。例如,可以将文件与“June.mus”与WAV 音频相关联。第33 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备mciSendString(open June.mus type waveaudio,lpszRe

29、turnString,lstrlen(lpszReturnString),NULL);如果MCI 命令open(MCI_OPEN)只提供了文件名而没有文件扩展名,则相应的文件扩展名由“Win.ini”文件中的“mci extensions”小节获取。如果需要保存数据文件,则可以使用save(MCI_SAVE)命令。例如,下述代码打开一个新的WAV 文件、开始录制、结束录制、保存关闭文件:第34 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备mciSendString(open new type waveaudio alias capture,lpszReturnStri

30、ng,lstrlen(lpszReturnString),NULL);mciSendString(record capture,lpszReturnString,lstrlen(lpszReturnString),NULL);mciSendString(stop capture,lpszReturnString,lstrlen(lpszReturnString),NULL);mciSendString(save capture orca.wav,lpszReturnString,lstrlen(lpszReturnString),NULL);mciSendString(close captur

31、e,lpszReturnString,lstrlen(lpszReturnString),NULL);open(MCI_OPEN)命令的标志“shareable”(MCI_OPEN_SHAREABLE)用于确定该设备或文件是否允许其他应用程序共享访问。第35 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备4.播放MCI 设备Play 命令(MCI_PLAY)实际播放一个MCI 设备。如果播放命令没有任何参数,则MCI 将从当前位置开始播放,直到文件结束、媒体结束或命令中断才停止。回放结束后,媒体的当前位置将保留在结尾处。可以使用定位命令seek(MCI_SEEK)改变当

32、前位置。大多数MCI 设备支持“from”标志(MCI_FROM)和“to”(MCI_TO)标志,它们用于确定MCI 设备回放的开始和结束位置。需要注意的是,位置值的单位与设备使用的时间格式相关。每个设备都具有一个缺省的时间格式。然而在使用位置值之前,需要使用设置命令set(MCI_SET)指定时间格式。这里推荐读者在使用前后保存并恢复原始时间格式。第36 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备5.停止、暂停、复位与关闭MCI 设备 停止命令stop(MCI_STOP)挂起播放或录制命令。大多数设备同时支持暂停命令pause(MCI_PAUSE)。当重新使用播放

33、命令Play(MCI_PLAY)或录制命令record(MCI_RECORD)时,如果没有指定“from”(MCI_FROM)标志,则从当前位置开始。如果没有指定“to”(MCI_TO)标志,将结束位置为媒体的结尾处。部分MCI 设备支持复位命令resume(MCI_RESUME),该命令不会改变再次重放时的位置。第37 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.2 MCI设备 关闭命令close(MCI_CLOSE)在MCI 设备的的所有任务完成后关闭之。我们强烈推荐读者在完成MCI 任务后关闭之。注意,当我们关闭外部MCI 设备时(使用自己的媒体而不是文件,例如CD 音频),

34、驱动器将使得该设备保留当前操作模式不变。即使我们已经从内存中删除了该设备的驱动器,CD 音频也将持续播放到结束处才能够停止下来。第38 页,本讲稿共42 页3.2媒体控制接口类MCI 3.2.3使用mciSendString和mciSendCommand1.使用mciSendString(参考教材源程序)2.打开MCI 设备(参考教材源程序)3.播放MCI 设备(参考教材源程序)4.设置时间格式(参考教材源程序)5.检索CD 音频信息(参考教材源程序)第39 页,本讲稿共42 页3.3实现步骤参考教材,运行界面如图3-2 所示:图3-2 程序运行界面第40 页,本讲稿共42 页3.4 本章小结 本实例介绍了几种重要的音频格式、媒体控制接口类MCI 的基础知识(包括MCI 命令、MCI 设备等)以及mciSendString 和mciSendCommand 函数的使用,在此基础上设计与实现了简单的多媒体音频播放器。本实例可以播放常见的音频格式文件(mp3,wav,mid,wma 等格式),随时播放、停止音频文件等。但该播放器的功能是有限的,只实现了最简单的功能。读者可以根据自己的需要,参看联机帮助进行补充和完善。第41 页,本讲稿共42 页第42 页,本讲稿共42 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁