extact нужен, потому как распарсить mp3 вручную врядли получиться
а если скормить его саунду, то у него через extact можно взяьт все что нужно:

Код AS3:
public class Main extends Sprite
{
private var sound:Sound;
public function Main():void
{
sound = new Sound();
sound.load(new URLRequest("test.mp3"));
sound.play();
sound.addEventListener(Event.COMPLETE, sound_complete);
}
private function sound_complete(e:Event):void
{
//ByteArray сэмплов
var ba:ByteArray = new ByteArray();
var soundLength:int = (sound.length / 1000) * 44100;
sound.extract(ba, soundLength);
// массивы всех сэмплов саунда в Namber'ах
var samplesLength:int = ba.length / 8;
var arrLeft:Array = [];
var arrRight:Array = [];
ba.position = 0;
for (var i:int = 0; i < samplesLength; i++)
{
arrLeft.push(ba.readFloat());
arrRight.push(ba.readFloat());
}
// что с ними такими здоровыми делать не ясно
// например нарисуем левый канал через каждую 10000-ную точку
// остальные 9999 - баласт,
// т.е. лучше видимо сразу из ByteArray брать только то что надо, не загоняя в массив
var tY:Number = 200;
var kY:Number = 100;
graphics.lineStyle(1, 0xFF0000);
graphics.moveTo(0, tY);
var step:int = 1e4;
for (var j:int = 0; j < arrLeft.length; j+=step)
{
var dX:Number = j / step;
var dY:Number = kY * arrLeft[j];
graphics.lineTo(dX, tY + dY);
}
}
}