Вопрос

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);
           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(

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top