0

私は音波を描くためにこのコードを実装しています。これは、soundmixerのadobelivedocsにあります。私の問題は、音波をどのように広げるかです。たとえば、655ピクセルにします。別のチャンネルに描画するように変更したり、描画の高さを変更したりできますが、描画全体の幅を変更する方法が見つかりません

それを行う方法はありますか?

ありがとう。

  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);
        }
     }
 }
4

1 に答える 1

2

lineTo(x,y) 呼び出しの x 係数を変更します。

たとえば、次のように変更します。

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

次のようなものに:

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

xfactor は固定されているため、ループに入る前に計算してください (ループ内ではなく(

于 2011-09-23T13:20:17.890 に答える