收藏 分享(赏)

ActionScript 3.0从入门到精通:第14章 声音与视频流编程 (教学PPT下载).pptx

上传人:11xg27ws 文档编号:8649585 上传时间:2019-07-07 格式:PPTX 页数:27 大小:179.80KB
下载 相关 举报
ActionScript 3.0从入门到精通:第14章  声音与视频流编程 (教学PPT下载).pptx_第1页
第1页 / 共27页
ActionScript 3.0从入门到精通:第14章  声音与视频流编程 (教学PPT下载).pptx_第2页
第2页 / 共27页
ActionScript 3.0从入门到精通:第14章  声音与视频流编程 (教学PPT下载).pptx_第3页
第3页 / 共27页
ActionScript 3.0从入门到精通:第14章  声音与视频流编程 (教学PPT下载).pptx_第4页
第4页 / 共27页
ActionScript 3.0从入门到精通:第14章  声音与视频流编程 (教学PPT下载).pptx_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、第14章 声音与视频流编程,声音与视频都属于多媒体范畴,是开发引人入胜的交互式应用程序不可缺少的元素。ActionScript 3.0既可以加载外部的声音和视频文件,也可以即时处理通过麦克风和摄像头获取到的实时的声音和图像。在程序执行过程中,还可以对声音和视频进行精确的控制。,14.1 处理声音,ActionScript 3.0允许将外部声音文件(如mp3文件)加载到 SWF中,也可以在创建SWF文件时将声音信息支持嵌入其中。如果用户的计算机装有麦克风,也可以由麦克风来获取音频信息。在一些互动多媒体服务中,还可以直接访问服务器的流式声音数据。 与图像文件格式一样,目前各种音频格式也是五化八门。

2、Flash Player目前支持mp3格式存储的声音文件,不能直接加载或播放如WAV或AIFF格式的声音文件。 以下将以具体实例来讲解处理声音时的各种常见问题。,14.1.1 加载外部声音文件,加载外部声音文件使用Sound类。开始需先将Sound实例化,常用的语法如下。 var sound:Sound = new Sound(); 然后使用Sound类的load方法,加载指定的URLRequest实例。 sound.load(new URLRequest(地址字符串); 其中,“地址字符串”为声音文件所在的路径。 当load声音成功后即可使用Sound类的play方法播放该声音文件。 sou

3、nd.play();,14.1.2 声音的加载进度,加载声音文件的进度可以由进度事件ProgressEvent.PROGRESS侦听bytesLoaded和bytesTotal两个属性。常见的方式是求bytesLoaded和bytesTotal的比值,计算加载的百分比,如下列代码。 Math.floor(e.bytesLoaded/e.bytesTotal)*100)+“%“;,14.1.3 声音的基本控制,在ActionScript 3.0中,一个Sound类是远远无法满足各种对声音文件控制的需要的。在Flash应用程序中,每一个声音都被分配到一个声道。SoundChannel类否则对这些声

4、道进行控制。SoundChannel 类包含stop方法可以停止该声道的播放,同时还可以监控声道的音量,以及对声道设置SoundTransform对象的属性。,14.1.3 声音的基本控制,以下代码将声音分配到一个名为channel的声道中。 var sound:Sound = new Sound(); /声明一个新的声道 var channel:SoundChannel; sound.load(new URLRequest(“music/Beat_It.mp3“); sound.addEventListener(Event.COMPLETE,playSound); function play

5、Sound(e:Event):void /将sound赋予channel声道 channel = sound.play(); ,14.1.3 声音的基本控制,SoundChannel类中的position属性可以返回当前播放头的位置,配合Sound类的play方法和SoundChannel类的stop方法可以实现对声音的简单控制,包括播放、停止、暂停和恢复播放。,14.1.4 调节音量,加载后的声音可以使用SoundTransform类中的volume属性调整音量的大小。根据不同需要,既可以单独调节不同声道的音量,也可以使用全局方法,调节整个播放环境的音量。首先介绍单独调节声道音量的方法。 每

6、个SoundChannel实例都有一个soundTransform(这与每个显示对象都有一个transform属性颇为类似)。这个属性的对应值是一个SoundTransform实例,可以通过这种方法调节音量的大小。volume的允许值由01,当其值为0时音量最小,值为1时音量恢复为最大。 设置音量的关键代码如下。 声道.soundTransform = new SoundTransform(音量大小);,14.1.5 多个声道的调节,如前所述,Sound实例可以赋予到不同的声道中,并单独进行处理。当Flash程序需要处理多个声音时,便可以使用不同的声道,加载声音,并分别进行设置。以下例子将示范

7、当加载两个不同声音时,如何控制其音量,与用户形成交互。,14.1.6 声音的全局控制,当使用多个声道(SoundChannel)时,ActionScript 3.0允许使用SoundMixer类进行声音的全局控制。SoundMixer类提供了一些静态属性和方法,可以直接设置控制全局声场。 例如,可以使用stopAll方法停止所有的声音播放,也可以设置全局的soundTransform属性(包括音量,声场平移等)。,14.1.7 声音的波型,ActionScript 3.0相较于以前版本,新增加了一个SoundMputeSpectrum方法,可以读取当前播放声音的波形。这个波形是经过混音之后的波

8、形值,当声音是由几个声道(SoundChannel)混和而成时,computeSpectrum方法输出的是混合在一起的每个SoundChannel对象组合的声音数据。 由computeSpectrum读取的声音数据类型是一个ByteArray 对象,它包含512个采样值。每个值都是介于-1和+1之间的浮点数,可以使用ByteArray类的readFloat方法顺序读取。这些值可以分为2组,前256个值表示左声道,后256个值则代表右声道。,14.1.7 声音的波型,computeSpectrum是一个静态方法,其语法如下。 SoundMputeSpectrum(输出字节数组,傅立叶变换标志,采

9、样率); 其中,输出字节数组为经过调用computeSpectrum后被赋值的字节数组的名字。 傅立叶变换标志的默认值为false,它表示输出的波形是否经过傅立叶变换,当其为true时,波形将经过傅立叶变换转换为频谱图像。 采样率可以设置可以设置声音的采样频率,当其为0时,以44.1kHz进行采样;为1时以22.05kHz频率进行采样,依此类推。,14.1.8 声音的元数据信息,Sound类提供了对声音元数据的访问功能,可以提取出mp3文件的id3元数据。很多mp3音乐都设置有用于显示文件属性的详细id3信息,例如我们经常调用的文件“Beat It”的id3信息就包括歌曲名、演唱者、专辑、流派

10、等,如下图所示。,14.1.8 声音的元数据信息,声音文件的id3元数据被存储为一个ID3Info对象,可以使用Sound类的id3属性对其进行访问,一般访问语法如下。 Sound实例.id3;,14.1.9 捕获声音输入,除加载声音外,Flash应用程序也允许直接嵌入或捕获输入的方式来处理声音。嵌入声音是将声音文件直接导入Flash程序中,其处理方式与加载声音后的处理相同。捕获声音则可以通过Microphone类的静态方法实现。一般捕获麦克风只需要通过getMicrophone一行代码即可实现。 var mic:Microphone = Microphone.getMicrophone();

11、,14.1.9 捕获声音输入,需要注意的是,由于来自麦克风或RTMP流的声音数据不是通过全局SoundMixer对象传递的,因此SoundMixer的computeSpectrum方法无法从这些源返回数据。此外,若要设置麦克风的SoundTransform属性,也要使用setLoopBack方法设置声音为环回模式方可。设置麦克风音源为环回模式的语法如下。 var mic:Microphone = Microphone.getMicrophone(); mic.setLoopBack(true);,14.2 处理视频,使用ActionScript可以精确控制视频的加载、显示和回放。使用视频会涉及

12、多个类的联合使用,最基本的结构包括Video类、NetStream类和NetConnection类。其中Video类的实例是一个显示对象,它产生在实现舞台上的视频内容框。NetStream实例为视频内容框提供内容的源。NetConnection实例则负责构建视频源内容源与视频内容框之间的连接。 此外,与声音的Microphone类一样,视频也可以通过Camera类捕获摄像头提供的视频数据。,14.2.1 加载外部视频文件,加载播放视频文件需要几个类配合使用。NetStream控制加载文件和播放,以播放的数据为主要控制对象。这些数据对于NetStream没有实际意义,NetStream不会将他们

13、呈现为视频,只是按照“规则”处理它们。它处理后的数据传递给Video时,Video对象会将其渲染为视频。,14.2.2 视频播放的基本控制,在ActionScript 3.0中,对视频播放的控制是通过对视频流的控制来实现的。NetStream中的pause方法可以使视频暂停,resume方法可以使视频由暂停处恢复播放,togglePause方法则可以在暂停状态和播放状态之间切换。,14.2.3 视频的声音与图像,加载后的视频通过Video类渲染呈现出来,Video对象本身是一个显示对象,可以象其他显示对象一样设置各种变形效果。视频的音频部分则可以通过NetStream类的soundTransf

14、orm属性进行控制。 例如,设置视频尺寸放大2倍时可以使用如下代码。 video.scaleX = .5; 设置视频的音量为1/2时则可以添加如下代码。 ns.soundTransform = new SoundTransform(0.5); 其中,video为Video实例,ns为NetStream实例。,14.2.4 metadata与回调方法,当NetStream对象加载视频文件也会加载视频的metadata,加载metadata后自动调用一个名为onMetaData的回调方法。Metadata是一个元数据信息包,数字信息如下表所示。,14.2.4 metadata与回调方法,注意:早期

15、的flv视频文件只包含视频的高、宽和播放长度信息。 metadata由ActionScript在加载视频时自动加载,并会触发onMetaData事件。由于视频加载涉及到服务器端技术,而这部分技术还停留在AcitonScript 1.0和AcitonScript 2.0阶段,因此其语法也与我们常见的侦听事件方法颇为不同。一般须先声明一个client对象,并定义此对象的onMetaData事件,语法如下。 var clientObject:Object = new Object(); clientObject.onMetaData = function(metadata:Object):void

16、/这里已经可以使用metadata了 ; /ns为NetStream实例,指定clientObject为其client属性 ns.client = clientObject; 取得metadata后,便可以灵活使用其所有信息了。,14.2.5 播放进度控制条的实现,在播放视频时,最常见的控制方式是播放进度控制条。它一方面可以让用户清楚地了解当前的播放进度,同时也允许用户拖动控制条,跳到指定的位置继续播放。在以前的章节中我们已经学习过如何实现显示对象的拖动。因此,实现播放控制条的关键便在于把控制条的位置与播放头的位置进行同步。,14.2.6 捕获视频输入,与捕获声音的操作类似,可以通过静态方法C

17、amera.getCamera捕获视频输入。常用的语法如下。 var camera:Camera = Camera.getCamera(); 之后便可以使用Video类的attachCamera将捕获的视频数据加载到Video对象。 /video为Video类的实例 video.attachCamera(camera); 因此,最基本的视频捕获只需要这两个方法便可以实现了。,14.2.7 视频提示点,视频的提示点是一个指定的时间点。在播放视频文件时,播放头在到达该点时调度一个cuePoint事件。根据不同的目的,在不同的提示点可以设置不同的代码,以实现特定功能。例如可以在提示点上设置字幕,或将

18、视频分割为不同的章节等。 提示点可以分为3种类型:导航、事件和ActionScript类型。导航提示点和事件提示点也称作嵌入提示点,是被预先嵌入到flv视频文件中的。而ActionScript则是在外部设置的一种提示点,可以通过视频播放组件的addASCuePoint方法添加。通常,ActionScript的精确度要低于前两种提示点,但却有较高的灵活性。毕竟只有为视频编码的人才有可能设置导航或事件提示点。,14.2.7 视频提示点,使用视频播放组件时,需先导入fl.video.FLVPlayback类: import fl.video.FLVPlayback。 之后便可以对提示点进行操作,如果

19、在视频编码时使用了导航提示点,此时可以使用seekToNavCuePoint方法将播放头移动到指定的提示点,也可以使用seekToNextNavCuePoint和seekToPrevNavCuePoint将播放头移动到指定时间之前(或之后)的导航提示点上。,14.2.7 视频提示点,由于导航或事件提示点主要依赖于编码设置而非代码,我们将注意力集中在ActionScript提示点上。 FLVPlayback类可以使用addASCuePoint方法为视频添加ActionScript提示点,语法如下。 FLVPlayback实例.addASCuePoint(时间,提示点名称,参数关联数组); addASCuePoint的3个参数中,“时间”为该提示点的时间值,可以精确到小数点后三位小数;“提示点名称”为一个字符串,用于区分各提示点;“参数关联数组”为一个对象形式的关联数组,例如city:Beijing,country:China。这个对象可以为提示点的各相关操作提供必要的参数,可以是当前的提示文字或操作数等。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报