2010-06-03 2 views
0

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

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

+0

Спасибо, за ответ. Так почему же, если бы я удвоил размер буфера и только однажды назвал writeFloat(), я столкнулся с той же проблемой? – JeremyFromEarth

+0

Я думаю, это потому, что в этом случае вы не повторяете одно и то же значение дважды, так как значение, которое вы передаете writeFloat, изменяется в зависимости от вашего счетчика циклов. Вы бы написали 2 «снимки» синусоидальной волны в одно и то же пятно времени (одно на правом канале, а другое слева) –

+0

получил это ... имеет смысл теперь, спасибо! – JeremyFromEarth

Смежные вопросы