topical media & game development
#graphic-flex-image-effects-11-Flex-SoundWave.ax
#graphic-flex-image-effects-11-Flex-SoundWave.ax
[swf]
[flash]
flex
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.ByteArray;
[SWF(width=400, height=300, backgroundColor=0x000000)]
Demonstrates how to visualize a playing sound file's raw sound wave
as a vertical column chart of 512 values.
public class @ax-graphic-flex-image-effects-11-Flex-SoundWave extends Sprite {
// the dimensions of the visualization
private const WAVE_WIDTH:uint = 300;
// this is actually half of the total height as it goes both positive and negative
private const WAVE_HEIGHT:uint = 100;
// the color of the columns
private const WAVE_COLOR:uint = 0xFFFFFF;
private var _soundController:graphic_flex_image_effects_11_Flex_SoundController;
Constructor. Loads the sound file using SoundController.
public function @ax-graphic-flex-image-effects-11-Flex-SoundWave() {
_soundController = new graphic_flex_image_effects_11_Flex_SoundController("graphic-flex-image-effects-11-assets-AlienInTheCaverns.mp3");
_soundController.addEventListener(Event.CHANGE, onSoundChange);
}
Updates the column chart sound visualization with the current sound data.
private function updateGraph():void {
// returns the raw sound wave data of the sound playing
var spectrumData:ByteArray = _soundController.getSoundSpectrum(false);
graphics.clear();
graphics.beginFill(WAVE_COLOR);
// how columns will be scaled horizontally to fit within the desired dimensions
var ratio:Number = WAVE_WIDTH/512;
var x:Number = (stage.stageWidth-WAVE_WIDTH)/2;
// will center the chart vertically
var y:Number = stage.stageHeight/2;
var i:int = -1;
var value:Number;
while (++i < 512) {
// the value is scaled vertically to fit within the desired dimensions
value = Math.ceil(WAVE_HEIGHT*spectrumData.readFloat());
// draw the column in a negative direction so that is drawn "up" on the y axis
graphics.drawRect(x+i*ratio, y, 1, -value);
}
}
Handler for when the sound changes (basically, an ENTER_FRAME while the sound is playing).
This calls updateGraph() to redraw column chart.
parameter: event Event dispatched by SoundController.
private function onSoundChange(event:Event):void {
updateGraph();
}
}
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.