if(widgetStylesPrinted != true) {document.write('');}var widgetStylesPrinted = true;var content = '
Pixel Bender Audio Sample MXML
actionscript3
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="162" height="274">
  3. <mx:Script>
  4. <![CDATA[
  5. private var source:Sound = new Sound();
  6. private var output:Sound = new Sound();
  7. private var sourcePos:Number = 0;
  8. private static var BUFFER_SIZE:uint = 0x800;
  9. [Embed(source="../pbj/Volume1Channel.pbj", mimeType="application/octet-stream")]
  10. private var volumeFilter:Class;
  11. private var effectShader:Shader = new Shader(new volumeFilter() as ByteArray);
  12.  
  13. private function loadAudioFile():void
  14. {
  15. var fileToLoad:File = new File();
  16. fileToLoad.browseForOpen( "choose an audio file", [new FileFilter("MP3 file", "*.mp3") ] );
  17. fileToLoad.addEventListener(Event.SELECT, audioFileSelected);
  18. }
  19. private function audioFileSelected(event:Event):void
  20. {
  21. var fileToLoad:File = event.target as File;
  22. fileToLoad.removeEventListener(Event.SELECT, audioFileSelected);
  23. var urlRequest:URLRequest = new URLRequest(fileToLoad.url);
  24. source.load(urlRequest);
  25. source.addEventListener(Event.COMPLETE, sourceFileLoaded);
  26. }
  27. private function sourceFileLoaded(event:Event):void
  28. {
  29. event.target.removeEventListener(Event.COMPLETE, sourceFileLoaded);
  30. output.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
  31. output.play();
  32. }
  33.  
  34. private function processSound(event:SampleDataEvent):void
  35. {
  36. var shaderBuffer:ByteArray = new ByteArray();
  37. shaderBuffer.length = BUFFER_SIZE * 2 * 4;
  38. sourcePos += source.extract(shaderBuffer, BUFFER_SIZE, sourcePos);
  39. shaderBuffer.position=0;
  40.  
  41. effectShader.data["source"].width = BUFFER_SIZE / 1024;
  42. effectShader.data["source"].height = 512;
  43. effectShader.data["source"].input = shaderBuffer;
  44. effectShader.data["volume"].value = [ leftSlider.value, righttSlider.value ];
  45.  
  46. var effectJob:ShaderJob = new ShaderJob( effectShader, event.data, BUFFER_SIZE / 1024, 512 );
  47. effectJob.start(true);
  48. if ( ( sourcePos >= (source.bytesLoaded*2) ) && loopBtn.selected )
  49. {
  50. sourcePos = 0;
  51. }
  52. }
  53. ]]>
  54. </mx:Script>
  55. <mx:Button x="10" y="10" label="Load Audio" id="LoadAudioBtn" click="loadAudioFile()"/>
  56. <mx:CheckBox x="107" y="10" label="loop" id="loopBtn"/>
  57. <mx:VSlider x="60" y="55" minimum="0.0" maximum="1.2" snapInterval="0.05" value="1.0" id="leftSlider" />
  58. <mx:VSlider x="92" y="55" minimum="0.0" maximum="1.2" snapInterval="0.05" value="1.0" id="righttSlider" />
  59.  
  60. </mx:WindowedApplication>
  61.  
';document.write(content);