Я много искал о способности флэш-памяти воспроизводить аудиоданные RAW PCM, поскольку у меня есть звук RAW PCM в виде ByteArray, я просто думаю, может ли флэш-память действительно воспроизводить его, в какой-то статье говорится, что да, а в некоторых нетобратите внимание, что звук RAW PCM поступает из потока живого сокета
На данный момент я пытался создать пустой объект Sound, а затем вызвать его метод воспроизведения и обработать его SampleDataEvent.SAMPLE_DATA.событие и передать байты оттуда, некоторые фрагменты кода ниже:
sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler);
....
pa.readBytes(soundBA, soundBA.length);
if (soundBA.bytesAvailable >= (8192 * 4))
{
sound.play();
}
....
private function sampleDataHandler(event:SampleDataEvent):void {
var i:int;
for (i = 0; i < 8192 && soundBA.bytesAvailable > 0; i++)
{
var sample:Number = soundBA.readFloat();
event.data.writeFloat(sample);
event.data.writeFloat(sample);
}
}
Так что, делая это, я могу слышать статический звук (почти весь шум) через определенные промежутки времени, так как, как вы можете видеть, у меня есть этоотметьте soundBA.bytesAvailable >= (8192 * 4)
, и поэтому метод воспроизведения будет запущен только после того, как у меня будет достаточно данных.
Итак, мой вопрос сейчас, означает ли этот звук (шум, который я слышу), что Flash может воспроизводить звук PCM?ИЛИ это просто означает, что он не может воспроизвести его, поэтому слышен только шум?
===== РЕДАКТИРОВАТЬ ======
Я только что обнаружил, чтоаудио, которое я обрабатываю, имеет 16 бит на семпл, поэтому я немного откорректировал код, выполнив soundBA.bytesAvailable >= (8192 * 2 * channels)
, а также передал значение диапазона от -1 до +1 на мой вызов event.data.writeFloat(sample)
, но звук осталсяпо-прежнему царапается
Есть ли способ установить частоту дискретизации (Гц) звукового объекта Flash?или он всегда думает, что вы используете 44100 Гц?