SampleDataEvent.data.writeFloat () - зачем вызывать его дважды? - PullRequest
0 голосов
/ 04 июня 2010

Ниже приведен фрагмент из класса Adobe Live Docs SampleDataEvent. Он демонстрирует, как создать звуковую синусоидальную волну, помещая сэмплы в ByteArray. Часть, над которой я зациклен, - это то, почему вам нужно дважды вставить одно и то же значение в метод writeFloat()?

var mySound:Sound = new Sound();
function sineWaveGenerator(event:SampleDataEvent):void 
{
    for ( var c:int=0; c<8192; c++ ) {
        event.data.writeFloat( Math.sin((Number(c+event.position)/Math.PI/2))*0.25 );
        event.data.writeFloat( Math.sin((Number(c+event.position)/Math.PI/2))*0.25 );
    }
}

mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator);
mySound.play();

В качестве теста я удалил один из вызовов writeFloat () и увеличил буфер до 16384 выборок (в два раза больше текущего). Это создало слышимый пробел и щелкнул в аудио, но мало объяснило мне, почему. Возможно, вы можете ...

Еще раз спасибо:)

1 Ответ

1 голос
/ 04 июня 2010

Требуется две записи, потому что это стерео. Каждый канал берет один образец. В этом случае записываемое значение одинаково, но если вы хотите, например, переместить звук на 100% в одну сторону, вы можете записать значение с первой (или второй) writeFloat и передать 0 другой позвоните.

...