Помогите преобразовать этот код 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/

Другие вопросы по тегам