View Full Version : AS3 SoundMixer Class
Dimitree
April 20th, 2007, 09:20 AM
Any examples including the AS3 SoundMixer Class ?
I think gotoandlearn had one sometime ago but now I can't find it anymore...
mathew.er
April 20th, 2007, 09:13 PM
http://www.google.cz/search?q=AS3+SoundMixer+example ;)
Flaevo
April 21st, 2007, 04:36 AM
http://www.chromaticrain.com/SoundSpectrum.swf
not my source but I ported it to be compatible with Flash CS3 and Flex Builder SDK from the Flash 9 Public Alpha
package
{
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.Sound;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.display.Bitmap;
import flash.geom.Rectangle;
import flash.display.Shape;
[SWF( backgroundColor='0', frameRate='35', height='400', width='512')]
public class SoundSpectrum extends Sprite
{
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 SoundSpectrum()
{
sound = new song();
sound.play();
//sound = new Sound();
//sound.load( new URLRequest( 'sound.mp3' ) );
//sound.play();
bytes = new ByteArray();
output = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 );
peaks = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 );
displace = new Matrix();
displace.tx = 2;
displace.ty = -1;
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 ) );
stage.addEventListener("enterFrame", triggerFrame);
graphics.beginFill( 0 );
graphics.drawRect( 0, 0, stage.stageWidth, stage.stageHeight );
graphics.endFill();
gradient = createRainbowGradientArray();
}
private function triggerFrame(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 = 2 + smooth * 0xf0;
rect.x = 8 + i;
rect.y = 320 + ( i >> 2 ) - height;
rect.height = height;
peaks.setPixel32( rect.x, rect.y, 0xffffffff );
output.fillRect( rect, 0xff000000 | gradient[i] );
}
output.draw( output, displace, darken, null, null, true );
}
private function createRainbowGradientArray(): Array
{
var gradient: Array = new Array();
var shape: Shape = new Shape();
var bmp: BitmapData = new BitmapData( 256, 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;
}
}
}
Dimitree
April 22nd, 2007, 01:19 PM
Thank you all , I ll try to make sthg on my own based on these examples:pleased:
Dimitree
April 25th, 2007, 08:56 AM
http://www.chromaticrain.com/SoundSpectrum.swf
not my source but I ported it to be compatible with Flash CS3 and Flex Builder SDK from the Flash 9 Public Alpha
package
{
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.Sound;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.display.Bitmap;
import flash.geom.Rectangle;
import flash.display.Shape;
[SWF( backgroundColor='0', frameRate='35', height='400', width='512')]
public class SoundSpectrum extends Sprite
{
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 SoundSpectrum()
{
sound = new song();
sound.play();
//sound = new Sound();
//sound.load( new URLRequest( 'sound.mp3' ) );
//sound.play();
bytes = new ByteArray();
output = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 );
peaks = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 );
displace = new Matrix();
displace.tx = 2;
displace.ty = -1;
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 ) );
stage.addEventListener("enterFrame", triggerFrame);
graphics.beginFill( 0 );
graphics.drawRect( 0, 0, stage.stageWidth, stage.stageHeight );
graphics.endFill();
gradient = createRainbowGradientArray();
}
private function triggerFrame(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 = 2 + smooth * 0xf0;
rect.x = 8 + i;
rect.y = 320 + ( i >> 2 ) - height;
rect.height = height;
peaks.setPixel32( rect.x, rect.y, 0xffffffff );
output.fillRect( rect, 0xff000000 | gradient[i] );
}
output.draw( output, displace, darken, null, null, true );
}
private function createRainbowGradientArray(): Array
{
var gradient: Array = new Array();
var shape: Shape = new Shape();
var bmp: BitmapData = new BitmapData( 256, 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;
}
}
}
Ok when I try to publish I get this error in the Output :
ReferenceError: Error #1065: Variable addFrameScript is not defined.
at SoundSpectrum$iinit()
Any ideas???
Flaevo
April 26th, 2007, 01:35 AM
Ok when I try to publish I get this error in the Output :
ReferenceError: Error #1065: Variable addFrameScript is not defined.
at SoundSpectrum$iinit()
Any ideas???
Flash IDE or Flex Builder 2.0?
This was made in Flash CS3 IDE.
Dimitree
April 26th, 2007, 03:53 AM
Flash IDE or Flex Builder 2.0?
This was made in Flash CS3 IDE.
Actually I had an error with my mp3 Filename... Now it works Thanks!!
It was published with Flash 9 Public Alpha
Powered by vBulletin® Version 4.1.10 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.