воспроизводить исходные данные PCM сокета в реальном времени с помощью Flash - PullRequest
1 голос
/ 18 ноября 2011

Я много искал о способности флэш-памяти воспроизводить аудиоданные 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 Гц?

1 Ответ

0 голосов
/ 29 декабря 2011

Вы правы в том, что по умолчанию 44 кГц. Однако вы можете изменить это во Flash Professional (у меня CS5).

В вашей библиотеке щелкните правой кнопкой мыши звуковой файл, для которого вы хотите изменить частоту дискретизации. На вкладке «Параметры» измените «Сжатие» с «По умолчанию» на другой формат (mp3 не имеет опцию частоты дискретизации, но другие имеют.) Вы можете изменить частоту дискретизации здесь. Нажмите «ОК», чтобы сохранить.

Что касается метода в коде, я не знаю, есть ли способ. Если кто-то знает, как это сделать в коде, пожалуйста, напишите об этом.

...