·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3.0下声音控制有关的类介绍

时间:2013-05-10 16:30MeetLunay
我们最常用的是该对象并播放该文件、关闭声音流,以及访问有关声音的数据,如有关流中字节数和 ID3元数据的信息。可通过以下项对声音执行更精细的控制

  我们最常用的是该对象并播放该文件、关闭声音流,以及访问有关声音的数据,如有关流中字节数和 ID3元数据的信息。可通过以下项对声音执行更精细的控制:声音源(声音的 SoundChannel或 Microphone对象)和 SoundTransform类中用于控制向计算机扬声器输出声音的属性。前4个类,现在我们对以上各类的功能及使用一一学习。

  一、Sound类:

  AS3.0帮助文件中对Sound类做如下说明:

  Sound类允许您在应用程序中使用声音。使用 Sound类可以创建新的 Sound对象、将外部 MP3文件加载到

 理解:

  这段文字告诉我们,一旦我们实例化Sound对象,就是告诉程序:我要使用声音文件了,实际上是一种授权,就是Sound对象授权程序可以使用声音文件,而且声音文件的使用也得靠Sound对象自己来完成,比如加载声音文件、播放声音文件、关闭声音流等工作都是由Sound对象自己来完成的。如果还要对声音文件进行更精细的控制,就得借助于其它相关类,比如,要控制声音的左右声道和播放位置就要借助于SoundChannel类,要控制音量就得借助于SoundTransform类。

以下示例演示如何告知程序要使用声音文件并加载、播放该声音文件:

  准备工作:

  在同一文件夹内放放一首MP3音乐,并新建一个fla文件,fla文件的场景中拖入一个按钮实例名分别为pl_btn,选中第一帧,打开动作面板,输入以下代码:

  1. var url:URLRequest=new URLRequest("CuPlayer.com.mp3"); 
  2. //定义URLRequest对象,指定声音文件地址 
  3. var mySound:Sound=new Sound(); 
  4. //定义Sound对象,告诉程序将要使用声音文件 
  5. mySound.load(url); 
  6. // CuPlayer.com提示 Sound对象加载声音文件 
  7. pl_btn.addEventListener(MouseEvent.CLICK,onCLICK); 
  8. function onCLICK(e:MouseEvent) { 
  9. mySound.play(); 
  10. //Sound对象播放声音文件 

  测试效果,源文件见所附文件夹内“认识Sound类”文件,至于对声音文件的更精细控制我们将在以后学习。

  在 Flash Player 10和更高版本中,也可以使用此类来处理动态生成的声音。在这种情况下,Flash Player将使用您分配给 sampleData事件处理程序的函数来轮询声音数据。从用声音数据填充的 ByteArray对象检索声音的同时播放声音。可以使用 Sound.extract()从 Sound对象中提取声音数据,然后在将声音数据写回到流以进行播放之前可以对其进行操作。

  示例一:(动态生成正弦声音)

  新建fla文件,打动作面板,输入以下代码:

  1. var mySound:Sound = new Sound(); 
  2. //定义空的声音对象mySound,告知程序要使用声音文件 
  3. mySound.addEventListener(SampleDataEvent.SAMPLE_DATA, sineWaveGenerator); 
  4. //mySound对象添加SampleDataEvent侦听器CuPlayer.com 
  5. mySound.play(); 
  6. //播放声音时播放器将继续发送SampleDataEvent事件,
    //类似侦频事件,只要声音播放,就会不停的触发SampleDataEvent事件 
  7. function sineWaveGenerator(e:SampleDataEvent):void { 
  8. for (var i:int = 0; i < 8192; i++) { 
  9. var n:Number=Math.sin(i*180/Math.PI); 
  10. e.data.writeFloat(n); 
  11. //此函数使用writeFloat()方法写入数据n到ByteArray对象 (e.data)。 

  测试效果,源文件见所附文件夹内“动态生成声音”文件。

  说明:以上代码中Sound对象并不包含声音数据,他只是通过SampleDataEvent.SAMPLE_DATA事件侦听sineWaveGenerator函数,而sineWaveGenerator函数生成声音数据通过BytesArray对象的writeFloat方法写入到BytesArray对象中去,然后再由Sound对象检索BytesArray对象对象中的声音数据并播放。此过程中只要声音不停止,就会持续发送SampleDataEvent事件,持续执行sineWaveGenerator函数为Sound对象提供声音数据,一旦停止声音播放,如SoundChannel.stop(),就会停止发送事件。

  使用 Sound.extract()方法提取 Sound对象中的数据。可以使用(和修改)该数据,将其写入另一个 Sound对象的动态流以进行播放。例如,以下代码使用加载的 MP3文件的字节,并通过过滤函数 upOctave()进行传递:示例二(修改已知声音文件数据并播放,起到快进效果)

  1. var mySound:Sound = new Sound(); 
  2. //创建空的Sound类对象待注入数据用于最后播放 
  3. var sourceSnd:Sound = new Sound(); 
  4. //创建空的Sound类对象(源对象)用于加载已有的声音文件 
  5. var urlReq:URLRequest=new URLRequest("CuPlayer.com.mp3"); 
  6. sourceSnd.load(urlReq); 
  7. //源对象加载声音文件“CuPlayer.com.mp3” 
  8. sourceSnd.addEventListener(Event.COMPLETE, loaded); 
  9. //源对象添加加载完成侦听事件 
  10. function loaded(event:Event):void { 
  11. mySound.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound); 
  12. //待注入数据声音对象添加SampleDataEvent侦听事件,以注入数据 
  13. mySound.play(); 
  14. //播放声音文件并继续触发SampleDataEvent侦听事件,以不断地注入数据 
  15. function processSound(event:SampleDataEvent):void { 
  16. var bytes:ByteArray = new ByteArray(); 
  17. //实例化ByteArray对象用以从源对象提取数据 
  18. sourceSnd.extract(bytes, 8192); 
  19. //ByteArray对象从源对象提取数据 
  20. event.data.writeBytes(upOctave(bytes)); 
  21. //CuPlayer.com提示:注入数据 
  22. function upOctave(bytes:ByteArray):ByteArray { 
  23. var returnBytes:ByteArray = new ByteArray(); 
  24. bytes.position=0
  25. while (bytes.bytesAvailable > 0) { 
  26. returnBytes.writeFloat(bytes.readFloat()); 
  27. returnBytes.writeFloat(bytes.readFloat()); 
  28. if (bytes.bytesAvailable>0) { 
  29. bytes.position+=8; 
  30. return returnBytes; 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器