2011-09-23 46 views
0

我正在執行此代碼來繪製聲波。它位於soundmixer的土坯住房。我的問題是如何擴大聲波?例如,我希望它是655像素。我可以改變它來繪製到不同的渠道,也改變繪圖的高度,但無法找到如何改變整個圖紙的寬度如何擴大AS3中的聲波?

任何想法如何做到這一點?

謝謝。

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

回答

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是固定的,你進入你的循環之前計算的話(在其中(

+0

wooow感謝不行。真正有用:) – Vlad