⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playeffect.as

📁 as3歌词解析实例,源文件
💻 AS
字号:
package com.ninemoon{
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.ColorTransform;
	import flash.geom.Matrix;
	import flash.geom.Rectangle;
	import flash.media.Microphone;
	import flash.media.Sound;
	import flash.media.SoundMixer;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
	import flash.display.Shape;
	import flash.display.Bitmap;
	import flash.events.IOErrorEvent;

	[SWF( backgroundColor='0', frameRate='35', height='400', width='512')];

	public class PlayEffect extends Sprite {
		private var mic: Microphone;
		private var sound: Sound;
		private var bytes: ByteArray;

		private var output: BitmapData;
		private var peaks: BitmapData;
		private var displace: Matrix;
		private var rect: Rectangle;
		private var gradient: Array;
		private var darken: ColorTransform;

		public function PlayEffect() {
			bytes = new ByteArray();

			output = new BitmapData( 400,300, true, 0 );
			peaks = new BitmapData( 400, 300, true, 0 );

			darken = new ColorTransform( 1, 1, 1, 1, -2, -2, -2, 0 );

			rect = new Rectangle( 0, 0, 1, 0 );

			addChild( new Bitmap( output ) );
			addChild( new Bitmap( peaks ) );

			addEventListener( Event.ENTER_FRAME, onEnterFrame );

			var sprite:Sprite=new Sprite();

			gradient = createRainbowGradientArray();
		}
		private function onIOError( event: IOErrorEvent ):void {
		}
		private function onEnterFrame( event: Event ):void {
			peaks.fillRect( peaks.rect, 0 );

			SoundMixer.computeSpectrum( bytes, true, 0 );

			var value: Number;
			var height: Number;

			var smooth: Number;

			for (var i: int = 0; i < 256; i++) {
				value = bytes.readFloat();

				if ( i == 0 ) {
					smooth = value;
				} else {
					smooth += ( value - smooth ) / 8;

				}
				height =smooth * 0xf0;

				rect.x =  i;
				rect.y =200 + ( i >> 8 ) - height;
				rect.height = height;

				peaks.setPixel32( rect.x, rect.y, 0xffffffff );

				output.fillRect( rect, 0xff000000 | gradient[i] );
			}
			output.draw( output, null, darken, null, null, true );
		}
		private function createRainbowGradientArray():Array {
			var gradient: Array = new Array();

			var shape: Shape = new Shape();
			var bmp: BitmapData = new BitmapData( 255, 1, false, 0 );

			var colors: Array = [ 0, 0xff0000, 0xffff00, 0x00ff00, 0x00ffff ];
			var alphas: Array = [ 100, 100, 100, 100, 100 ];
			var ratios: Array = [ 0, 16, 128, 192, 255 ];

			var matrix: Matrix = new Matrix();

			matrix.createGradientBox( 256, 1, 0, 0, 0 );

			shape.graphics.beginGradientFill( 'linear', colors, alphas, ratios, matrix );
			shape.graphics.drawRect( 0, 0, 256, 1 );
			shape.graphics.endFill();

			bmp.draw( shape );

			for (var i: int = 0; i < 256; i++) {
				gradient[i] = bmp.getPixel( i, 0 );
			}
			return gradient;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -