Flash学习As3音乐播放器教程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Flash学习As3音乐播放器教程

那么开始吧!大家先下载一下源文件。对着源文件的结构看教程。我将整个播放器做到一个元件中(Control_panel),再给它绑定一个类(sound_lib.Control_panel),所有的代码就写在这个类里面了。这样做的好处是:日后要用到它时,直接把Control_panel元件拖到你要用的地方就Ok了!

接下来就是code了:要做音乐播放器,最重要的两个类当然就是Sound和SoundChannel。先试一下,怎样让一首mp3播放起来:

1. //建立一个Sound类

2. sound=new Sound()

3. //加载mp3文件

4. sound.load(new URLRequest(“你的mp3路径”))

5. //播放

6. sound.play()

Ok了!

完整代码:

1. package sound_lib{

2. import flash.display.*

3. import flash.media.Sound

4. import flash.media.SoundChannel

5. import .URLRequest

6. public class Control_panel extends MovieClip{

7. private varsound:Sound

8. private constsound_url:String="sound_data/m01.mp3"

9. public function Control_panel(){

10. init()

11. }

12. private function init(){

13. sound_init()

14. }

15. function sound_init(){

16. sound=new Sound()

17. sound.load(new URLRequest(sound_url))

18. sound.play()

19. }

20. }

21. }

22.

Ctrl+Enter一下。是不是听到音乐了?啊?没听到?看看sound_data目录下是否放了mp3

文件没?如果一切正常的话,你现在应该在享受你的音乐了。

呵呵。不过别忘了大多数播放器是要用在web上的。有时候声音播放的速度可能比下载的速度还要快,这种情况下声音播放就会暂停等待数据下载,为了更好的处理这个环节,我们可以设置一个数据缓冲区,当声音数据下载到一定数量时再进行播放,这样的话即使下载速度偶尔变慢也不会影响正常播放。默认下Sound对象只创建1秒钟的缓冲,也就是说要想立即播放也需要等待1秒钟的缓冲,缓冲区的数据播放完后要想再次播放还要至少等1秒钟缓冲时间。显然如果网速较慢的话且缓冲为1秒时,在这种情况下音乐的播放将会给人很”卡”的感觉。所以我们必需手动设置一下缓冲:

设置缓冲需要用到SoundLoaderContext类:建立一个SoundLoaderContext对象,然后设置它的bufferTime属性就行了。最后将SoundLoaderContext对象传给sound对象的load()方法的参数就行了。

1. //建立一个SoundLoaderContext类,设置bufferTime为5秒

2. varbuffer:SoundLoaderContext=new SoundLoaderContext(5000)

3. sound=new Sound()

4. sound.load(new URLRequest(sound_url),buffer)

5. sound.play()

声音的暂停与回放

这样,即使放到web上也不成问题了。不过现在只是能正常播放了,我们还得控制它才行嘛!最常见的控制就是暂停与回放了。声音的暂停与回放不像视频流那样,可以直接pause 和resume来操作。看看Soun类,大家可能会调用Sound对象的close( )方法可以停止播放,但是这样也停止了声音流,要想重新播放,必须再次调用load( )方法。这显然不是我们想要的。这里我们终于要用到上面所提到的SoundChannel了,其实对音频的绝大多数操作都是SoundChannel类来完成的。SoundChannel的stop()方法可以让音乐暂停而不影响声音流的中断。于是我们可以用SoundChannel对象的stop()方法与Sound对象的play()方法来暂停与回流音频流。但是,当再次调用play( )方法时,音乐会从头开始播放而不是从暂停的地方开始,这个时候就要用到SoundChannel类的position属性了:position属性是用来记录音乐播放头的。我们可以在暂停时,记录下position的值,然后再次调play()时,将它传给play()方法的参数。这样就达到了最终目:

1. sound_channel.stop()

2. //记录position属性

3. position=sound_channel.position

4. sound_channel=sound.play(position)

完整代码:

1. package sound_lib{

2. import flash.display.*

3. import flash.media.Sound

4. import flash.media.SoundChannel

5. import flash.media.SoundLoaderContext

6. import flash.events.*

7. import .URLRequest

8. public class Control_panel extends MovieClip{

9. private varsound:Sound

10. private constsound_url:String="sound_data/m01.mp3"

11. private varsound_channel:SoundChannel

12. private varposition:int

13. private varis_play:Boolean

14. public function Control_panel(){

15. addEventListener(Event.ADDED_TO_STAGE,add_to_stage)

16. }

17. private function add_to_stage(_evt:Event):void{

18. init()

19. }

20. private function init(){

21. sound_init()

22. control_init()

23. }

24. //==================sound part====================//

25. function sound_init(){

26. varbuffer:SoundLoaderContext=new SoundLoaderContext(5000)

27. sound=new Sound()

28. sound.load(new URLRequest(sound_url),buffer)

29. sound_channel=sound.play()

30. is_play=true

31. play_mc.visible=false

32. }

33. //===================control part=================//

34. function control_init(){

35. pause_mc._btn.addEventListener(MouseEvent.CLICK,is_play_Handler)

36. play_mc._btn.addEventListener(MouseEvent.CLICK,is_play_Handler)

37. }

38. private function is_play_Handler(_evt:MouseEvent):void{

39. if(is_play){

40. is_play=false

41. position=sound_channel.position

42. sound_channel.stop()

43. play_mc.visible=true

44. pause_mc.visible=false

相关文档
最新文档