Предположим, что существует живой поток 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);
}
}