Хватит в блоге ерундой заниматься) Пора что-нить по-взрослому написать)

Не секрет, что после того как мы экземпляру класса Sound скажем play();, то он начнет отправляет событие sampleData, запрашивая новые аудиоданные, и это происходит только в том случае если он пустой.
Пожалуй, тут лучше всего начать с примера. Допустим нам очень захотелось послушать синусойду. А для этого нам достаточно пустого экземпляра класса Sound, одного слушателя события, одной функции.
//создаем экземпляр
var generSnd:Sound = new Sound();
//вешаем событие
generSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, sinusGenerator);
//начинаем рассылать событие SAMPLE_DATA
generSnd.play();
//в этой функции мы создаем БайтМассв в который записываем нашу синусойду
function sinusGenerator(event:SampleDataEvent):void
{
  for (var i:int = 0; i < 8192; i++)
  {
    var n:Number = Math.sin((i + event.position) / Math.PI / 4);
    event.data.writeFloat(n);
    event.data.writeFloat(n);
  }
}

Тут всё легко и просто.
Теперь придумаем задачку посложнее. Допустим, нам требуется ускорить воспроизведение загруженного звука. Чуточку подумаем логически, как реализовать ускорение воспроизведения звука? Ну конечно, вы правильно подумали, смещением ByteArray!
//создаем пустой экземпляр саунда
var mySound:Sound = new Sound();
//загружаем наш звук, для ускорения воспроизведения
var sourceSnd:Sound = new Sound();
var urlReq:URLRequest = new URLRequest(«test.mp3″);
sourceSnd.load(urlReq);
sourceSnd.addEventListener(Event.COMPLETE, loaded);
function loaded(event:Event):void
{
  //после того как мы загрузили нашу мп3-шку
  //мы вешаем событие на пустой саунд
  mySound.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
  mySound.play();
}
function processSound(event:SampleDataEvent):void
{
  //создаем пустой ByteArray
  var bytes:ByteArray = new ByteArray();
  //заполняем его
  sourceSnd.extract(bytes, 8192);
  //изменяем наш ByteArray и воспроизводим
  event.data.writeBytes(upOctave(bytes));
}
function upOctave(bytes:ByteArray):ByteArray
{
  //ByteArray
  var returnBytes:ByteArray = new ByteArray();
  //начальная позиция 0
  bytes.position = 0;
  //пока мы можем писать байты
  while(bytes.bytesAvailable > 0)
  {
    //мы их пишем
    returnBytes.writeFloat(bytes.readFloat());
    returnBytes.writeFloat(bytes.readFloat());
    //и если байты до сих пор доступны, для того чтобы не сместить за пределы массива
    if (bytes.bytesAvailable > 0)
    {
      //мы их и смещаем
      bytes.position += 8;
    }
  }
  return returnBytes;
}

Вот как-то примерно так.)