вникните в этот классик(изменение скорости проигрывания трека) - его можно допилить и под вашу задачу

Код AS3:
package audio
{
import flash.events.Event;
import flash.events.SampleDataEvent;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.utils.ByteArray;
public class Audio
{
private var _sound:Sound;
private var _playbackSpeed:Number = 1;
private var _mp3:Sound;
private var _loadedMP3Samples:ByteArray;
private var _dynamicSound:Sound;
private var _phase:Number;
private var _numSamples:int;
public function Audio()
{
}
public function play():void
{
var bytes:ByteArray = new ByteArray();
_sound.extract(bytes, int(_sound.length * 44.1));
playBytes(bytes);
}
private function playBytes(bytes:ByteArray):void
{
stop();
_dynamicSound = new Sound();
_dynamicSound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
_loadedMP3Samples = bytes;
_numSamples = bytes.length / 8;
_phase = 0;
_dynamicSound.play();
}
private function onSampleData( event:SampleDataEvent ):void
{
var l:Number;
var r:Number;
var outputLength:int = 0;
while (outputLength < 2048) {
// until we have filled up enough output buffer
// move to the correct location in our loaded samples ByteArray
_loadedMP3Samples.position = int(_phase) * 8; // 4 bytes per float and two channels so the actual position in the ByteArray is a factor of 8 bigger than the phase
// read out the left and right channels at this position
l = _loadedMP3Samples.readFloat();
r = _loadedMP3Samples.readFloat();
// write the samples to our output buffer
event.data.writeFloat(l);
event.data.writeFloat(r);
outputLength++;
// advance the phase by the speed...
_phase += _playbackSpeed;
// and deal with looping (including looping back past the beginning when playing in reverse)
if (_phase < 0) {
_phase += _numSamples;
} else if (_phase >= _numSamples) {
_phase -= _numSamples;
}
}
}
public function set playbackSpeed(value:Number):void
{
_playbackSpeed = value;
}
public function stop():void
{
if (_dynamicSound) {
_dynamicSound.removeEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
_dynamicSound = null;
}
}
public function get sound():Sound
{
return(_sound);
}
public function set sound(value:Sound):void
{
_sound = value;
}
public function get phase():Number
{
return(_phase);
}
public function set phase(value:Number):void
{
_phase = value;
}
}
}