/flash/soundtouch-as3/examples/player/stretch.mxml

http://echo-nest-remix.googlecode.com/ · Macromedia eXtensible Markup Language · 114 lines · 93 code · 21 blank · 0 comment · 0 complexity · d6b9920d38947d2396fd38615f042357 MD5 · raw file

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
  3. <mx:Panel title="TD Stretch Demo" width="100%" paddingTop="10" paddingRight="10" paddingBottom="10" paddingLeft="10">
  4. <mx:HBox paddingBottom="10">
  5. <mx:Button id="browseButton" label="Choose a song…" click="chooseFile();"/>
  6. </mx:HBox>
  7. <mx:VBox width="100%">
  8. <mx:Label text="Tempo Adjustment"/>
  9. <mx:HSlider id="tempoSlider" minimum="0" maximum="2" value="1" snapInterval="0.01" liveDragging="false" change="updateTempo();" width="100%"/>
  10. </mx:VBox>
  11. <mx:Button id="playButton" label="Play" enabled="false" click="togglePlayPause();"/>
  12. </mx:Panel>
  13. <mx:Script><![CDATA[
  14. import com.ryanberdeen.audio.SampleSourcePlayer;
  15. import com.ryanberdeen.audio.SoundSampleSource;
  16. import com.ryanberdeen.soundtouch.StretchSS;
  17. import flash.events.Event;
  18. import flash.media.Sound;
  19. import flash.net.FileReference;
  20. import mx.collections.ArrayCollection;
  21. import org.audiofx.mp3.MP3FileReferenceLoader;
  22. import org.audiofx.mp3.MP3SoundEvent;
  23. private var fileReference:FileReference;
  24. private var mp3Loader:MP3FileReferenceLoader;
  25. private var sound:Sound;
  26. private var player:SampleSourcePlayer;
  27. private var playing:Boolean;
  28. private var stretchSs:StretchSS;
  29. private function reset():void {
  30. resetPlayer();
  31. }
  32. private function resetPlayer():void {
  33. if (player != null) {
  34. player.stop();
  35. player = null;
  36. }
  37. }
  38. private function chooseFile():void {
  39. reset();
  40. fileReference = new FileReference();
  41. fileReference.addEventListener(Event.SELECT, function(e:Event):void {
  42. loadSound();
  43. });
  44. fileReference.browse();
  45. }
  46. private function loadSound():void {
  47. mp3Loader = new MP3FileReferenceLoader();
  48. mp3Loader.addEventListener(Event.COMPLETE, handleSoundLoadComplete);
  49. mp3Loader.getSound(fileReference);
  50. }
  51. private function handleSoundLoadComplete(e:MP3SoundEvent):void {
  52. mp3Loader.removeEventListener(Event.COMPLETE, handleSoundLoadComplete);
  53. sound = e.sound;
  54. preparePlayer();
  55. }
  56. private function preparePlayer():void {
  57. resetPlayer();
  58. player = new SampleSourcePlayer();
  59. player.addEventListener(Event.SOUND_COMPLETE, playerSoundCompleteHandler);
  60. stretchSs = new StretchSS(sound, tempoSlider.value);
  61. player.sampleSource = stretchSs;
  62. playButton.enabled = true;
  63. playButton.label = "Play";
  64. playing = false;
  65. }
  66. private function playerSoundCompleteHandler(e:Event):void {
  67. preparePlayer();
  68. }
  69. private function togglePlayPause():void {
  70. if (!playing) {
  71. play();
  72. }
  73. else {
  74. pause();
  75. }
  76. }
  77. private function play():void {
  78. player.start();
  79. playButton.label = "Pause";
  80. playing = true;
  81. }
  82. private function pause():void {
  83. player.stop();
  84. playButton.label = "Play";
  85. playing = false;
  86. }
  87. private function updateTempo():void {
  88. if (player != null) {
  89. preparePlayer();
  90. }
  91. }
  92. ]]></mx:Script>
  93. </mx:Application>