Ниже приведен фрагмент документа 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 (дважды тока). Это создало слышимый пробел и щелкнуло аудио, но не очень меня озадачило, почему. Может быть, вы можете ...
Еще раз спасибо :)
Спасибо, за ответ. Так почему же, если бы я удвоил размер буфера и только однажды назвал writeFloat(), я столкнулся с той же проблемой? – JeremyFromEarth
Я думаю, это потому, что в этом случае вы не повторяете одно и то же значение дважды, так как значение, которое вы передаете writeFloat, изменяется в зависимости от вашего счетчика циклов. Вы бы написали 2 «снимки» синусоидальной волны в одно и то же пятно времени (одно на правом канале, а другое слева) –
получил это ... имеет смысл теперь, спасибо! – JeremyFromEarth