一个声音类的 结构关系图,作为主要学习路线。
类 构造关系图
建议你首先阅读一下帮助文件中“处理声音”一栏,对声音处理有个初步的了解。
Sound类SoundChannel类SoundMixer类构成了一条主线。我把这三个类称为主类。
而剩下的ID3Info类,SoundLoaderContext类,SoundTransform类成为附属类。
在下所谓的附属类,意思是不能单独使用,只能与主类相结合才能使用。
他们之间的附属关系也在上图体现出来了。
区分附属类的方法在于该类是否具有方法和事件,AS3中存在大量的附属类。都可以用这个方法区分,学习。你可以检查我所谓的这几个声音附属类,看是否有方法和事件。
主线的第一个基础类是Sound类,它是作为一个容器,用于下载外部音乐文件,在下载过程中可以触发各种事件(主要用到的事件是complete,progress,id3),然后实现其他的比如开始播放,显示缓冲进度条,显示音乐信息。Sound类也是声音类中属性最多,方法最多,事件最多的类,需要重点把握。
Sound类的第一附属类是SoundLoaderContext类,比较简单,主要看一下它的bufferTime属性,是用于设置下载音乐的缓冲。使用构造函数创建对象,提供给Sound类的构造函数使用。
Sound类的第二附属类是ID3Info类。它不具有构造函数,直接用Sound.id3属性引用ID3Info对象即可。
主线第二个类是SoundChannel类。声音一旦开始播放,就可以用SoundChannel类引用。一般在建立一个新SoundChannel对象后,需要用SoundChannel=Sound.play()的方式引用到正在播放的声音,并可得到当前播放的位置,停止声音播放,触发声音播放完毕的事件。注意SoundChannel类的方法只有stop(),各位可以对比一下Sound类,SoundChannel类,SoundMixer类的方法。注意控制声音播放停止的方法各属于哪个类(重点)。
SoundChannel类的附属类SoundTransform主要用于控制音量大小。其使用格式需要特别注意一下。
- var transform:SoundTransform = channel.soundTransform;
- transform.volume = volume;
- channel.soundTransform = transform;
大致的方式是:
1先构造一个SoundTransform对象,用上面代码的格式也行,也可以用构造函数的方式。
2 设置SoundTransform对象的volume属性的值,也就是音量的值。
3 将SoundTransform对象重新赋值给SoundChannel对象。
主线第三个类是SoundMixerl类
高级应用,也就是我们常见的EQ波形条和左右声道的控制,才会用到这里的SoundMixer类。它的附属类SoundTransform类主要用于控制左右声道,由于flash mp3一般没有控制声道的例子,一般不需要去研究。
这里我们需要看看mp3播放的主流程。
转自:http://bbs.9ria.com/forum.php?mod=viewthread&tid=333&page=1