Помогите преобразовать этот код as3 в код пиксель-бендера
Мне нужна помощь в преобразовании кода as3 в код pixelbender, чтобы повысить производительность моего приложения.
Этот код as3 выглядит следующим образом. Я сканирую числовые значения байтового массива кусками. Допустим, длина фрагмента была 100 цифр. Я прочитал 2 цифры (слева и справа) и попытался найти максимальные значения. Числа в моем байтовом массиве - это данные PCM, поэтому их миллионы, и выполнение этого кода часто занимает много времени, особенно на машине с низкой спецификацией.
Вся цель этого состоит в том, чтобы сделать сигнал как можно быстрее. Я очень мало знаю о пиксельном изгибе. Я могу в основном сделать новый файл и создать его shaderJob во флэш-памяти, но я действительно не уверен, как подойти к этому...
Я думаю, я действительно спрашиваю, как я могу передать pixelbender либо
А) "кусок" чисел и заставить его передать мне 2 максимальных значения (слева и справа)
или же
Б) весь мой bytearray и получаю пиксель Бендер, чтобы сделать чанкинг для меня
var spritePixelIndex:Number=0;
var spriteSize:Number;
spriteSize=_sizes[_numberOfZoomLevels - 1];
blockSize=Math.floor(_pcmLength / spriteSize);
chunksize=blockSize * 100;
for (var i:int=0; i < chunksize; ++i)
{
if (_pcmData.bytesAvailable)
{
var la:Number=_pcmData.readFloat();
var ra:Number=_pcmData.readFloat();
var l:Number=la > 0.0 ? la : -la;
var r:Number=ra > 0.0 ? ra : -ra;
++_divCount;
var ml:Number=0;
var mr:Number=0;
var a_ml:Number=ml > 0.0 ? ml : -ml;
var a_mr:Number=mr > 0.0 ? mr : -mr;
ml=a_ml > (l) ? ml : l;
mr=a_mr > (r) ? mr : r;
}
}
1 ответ
Pixel Bender не является подходящим инструментом для этой задачи, поскольку он не поддерживает циклы и, следовательно, не может выполнять поиск в массиве данных, чтобы вернуть вам отдельные значения. Он также не может передавать значения следующему обработанному чанку, что было бы неплохо, так как тогда вы могли бы просто сравнить текущий чанк с найденным ранее максимумом, как в цепочке сегментов.
Вместо этого я рекомендую вам взглянуть на Alchemy и использовать его быстрые коды операций bytearray для быстрого поиска в ваших данных. Джоа Эберт и Бурак Калайчи имеют инструменты для сборки, которые позволяют использовать эти коды операций даже без необходимости программирования на C: http://philippe.elsass.me/2010/05/as3-fast-memory-access-without-alchemy/