Flex中利用SoundMixer.computeSpectrum事件显示声音数据的例子

By Minidxer | July 25, 2008

接下来的例子演示了Flex中利用SoundMixer.computeSpectrum事件,显示声音数据。

下面是完整代码:


Download: main.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3.         layout="vertical"
  4.         creationComplete="init()">
  5.  
  6.     <mx:Script>
  7.         <![CDATA[
  8.             import mx.core.SoundAsset;
  9.  
  10.             [Embed('assets/song1.mp3')]
  11.             private const song1:Class;
  12.  
  13.             private var mySong:SoundAsset = SoundAsset(new song1());
  14.  
  15.             private var byteArray:ByteArray = new ByteArray();
  16.  
  17.             private var timer:Timer;
  18.  
  19.             private function init():void {
  20.                 timer = new Timer(50);
  21.                 timer.addEventListener(TimerEvent.TIMER, doTimer);
  22.             }
  23.  
  24.             private function doTimer(evt:TimerEvent):void {
  25.                 SoundMixer.computeSpectrum(byteArray, true);
  26.  
  27.                 spr.graphics.clear();
  28.                 drawChannel(LEFT_CHANNEL_COLOR);
  29.                 drawChannel(RIGHT_CHANNEL_COLOR);
  30.             }
  31.  
  32.             private function drawChannel(color:uint):void {
  33.                 var f:Number;
  34.                 var i:int;
  35.  
  36.                 spr.graphics.lineStyle(1, color);
  37.                 spr.graphics.beginFill(color, 0.6);
  38.                 spr.graphics.moveTo(0, GRAPH_HEIGHT);
  39.                 for (i = 0; i < 256; i++) {
  40.                     f = byteArray.readFloat();
  41.                     spr.graphics.lineTo(i * 2, GRAPH_HEIGHT - ((f * GRAPH_HEIGHT)) * 0.75);
  42.                 }
  43.                 spr.graphics.lineTo(512, GRAPH_HEIGHT);
  44.                 spr.graphics.endFill();
  45.             }
  46.  
  47.             private function playSong():void {
  48.                 mySong.play();
  49.             }
  50.         ]]>
  51.     </mx:Script>
  52.  
  53.     <mx:Number id="GRAPH_WIDTH">512</mx:Number>
  54.     <mx:Number id="GRAPH_HEIGHT">256</mx:Number>
  55.  
  56.     <mx:Number id="LEFT_CHANNEL_COLOR">0xFF0000</mx:Number>
  57.     <mx:Number id="RIGHT_CHANNEL_COLOR">0x0000FF</mx:Number>
  58.  
  59.     <mx:ApplicationControlBar width="{GRAPH_WIDTH}">
  60.         <mx:Label text="Left:" color="{LEFT_CHANNEL_COLOR}" fontWeight="bold" />
  61.         <mx:Label text="Right:" color="{RIGHT_CHANNEL_COLOR}" fontWeight="bold" />
  62.         <mx:Spacer width="100%" />
  63.         <mx:Button label="Play" click="playSong(); timer.start()" />
  64.     </mx:ApplicationControlBar>   
  65.  
  66.     <mx:VBox id="hbox" width="{GRAPH_WIDTH}" height="{GRAPH_HEIGHT}" backgroundColor="white">
  67.         <mx:Box id="spr" width="100%" height="100%" />
  68.     </mx:VBox>
  69.  
  70. </mx:Application>
代码:Peter deHaan 翻译/整理/编译:minidxer

Topics: Flex | No Comments » | Tags: , ,

你可能还对下列文章感兴趣:

Leave a Comment

Name(*):

E-Mail(*) :

Website :

Comments :

Search Posts