微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AS3.0频谱-01

AS3.0频谱系列-01:

package fengzi.spectrum
{
	
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.media.soundmixer;
	import flash.utils.ByteArray;
	import flash.utils.Timer;
	import flash.geom.Matrix;
	import flash.display.BitmapData;
	import flash.display.Bitmap;
	import flash.geom.ColorTransform;
	import flash.filters.BlurFilter;
	import flash.filters.displacementMapFilter;

	public class Spectrum_01 extends Sprite
	{
		private var _sprite:Sprite;
		private var timer:Timer;
		private var thisW:Number;
		private var thisH:Number;

		private var byteArray:ByteArray;

		var sdis:Number = 30;
		var ldis:Number = 100;
		var maxdis:Number;
		var bitmapData:BitmapData;
		private var bitmap:Bitmap;
		var colorTF:ColorTransform = new ColorTransform(0.90,1,1,0.90);
		var numArr:Array = [];
		private var onBg:Boolean
                private var color:uint

		/**
		 * Spectrum_01   构造函数(实例)
		 * @param        width           宽
		 * @param        height          高
               * @param        _color          颜色 
		 * @param        onBg            黑色背景的布尔值(认false黑色背景,true透明)
		 */
		public function Spectrum_01(width:Number=550,height:Number=400,_color:uint=0xFF00FF,_onBg:Boolean=false)
		{
			thisW = width;
			thisH = height;
                        color=_color
			onBg=_onBg
			maxdis = height / 4;
			byteArray= new ByteArray();
			_sprite = new Sprite();
			for (var i:int= 0; i < 256; ++ i)
			{
				numArr[i] = 0;
			}

			bitmapData = new BitmapData(thisW,thisH,onBg,0);
			bitmap = addChild(new Bitmap(bitmapData)) as Bitmap;
			addChild( _sprite );

			timer = new Timer(30);
			timer.addEventListener(TimerEvent.TIMER,timerHandler);
			timer.start();

		}



		/**
		 * onStageReSize()
		 * Event.RESIZE时调用方法,频谱随舞台缩放
		 */
		public function onStageReSize():void
		{
			thisW = stage.stageWidth;
			thisH = stage.stageHeight;
			maxdis = height / 4;
			if (bitmapData)
			{
				bitmapData.dispose();
			}
			bitmapData = new BitmapData(thisW,thisH,onBg,0);

			bitmap = addChild(new Bitmap(bitmapData)) as Bitmap;
		}


		private function timerHandler(event:TimerEvent):void
		{
			var aPower:Number = 3;
			var num:Number;

			Soundmixer.computeSpectrum( byteArray, false );

			aPower /=  2;
			_sprite.graphics.clear();
			_sprite.graphics.linestyle( 1, color );
			for (var i:int= 0; i < 128; i++)
			{
				num = Math.abs(byteArray.readFloat() + 0.1);
				numArr[ i ] += (num-numArr[ i ] ) * 0.25;
				num = numArr[i];
				_sprite.graphics.drawCircle( thisW/2 + Math.sin(i * 360 / 128 * Math.PI / 180) * (sdis+num*maxdis),thisH/2 + Math.cos(i * 360 

/ 128 * Math.PI / 180) * (sdis+num*maxdis), num * 20 );


			}

			_sprite.graphics.beginFill( 0xFF33FF, 1 );
			for (i = 0; i <128; ++ i)
			{
				num = Math.abs(byteArray.readFloat() + 0.1);
				numArr[ i ] += (num-numArr[ i ] ) * 0.25;
				_sprite.graphics.drawCircle( thisW/2+ Math.sin(i * 360 /128 * Math.PI / 180) * (ldis+num*maxdis),thisH/2 + Math.cos(i * 360 

/128 * Math.PI / 180) * (ldis+num*maxdis),num * num * 10 );
			}
			bitmapData.draw( _sprite );
			//bitmapData.fillRect( new Rectangle( 0,0, bitmapData.width, 1 ), 0 );
			//bitmapData.fillRect( new Rectangle( 0,0, 1, bitmapData.height ), 0 );
			//bitmapData.scroll( aPower *0, aPower *0);
			bitmapData.colorTransform( bitmapData.rect, colorTF);
			bitmapData.applyFilter( bitmapData, bitmapData.rect, new Point, new BlurFilter(2,2));
			bitmapData.applyFilter(bitmapData,bitmapData.rect,new Point(),new displacementMapFilter(bitmapData,new Point(),1,2,5,5,"clamp"));
		}

	}
}

  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐