zoukankan      html  css  js  c++  java
  • as3.0声音波形系列03_十组合

    // public onStageReSize():void
    
    package 
    {
    	import colors.ColorChange;
    	import flash.events.EventDispatcher;
    	import flash.media.SoundMixer;
    	import flash.events.TimerEvent;
    	import flash.utils.Timer;
    	import flash.events.MouseEvent;
    	import flash.display.BitmapData;
    	import flash.display.Bitmap;
    	import flash.geom.Point;
    	import flash.display.Sprite;
    	import flash.filters.BlurFilter;
    	import flash.filters.ColorMatrixFilter;
    	import flash.events.Event;
    	import flash.filters.DisplacementMapFilter;
    	import flash.utils.ByteArray;
    	import flash.display.Shape;
    
    	public class RonSoundFX extends Sprite
    	{
    		private var fxShape:Sprite;
    		private var th:uint;
    		private var tw:uint;
    		private var _fxID:int;
    		private var bn:int;
    		private var dy:Number;
    
    		private var bitmapdata:BitmapData;
    		private var _bitmapdata:BitmapData;
    
    		private var dz:Number = 0;
    
    		private var fn:Function;
    
    		private var listBar:Array;
    		private var mlArray:Array;
    		private var listVal:Array;
    		private var list256:Array;
    		private var listDot:Array;
    		private var list512:Array;
    
    		private var _isFilter:Boolean;
    		private var myTimer:Timer;
    		private var _color:ColorChange=new ColorChange();
    		private var bitmap:Bitmap;
    		var float:Number = 0;
    		var _byteArray:ByteArray;
    		
    		var alphaNumber:Number=0.66
    		/*宽度,高度,默认频谱ID,是否对频谱使用滤镜,是否自动切换频谱*/
    		public function RonSoundFX(w:int=400, h:int=300, n:int=0,_filter:Boolean=true,_start:Boolean=true,timer:uint=15,click:Boolean=true)
    		{
    			tw = w;
    			th = h;
    			_fxID = n;
    			if (_filter)
    			{
    				_isFilter = true;
    			}
    			else
    			{
    				_isFilter = false;
    			}
    
    			init();
    
    			myTimer = new Timer(timer*1000);//频谱顺序切换时间
    			myTimer.addEventListener("timer", timerHandler);
    			if (_start)
    			{
    				myTimer.start();
    			}
    			else
    			{
    				myTimer.stop();
    			}
    			
    			if(click){
    				
    				this.addEventListener(MouseEvent.CLICK,thisClickHandler);
    			}
    			else
    			{
    				this.removeEventListener(MouseEvent.CLICK,thisClickHandler);
    			}
    		}
    
    
    		private function init():void
    		{
    			fxShape=new Sprite();
    			_bitmapdata = new BitmapData(tw,th,true,0);
    			mlArray = gML();
    			
    			start()
    		}
    		
    		public function onStageReSize():void
    		{
    			tw =stage.stageWidth
    			th =stage.stageHeight
    			if(tw>800||th>800){
    				_isFilter = false
    			}else{
    				_isFilter =true
    			}
    			
    			start()
    		}
    
    
    
    
    
    		private function gML():Array
    		{
    			return ([waveForm01, waveForm02, waveForm03, waveForm04, waveForm05, waveForm06, waveForm07, waveForm08, waveForm09, waveForm10]);
    		}
    
    		private function waveForm01():void
    		{
    			alphaNumber=0.66
    			_byteArray = bytePosition(byteArray(true),true);
    			var num:Number = tw / bn;
    			fxShape.graphics.clear();
    			fxShape.graphics.beginFill(_color.color24);
    			for (var i:int=0; i < bn; i++)
    			{
    				float = th * 0.666 * _byteArray.readFloat();
    
    				_byteArray.position = _byteArray.position + Math.floor(252 / bn - 1) * 4;
    				listVal[i] = listVal[i] * 1.1;
    				listDot[i] = listDot[i] - listVal[i];
    				if (listDot[i] < float)
    				{
    					listVal[i] = dy * 0.5;
    					listDot[i] = float;
    				}
    				listBar[i] = listBar[i] - (listVal[i] + 2);
    				if (listBar[i] < float)
    				{
    					listBar[i] = float;
    				}
    				fxShape.graphics.drawRect(num * i, th, num - 1, -listBar[i]);
    				fxShape.graphics.drawRect(num * i, th - listDot[i] - 1, num - 1, 1);
    			}
    			fxShape.graphics.endFill();
    			waveFilter(false);
    		}
    
    		private function waveForm02():void
    		{
    			alphaNumber=0.998
    			_byteArray = bytePosition(byteArray());
    			fxShape.graphics.clear();
    			fxShape.graphics.lineStyle(1, _color.color24);
    			if (_byteArray.bytesAvailable)
    			{
    				float = th * 0.4 * _byteArray.readFloat();
    				fxShape.graphics.moveTo(0, (th * 0.5 + float));
    				for (var i:int=1; i < 256; i++)
    				{
    					float = th * 0.4 * _byteArray.readFloat();
    					fxShape.graphics.lineTo(i * (tw * 0.00390625), th * 0.5 + float);
    				}
    			}
    			waveFilter(false);
    		}
    
    
    		private function waveForm03():void
    		{
    			alphaNumber=0.92
    			_byteArray = byteArray(true);
    			var num:Number = tw * 0.00195313;
    			fxShape.graphics.clear();
    			fxShape.graphics.beginFill(_color.color24);
    			fxShape.graphics.moveTo((tw * 0.5), th);
    			if (_byteArray.bytesAvailable)
    			{
    				i = 255;
    				for (var i:int=255; i > 0; i--)
    				{
    					float = th * 0.666 * _byteArray.readFloat();
    					fxShape.graphics.lineTo(i * num, th - float);
    				}
    				fxShape.graphics.lineTo(0, th);
    				fxShape.graphics.moveTo(tw * 0.5, th);
    				for (i=256; i < 512; i++)
    				{
    					float = th * 0.666 * _byteArray.readFloat();
    					fxShape.graphics.lineTo(i * num, th - float);
    				}
    			}
    			fxShape.graphics.lineTo(tw, th);
    			fxShape.graphics.endFill();
    			waveFilter(false);
    		}
    
    
    		private function waveForm04():void
    		{
    			alphaNumber=0.76
    			_byteArray = bytePosition(byteArray(true),true);
    			fxShape.graphics.clear();
    			fxShape.graphics.lineStyle(1, _color.color24);
    			fxShape.graphics.beginFill(_color.color24);
    			fxShape.graphics.moveTo(0, th);
    
    			for (var i:int=1; i < 256; i++)
    			{
    				float = th * 0.666 * _byteArray.readFloat();
    				list256[i] = list256[i] - (dy * 2);
    				if (list256[i] < float)
    				{
    					list256[i] = float;
    				}
    				fxShape.graphics.lineTo(i * (tw * 0.00390625), th - list256[i]);
    			}
    			fxShape.graphics.lineTo(tw, th);
    			fxShape.graphics.endFill();
    			waveFilter(false);
    		}
    
    		private function waveForm05():void
    		{
    			alphaNumber=0.82
    			_byteArray = byteArray(true);
    			fxShape.graphics.clear();
    			fxShape.graphics.beginFill(_color.color24);
    			fxShape.graphics.moveTo(0, th * 0.5);
    			for (var i:int=0; i<512; i++)
    			{
    				float = th * 0.4 * _byteArray.readFloat();
    				list512[i] = (list512[i] - (dy * 2));
    				if (list512[i] < float)
    				{
    					list512[i] = float;
    				}
    				if (i >= 256)
    				{
    					if (i == 256)
    					{
    						fxShape.graphics.lineTo(tw, th * 0.5);
    						fxShape.graphics.lineTo(0, th * 0.5);
    					}
    					fxShape.graphics.lineTo((i - 256) * tw * 0.00390625, th * 0.5 - list512[i]);
    				}
    				else
    				{
    					fxShape.graphics.lineTo((i * tw * 0.00390625), (th * 0.5 + list512[i]));
    				}
    			}
    			fxShape.graphics.lineTo(tw, th * 0.5);
    			fxShape.graphics.lineTo(0, th * 0.5);
    			waveFilter(false);
    		}
    
    		private function waveForm06():void
    		{
    			alphaNumber=0.94
    			var cos:Number;
    			var sin:Number;
    			_byteArray = bytePosition(byteArray(true),true);
    			fxShape.graphics.clear();
    			fxShape.graphics.lineStyle(5, _color.color24);
    			fxShape.graphics.moveTo(tw * 0.5, th * 0.5);
    			for (var i:int=0; i<256; i++)
    			{
    				float = th * 0.3 * _byteArray.readFloat() + 5;
    				list256[i] = (list256[i] - dy);
    				if (list256[i] < float)
    				{
    					list256[i] = float;
    					list512[i] = (Math.random() * 360);
    				}
    				cos = float* Math.cos(list512[i] * (Math.PI / 180)) + tw * 0.5;
    				sin = float* Math.sin(list512[i] * (Math.PI / 180)) + th * 0.5;
    				fxShape.graphics.moveTo(tw * 0.5, th * 0.5);
    				fxShape.graphics.lineTo(cos, sin);
    			}
    			waveFilter(false);
    		}
    
    
    
    		private function waveForm07():void
    		{
    			alphaNumber=0.40
    			var num:*;
    			var list:*;
    			_byteArray = bytePosition(byteArray(true),true);
    			fxShape.graphics.clear();
    			for (var i:int=0; i < 256; i+=8)
    			{
    				if (list256[i] < 1)
    				{
    					list256[i] = 1;
    					num = _byteArray.readFloat() * 20;
    					float = _byteArray.readFloat() * 20;
    					list256[i + 1] = num;
    					list256[i + 2] = (tw - 40) * Math.random() + 20;
    					float *=  0.5;
    					if (float< 3)
    					{
    						float = 3;
    					}
    					list256[(i + 3)] = float;
    				}
    				else
    				{
    					num = list256;
    					list = list256[(i + 1)] - 1;
    					num[i + 1] = list;
    					list256[i] = list256[i] + list256[i + 1];
    					/*if(list256[i + 3] > 3)
    					{
    					list256[i + 3] -=0.5;
    					}*/
    
    				}
    				fxShape.graphics.beginFill(_color.color24);
    				fxShape.graphics.drawCircle(list256[i + 2], th - list256[i], list256[i + 3]);
    				fxShape.graphics.endFill();
    			}
    			waveFilter();
    		}
    
    
    		private function waveForm08():void
    		{
    			alphaNumber=0.96
    			_byteArray = bytePosition(byteArray(true),true);
    			fxShape.graphics.clear();
    			for (var i:int=0; i < 256; i+=8)
    			{
    				float = 10 * _byteArray.readFloat();
    				if (list256[i] < 1)
    				{
    					list256[i + 1] = (tw - (2 * 10)) * Math.random() + 10;
    					list256[i + 2] = (th - (2 * 10)) * Math.random() + 10;
    					list256[i + 3] = false;
    				}
    				if (list256[i] < float)
    				{
    					list256[i] = float;
    				}
    				list256[i] -=  0.5;
    				if ((float > 8 && i) || list256[i + 3])
    				{
    					if (list256[i + 3])
    					{
    						if (list256[i + 4] > 0)
    						{
    							list256[i + 4]-= 0.05;
    						}
    						else
    						{
    							list256[i + 3] = false;
    						}
    					}
    					else
    					{
    						list256[i + 4] = 1;
    						list256[i + 3] = true;
    					}
    					fxShape.graphics.lineStyle(1, _color.color24, list256[i + 4]);
    					fxShape.graphics.lineTo(list256[i + 1], list256[i + 2]);
    				}
    				fxShape.graphics.beginFill(_color.color24);
    				fxShape.graphics.drawCircle(list256[i + 1], list256[i + 2], list256[i]);
    				fxShape.graphics.moveTo(list256[i + 1], list256[i + 2]);
    				fxShape.graphics.endFill();
    			}
    			waveFilter(false);
    		}
    
    		private function waveForm09():void
    		{
    			alphaNumber=0.90
    			var abs:Number;
    			var point:Point;
    			var _round:int = 0;
    			var cos:Number;
    			var sin:Number;
    			var _array:Array = [];
    			var num:Number = 0;
    			var def:Number = 0;
    			var j:int = 1;
    			var _int:int = 0;
    			_byteArray = byteArray(true);
    			fxShape.graphics.clear();
    			fxShape.graphics.lineStyle(1, _color.color24);
    			while (_byteArray.bytesAvailable)
    			{
    				float = _byteArray.readFloat();
    				if (float> 0)
    				{
    					abs = float * th * 0.3 + 5;
    					num +=  abs;
    					def = num / j;
    					_array.push(abs - def);
    					j++;
    				}
    			}
    
    			for (var i:int=0; i < _array.length; i++)
    			{
    				abs = Math.abs(((_array[i] - def) * 0.5)) + def;
    				list512[i] -=  dy;
    				if (list512[i] < abs)
    				{
    					list512[i] = abs;
    				}
    				abs = list512[i];
    				_round =Math.round(i * 360 / _array.length) + dz;
    				cos = Math.round(abs * Math.cos(_round * (Math.PI / 180))) + tw * 0.5;
    				sin =Math.round(abs * Math.sin(_round * (Math.PI / 180))) + th * 0.5;
    				if (i == 0)
    				{
    					fxShape.graphics.moveTo(tw * 0.5, th * 0.5);
    					point = new Point(cos,sin);
    				}
    				fxShape.graphics.lineTo(cos, sin);
    				if ((_round - _int) > 8)
    				{
    					fxShape.graphics.lineTo(tw * 0.5, th * 0.5);
    					fxShape.graphics.moveTo(cos, sin);
    					_int = _round;
    				}
    			}
    			if (point)
    			{
    				fxShape.graphics.lineTo(point.x, point.y);
    			}
    			dz++;
    			waveFilter(false);
    		}
    
    
    		private function waveForm10():void
    		{
    			alphaNumber=0.92
    			_byteArray = bytePosition(byteArray(true),true);
    			fxShape.graphics.clear();
    			fxShape.graphics.lineStyle(1, _color.color24);
    			for (var i:int = 0; i < 256; i+=8)
    			{
    				float = _byteArray.readFloat() * 20;
    				if (list256[i] < 1)
    				{
    					list256[i + 1] = (tw - (2 * 20)) * Math.random() + 20;
    					list256[i + 2] = (th - (2 * 20)) * Math.random() + 20;
    				}
    				if (list256[i] < float)
    				{
    					list256[i] = float;
    				}
    				var list:Array = list256;
    				var j:int = i;
    				var _list = list256[i] - 1;
    				list[j] = _list;
    				fxShape.graphics.drawCircle(list256[i + 1], list256[i + 2], list256[i]);
    			}
    			waveFilter();
    		}
    
    
    		private function waveFilter(value:Boolean=true):void
    		{
    			_bitmapdata.lock();
    			if (_isFilter)
    			{
    
    				if (value)
    				{
    					applyDisplace(_bitmapdata);
    				}
    				else
    				{
    					_bitmapdata.applyFilter(_bitmapdata,_bitmapdata.rect,new Point(),new ColorMatrixFilter([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,alphaNumber,0]));
    				}
    			}
    			else
    			{
    				_bitmapdata.applyFilter(_bitmapdata,_bitmapdata.rect,new Point(),new ColorMatrixFilter([1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.0,0]));
    			}
    			_bitmapdata.applyFilter(_bitmapdata, _bitmapdata.rect, new Point(), new BlurFilter(8,8,2));
    
    			_bitmapdata.draw(fxShape);
    			_bitmapdata.unlock();
    
    		}
    
    
    
    
    		private function zero(value:int):Array
    		{
    			var array:Array = [];
    			for (var i:int = 0; i < value; i++)
    			{
    				array.push(0);
    			}
    			return array;
    		}
    
    		private function clearF():void
    		{
    			if (_bitmapdata)
    			{
    				_bitmapdata.fillRect(_bitmapdata.rect, 0);
    			}
    		}
    
    		private function bytePosition(_byteArray:ByteArray, value:Boolean=false):ByteArray
    		{
    			var number:Number;
    			var _byte:ByteArray=new ByteArray();
    			_byteArray.position = 0;
    			if (_byteArray.bytesAvailable)
    			{
    				var byte:ByteArray = new ByteArray();
    				_byteArray.position = 1024;
    				_byteArray.readBytes(byte);
    				_byteArray.position = 0;
    				while (byte.bytesAvailable)
    				{
    					var n:Number = _byteArray.readFloat();
    					var num:Number = byte.readFloat();
    					if (value ||n > 0 && num > 0)
    					{
    						number = n > num ? n:num;
    					}
    					else
    					{
    						if (n < 0&& num < 0)
    						{
    							number = n < num ? n:num;
    						}
    						else
    						{
    							number = (n + num) * 0.5;
    						}
    					}
    					_byte.writeFloat(number);
    				}
    				_byte.position = 0;
    			}
    			return _byte;
    		}
    
    
    		private function applyDisplace(_bitmapdata:BitmapData):void
    		{
    			bitmapdata = _bitmapdata.clone();
    			var _bd:DisplacementMapFilter = new DisplacementMapFilter(bitmapdata,new Point(0,0),1,2,10,10,"clamp");
    			_bitmapdata.applyFilter(bitmapdata, _bitmapdata.rect, new Point(0,0), _bd);
    		}
    
    
    
    		private function byteArray(value:Boolean=false):ByteArray
    		{
    			var byte:ByteArray= new ByteArray();
    			if (SoundMixer.areSoundsInaccessible())
    			{
    				stop();
    			}
    			else
    			{
    				try
    				{
    					SoundMixer.computeSpectrum(byte,value);
    				}
    				catch (e:Error)
    				{
    				}
    			}
    			return byte;
    		}
    
    
    		public function start():void
    		{
    			stop();
    			dz = 0;
    			bn = (tw * 0.125);
    			if (bn >512)
    			{
    				bn = 512;
    			}
    			dy = th * 0.008;
    			listVal = zero(bn);
    			listDot = zero(bn);
    			listBar = zero(bn);
    			list256 = zero(256);
    			list512 = zero(512);
    			if (_bitmapdata)
    			{
    				_bitmapdata.clone();
    			}
    			_bitmapdata = new BitmapData(tw,th,true,0);
    			bitmap = addChild(new Bitmap(_bitmapdata)) as Bitmap;
    			fn = mlArray[_fxID];
    			this.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
    		}
    
    
    		public function stop():void
    		{
    			if (! this.hasEventListener(Event.ENTER_FRAME))
    			{
    				return;
    			}
    			this.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
    			fxShape.graphics.clear();
    			clearF();
    		}
    		private function onEnterFrameHandler(event:Event):void
    		{
    			if (fn != null)
    			{
    				fn();
    			}
    
    		}
    
    		function timerHandler(event:TimerEvent):void
    		{
    			if (_fxID< 9)
    			{
    				_fxID++;
    			}
    			else
    			{
    				_fxID = 0;
    			}
    			start();
    
    		}
    
    		function thisClickHandler(event:MouseEvent):void
    		{
    
    			var index:int = Math.floor(Math.random() * 10);//频谱随机ID
    			trace(index);
    			//先停止频谱
    			myTimer.stop();
    			stop();
    
    			_fxID = index;
    
    			//从新运行频谱
    			myTimer.start();
    			start();
    
    		}
    
    
    
    
    
    
    
    	}
    }
    

      

  • 相关阅读:
    XML 2—— XML文档的元素、属性、实体
    XML 1—— 概述
    Eclipse文件 常用快捷键
    JDBC 7—— PreparedStatement优势
    JDBC 6—— 针对不同表的通用查询操作
    JDBC 5—— 查的操作
    模板复习题目
    第四次博客作业
    oo第三次博客作业
    oo第二次博客作业
  • 原文地址:https://www.cnblogs.com/fengziwu/p/15390524.html
Copyright © 2011-2022 走看看