📄 playeffect.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 + -