Потоковое аудио с малой задержкой во Flash - PullRequest
1 голос
/ 06 марта 2012

Предположим, что существует живой поток WAV, доступ к которому можно получить по определенному URL-адресу, и мы должны передавать его с минимальной задержкой. Использование HTML5 <audio> для этой задачи не допускается, поскольку браузеры пытаются предварительно буферизовать несколько секунд потока, и соответственно увеличивается задержка. Вот причина использования Flash для этой задачи. Однако из-за моей неопытности с этой технологией мне удавалось получать только случайные щелчки и белый шум. Что не так в коде ниже? Благодаря.

var soundBuffer: ByteArray = new ByteArray();
var soundStream: URLStream = new URLStream();
soundStream.addEventListener(ProgressEvent.PROGRESS, readSound);
soundStream.load(new URLRequest(WAV_FILE_URL));
var sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA,playSound);
sound.play();

function readSound(event:ProgressEvent):void {
    soundStream.readBytes(soundBuffer, 0, soundStream.bytesAvailable);
}


function playSound(event:SampleDataEvent):void {
    /* The docs say that if we send too few samples,
      Sound will consider it an EOF */
    var samples:int = (soundBuffer.length - soundBuffer.position) / 4
    var toadd:int = 4096 - samples;
    try {
      for (var c: int=0; c < samples; c++) {
        var n:Number = soundBuffer.readFloat();
        event.data.writeFloat(n);
        event.data.writeFloat(n);
      }
    } catch(e:Error) {
        ExternalInterface.call("errorReport", e.message);
    }
    for (var d: int = 0; d < toadd; d++) {
        event.data.writeFloat(0);
        event.data.writeFloat(0);
    }
}

1 Ответ

1 голос
/ 07 марта 2012

Как указал The_asMan, воспроизведение wav-файла не так просто. См. as3wavsound для примера.

Если ваша цель - низкая задержка, лучшим вариантом будет преобразование в MP3, так что вы можете просто использовать , использовать SoundLoaderContext .

...