Came across this great code for a simple mp3 player with audio spectrum on another site.
Works and looks great!
Thing is, I have multiple players .swf on a single .html page. When one mp3 is playing all the other player’s audio spectrums are triggered as well. Having a hard time figuring out how to trigger only the spectrum for the mp3 being played. Can you help?
*caution: newb on board
// spectrum constants
const SPECTRUM_HEIGHT:int = 75;
const CHANNEL_LENGTH:int = 256;
const SPECTRUM_LEFT_FILL_COLOR:uint = 0x5FDEFE;
const SPECTRUM_LEFT_FILL_ALPHA:Number = 0.5;
const SPECTRUM_LEFT_LINE_COLOR:uint = 0x013643;
const SPECTRUM_RIGHT_FILL_COLOR:uint = 0xBFF075;
const SPECTRUM_RIGHT_FILL_ALPHA:Number = 0.5;
const SPECTRUM_RIGHT_LINE_COLOR:uint = 0x4A730D;
// vars
var sndObject:Sound = new Sound();
var chaObject:SoundChannel = new SoundChannel() ;
var sndTransform:SoundTransform = new SoundTransform();
var reqObject:URLRequest = new URLRequest("so-deep.ram2000.mp3");
var sndBytes:ByteArray = new ByteArray();
var intPosition:int = 0;
var bolStop:Boolean = true;
function initMP3Player():void {
// set event listeners
addEventListener(Event.ENTER_FRAME, renderSpectrum);
addEventListener(Event.ENTER_FRAME, calcProgress);
this.mcMp3Player.btnStop.addEventListener(MouseEvent.CLICK, stopPlayback);
this.mcMp3Player.btnPause.addEventListener(MouseEvent.CLICK, pausePlayback);
this.mcMp3Player.btnPlay.addEventListener(MouseEvent.CLICK, startPlayback);
this.mcMp3Player.btnMute.addEventListener(MouseEvent.CLICK, mutePlayback);
this.mcMp3Player.btnUnmute.addEventListener(MouseEvent.CLICK, unmutePlayback);
this.mcMp3Player.progress.addEventListener(MouseEvent.CLICK, setNewProgress);
// use hand cursor for progress bar
this.mcMp3Player.progress.buttonMode = true;
this.mcMp3Player.btnPause.visible = false;
this.mcMp3Player.btnUnmute.visible = false;
}
function stopPlayback(e:MouseEvent):void {
chaObject.stop();
sndObject = new Sound();
bolStop = true;
intPosition = 0;
this.mcMp3Player.btnPlay.visible = true;
this.mcMp3Player.btnPause.visible = false;
}
function pausePlayback(e:MouseEvent):void {
this.mcMp3Player.btnPlay.visible = true;
this.mcMp3Player.btnPause.visible = false;
playSound(false);
}
function startPlayback(e:MouseEvent):void {
this.mcMp3Player.btnPlay.visible = false;
this.mcMp3Player.btnPause.visible = true;
playSound();
}
function mutePlayback(e:MouseEvent):void {
this.mcMp3Player.btnMute.visible = false;
this.mcMp3Player.btnUnmute.visible = true;
setVolume(0);
}
function unmutePlayback(e:MouseEvent):void {
this.mcMp3Player.btnMute.visible = true;
this.mcMp3Player.btnUnmute.visible = false;
setVolume(1);
}
function setNewProgress(e:MouseEvent):void {
var p:int = sndObject.length * e.currentTarget.mouseX / 220;
chaObject.stop();
chaObject = sndObject.play(p);
this.mcMp3Player.btnPlay.visible = false;
this.mcMp3Player.btnPause.visible = true;
}
function playSound(bolPlay:Boolean = true):void {
if(bolPlay) {
if(bolStop) {
// load mp3 file if playback has been stopped
sndObject.load(reqObject);
bolStop = false;
} else {
intPosition = chaObject.position;
}
chaObject = sndObject.play(intPosition);
} else {
chaObject.stop();
}
}
function setVolume(intVolume:int = 1):void {
sndTransform.volume = intVolume;
chaObject.soundTransform = sndTransform;
}
function calcProgress(e:Event):void {
var p:MovieClip = this.mcMp3Player.progress.mcProgressFill;
var w:int = Math.round( 220 * chaObject.position / sndObject.length);
p.width = w;
}
function renderSpectrum(e:Event):void
{
// set a reference to the spectrum graphics
var g:Graphics = this.mcMp3Player.spectrum.graphics;
// compute spectrum in byte array sndBytes
SoundMixer.computeSpectrum(sndBytes);
/*
* LEFT CHANNEL
*/
g.clear();
g.lineStyle(0, SPECTRUM_LEFT_LINE_COLOR);
g.beginFill(SPECTRUM_LEFT_FILL_COLOR, SPECTRUM_LEFT_FILL_ALPHA);
g.moveTo(0, SPECTRUM_HEIGHT);
var n:Number = 0;
for (var i:int = 0; i < CHANNEL_LENGTH; i++) {
n = (sndBytes.readFloat() * SPECTRUM_HEIGHT);
g.lineTo(i * 2, SPECTRUM_HEIGHT - n);
}
g.lineTo(CHANNEL_LENGTH * 2, SPECTRUM_HEIGHT);
g.endFill();
/*
* RIGHT CHANNEL
*/
g.lineStyle(0, SPECTRUM_RIGHT_LINE_COLOR);
g.beginFill(SPECTRUM_RIGHT_FILL_COLOR, SPECTRUM_RIGHT_FILL_ALPHA);
g.moveTo(CHANNEL_LENGTH * 2, SPECTRUM_HEIGHT);
for (i = CHANNEL_LENGTH; i > 0; i--) {
n = (sndBytes.readFloat() * SPECTRUM_HEIGHT);
g.lineTo(i * 2, SPECTRUM_HEIGHT - n);
}
g.lineTo(0, SPECTRUM_HEIGHT);
g.endFill();
}
initMP3Player();