<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:controls="com.cynergysystems.controls.*" frameRate="75" layout="absolute" creationComplete="onCreationComplete()" horizontalScrollPolicy="off" verticalScrollPolicy="off" viewSourceURL="srcview/index.html"> <mx:Style source="styles.css" /> <mx:Script> <![CDATA[ import mx.effects.easing.Bounce; [Bindable] private var sound : Sound; private var soundChannel : SoundChannel; private var file : URLRequest; [Bindable] private var playing : Boolean = false; [Bindable] private var loading : Boolean = false; [Bindable] private var lColor:uint = 0x660000; [Bindable] private var rColor:uint = 0x000066; [Bindable] private var freqBars:uint = 25; private static const initialAlpha : Number = .3; private static const finalAlpha : Number = 1; [Bindable] private var fileArray : Array = [ { label:"1000 Hz Sine Wave", url:"http://www.cynergysystems.com/blogs/blogs/andrew.trice/visualization/assets/audio/Sin1000Hz.mp3" }, { label:"85 Hz Sine Wave", url:"http://www.cynergysystems.com/blogs/blogs/andrew.trice/visualization/assets/audio/85Hz_sinewave.mp3" }, { label:"Pink Noise", url:"http://www.cynergysystems.com/blogs/blogs/andrew.trice/visualization/assets/audio/g_pink.mp3" }, { label:"Frequency Sweep", url:"http://www.cynergysystems.com/blogs/blogs/andrew.trice/visualization/assets/audio/g_sweep1.mp3" }, { label:"Music", url:"http://www.cynergysystems.com/blogs/blogs/andrew.trice/visualization/assets/audio/03-Last Train Home.mp3" } ]; private function onCreationComplete() : void { addEventListener( Event.ENTER_FRAME, onEnterFrame ); } private function onSoundOpen( event : Event ) : void { progress.label = "opening media..."; } private function onSoundProgress( event : ProgressEvent ) : void { progress.label = "loading: " + event.bytesLoaded.toString() + "/" + event.bytesTotal.toString(); progress.setProgress( event.bytesLoaded, event.bytesTotal); } private function onEnterFrame( event : Event ) : void { if ( soundChannel != null && playing ) { if ( playing ) progress.setProgress( soundChannel.position, sound.length ); } } private function play() : void { if(playing) soundChannel.stop(); playing = false; if ( dg.selectedItem == null ) return; if ( sound != null ) { sound.removeEventListener( Event.COMPLETE, onSoundComplete ); sound.removeEventListener( Event.OPEN, onSoundOpen ); sound.removeEventListener( ProgressEvent.PROGRESS, onSoundProgress ); } if(soundChannel != null) soundChannel.removeEventListener(Event.SOUND_COMPLETE, onSoundPlayComplete ); sound = new Sound(); file = new URLRequest( dg.selectedItem.url ); sound.load( file ); loading = true; sound.addEventListener( Event.COMPLETE, onSoundComplete ); sound.addEventListener( Event.OPEN, onSoundOpen ); sound.addEventListener( ProgressEvent.PROGRESS, onSoundProgress ); sound.addEventListener( ProgressEvent.PROGRESS, onSoundProgress ); } private function onSoundComplete( event : Event ) : void { loading = false; progress.label = "playing"; progress.setProgress( 0, sound.length ); soundChannel = sound.play( 0 ); soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundPlayComplete ); playing = true; } private function onSoundPlayComplete( event : Event ) : void { playing = false; progress.label = "stopped"; progress.setProgress( 0, sound.length ); } private function stop() : void { soundChannel.stop(); playing = false; } ]]> </mx:Script> <mx:SWFLoader source="@Embed('assets/logo.swf')" horizontalCenter="0" verticalCenter="0" width="602" height="540"/> <mx:Panel alpha="{ initialAlpha }" creationCompleteEffect="{ creationCompleteEffect }" layout="absolute" visible="true" title="Peak Visualization" height="352" width="136" horizontalCenter="-242" verticalCenter="4"> <controls:PeakVisualization top="10" bottom="10" left="10" right="10" lColor="{ lColor }" rColor="{ rColor }" /> </mx:Panel> <mx:Panel alpha="{ initialAlpha }" creationCompleteEffect="{ creationCompleteEffect }" layout="absolute" visible="true" title="Waveform Visualization" height="164" width="269" horizontalCenter="-31.5" verticalCenter="-90"> <controls:WaveformVisualization top="10" bottom="10" left="10" right="10" lColor="{ lColor }" rColor="{ rColor }" /> </mx:Panel> <mx:Panel alpha="{ initialAlpha }" creationCompleteEffect="{ creationCompleteEffect }" layout="absolute" visible="true" title="Frequency Visualization" height="164" width="200" horizontalCenter="211" verticalCenter="-90"> <controls:FrequencyVisualization id="fv" top="10" bottom="10" left="10" right="10" lColor="{ lColor }" rColor="{ rColor }" bars="{ freqBars }" /> </mx:Panel> <mx:Panel alpha="{ initialAlpha }" creationCompleteEffect="{ creationCompleteEffect }" layout="absolute" visible="true" id="player" title="Options" height="180" width="477" horizontalCenter="72.5" verticalCenter="90"> <mx:DataGrid top="10" bottom="10" left="10" right="215" dataProvider="{ fileArray }" id="dg" > <mx:columns> <mx:DataGridColumn headerText="Sound Type" dataField="label"/> </mx:columns> </mx:DataGrid> <mx:Button label="Play Selected File" click="play()" id="playButton" width="124" left="250" top="10" height="22" enabled="{ !loading }" /> <mx:ProgressBar id="progress" mode="manual" left="250" right="10" top="102" label="select a file on the left"/> <mx:ColorPicker bottom="85" right="161" id="leftColor" selectedColor="{lColor}" change="lColor=leftColor.selectedColor" /> <mx:ColorPicker bottom="85" right="83" id="rightColor" selectedColor="{rColor}" change="rColor=rightColor.selectedColor" /> <mx:Label text="L:" bottom="87" left="250"/> <mx:Label text="R:" bottom="87" left="326"/> <mx:NumericStepper id="bars" x="292" y="72" value="{ freqBars }" change="freqBars=bars.value;fv.invalidateDisplayList();" minimum="1" maximum="255" width="82"/> <mx:Label x="250" y="74" text="Bars:"/> <mx:Button x="382" y="10" label="Stop" enabled="{ playing }" click="stop()" width="65"/> </mx:Panel> <mx:Sequence id="creationCompleteEffect" > <mx:WipeDown duration="600" moveEasingFunction="Bounce.easeOut" /> <mx:Fade duration="600" alphaFrom="{ initialAlpha }" alphaTo="{ finalAlpha }" /> </mx:Sequence> </mx:Application>