开发者

How to widen up the sound wave in AS3?

I am implementing this code for drawing the sound wave. It is in the adobe livedocs at soundmixer . My problem is how to widen up the sound wave? For example I would like it to be 655 pixels. I can change it to draw to different channels and also change the height of the drawing but cannot find how to change the width of the whole drawing

Any idea how to do that?

Thanks.

  package {
     import flash.display.Sprite;
     import flash.display.Graphics;
     import flash.events.Event;
     import flash.media.Sound;
     import flash.media.SoundChannel;
      import flash.media.SoundMixer;
     import flash.net.URLRequest;
      import flash.utils.ByteArray;
     import flash.text.TextField;

    public class SoundMixer_computeSpectrumExample extends Sprite {

        public function SoundMixer_computeSpectrumExample() {
           var snd:Sound = new Sound();
           var req:URLRequest = new URLRequest("Song1.mp3");
           snd.load(req);

           var channel:SoundChannel;
           channel = snd.play();
           addEventListener(Event.ENTER_FRAME, onEnterFrame);
           channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
        }

       private function onEnterFrame(event:Event):void {
           var bytes:ByteArray = new ByteArray();
           const PLOT_HEIGHT:int = 25;
           const CHANNEL_LENGTH:int = 256;

           SoundMixer.computeSpectrum(bytes, false, 0);

           var g:Graphics = this.graphics;

           g.clear();

           g.lineStyle(0, 0x6600CC);
          开发者_C百科 g.beginFill(0x6600CC);
            g.moveTo(0, PLOT_HEIGHT);

           var n:Number = 0;

           for (var i:int = 0; i < CHANNEL_LENGTH; i++) {
               n = (bytes.readFloat() * PLOT_HEIGHT);
               g.lineTo(i * 2, PLOT_HEIGHT - n);
           }

           g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
           g.endFill();

           g.lineStyle(0, 0xCC0066);
           g.beginFill(0xCC0066, 0.5);
           g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);

           for (i = CHANNEL_LENGTH; i > 0; i--) {
               n = (bytes.readFloat() * PLOT_HEIGHT);
               g.lineTo(i * 2, PLOT_HEIGHT - n);
           }

           g.lineTo(0, PLOT_HEIGHT);
           g.endFill();
        }

         private function onPlaybackComplete(event:Event):void {
             removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
     }
 }


change the x factor in your lineTo(x,y) calls.

for example, change:

g.lineTo(i * 2, PLOT_HEIGHT - n);

to something like:

var xfactor:Number = 655/256;
g.lineTo(i * xfactor, PLOT_HEIGHT - n);

since xfactor is fixed, calculate it before you enter your loops (not within them(

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜