битрейт в каждой секунде получать незачем, ведь если использовать SampleDataEvent.SAMPLE_DATA, то он сам посебе получается. Пример: загружается файл 350КБ звука и можно вырезать из него каждую десятую часть.
Код AS3:
package
{
import flash.display.*;
import flash.events.*;
import flash.system.*;
import flash.text.*;
import flash.ui.*;
import flash.utils.*;
import flash.sampler.*;
import flash.media.*;
import flash.net.*;
import flash.external.*;
/**
* ...
* @author Lexcuk
* http://murmadillo.tut.su/m/bmw.swf
*/
public class DocMp3 extends Sprite
{
private var sound:Sound;
private var soundChanel:SoundChannel;
private var navTxt:TextField;
private var mp3Samples:Vector.<Number>;
private var samples:Vector.<Number>;
private var pos:uint;
private var i:uint = 0;
public function DocMp3()
{
navTxt = new TextField();
sound = new Sound();
sound.addEventListener(Event.COMPLETE, soundCompleteHandler);
sound.load(new URLRequest('bmw.mp3'));
samples = new Vector.<Number>();
}
public function soundCompleteHandler(e:Event):void {
trace('load done');
var ba:ByteArray = new ByteArray();
sound.extract(ba, sound.bytesLoaded);
var n:Number;
mp3Samples = new Vector.<Number>();
ba.position = 0;
while (ba.bytesAvailable > 0) {
samples.push(n = ba.readFloat());
mp3Samples.push(n);
}
sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, soundSampleDataHandler);
soundChanel = sound.play();
createProcentTxt();
}
private function createProcentTxt():void {
var str:String = '';
for (i=0; i<100; i+=10) str = str + "<a href=\'event:"+i+"\'><u>[procent "+i+"]</a>\n";
navTxt = new TextField();
navTxt.autoSize = TextFieldAutoSize.LEFT;
addChild(navTxt);//добавить на рабочее поле
navTxt.htmlText = str;
navTxt.addEventListener(TextEvent.LINK, txtLinkHandler);
}
private function txtLinkHandler(param1:TextEvent):void {
var procent:Number = Number(param1.text);
if (procent != 0) procent = procent / 100;
samples.length = 0;
for (i = procent*mp3Samples.length; i < procent*mp3Samples.length+mp3Samples.length/10; i++) {
if (i >= mp3Samples.length) break;
samples.push(mp3Samples[i]);
}
}
private function soundSampleDataHandler(event:SampleDataEvent):void {
var n:Number = 0;
pos += 8192/2;
for (i = pos; i < pos + 8192/2; i++) {
if (i >= samples.length) {
pos = 0;
if (soundChanel != null) soundChanel.stop();
soundChanel = sound.play();
break;
}
event.data.writeFloat(n = samples[i]);
//event.data.writeFloat(n);//замедлние
}
}
}
}
http://murmadillo.tut.su/m/bmw.swf
ПС: Уменьшите громкость колонок, РОК... Кнопки стоп НЕТУ.