帮助将此as3代码转换为像素弯曲代码

时间:2010-07-09 10:28:59

标签: flash actionscript-3 waveform pixel-bender

我正在寻找帮助将as3代码转换为pixelbender代码的一些帮助,以尝试提高我的应用程序的性能。

这个as3代码如下。我扫描块中的bytearray的Number值。让我们说这个块长度是100个数字我读了2个数字(左和右)并尝试找到最大值。我的bytearray中的数字是PCM数据,因此有数百万个,这些代码通常需要很长时间才能执行,特别是在低规格机器上。

这样做的目的是尽可能快地渲染波形。我对像素弯曲器知之甚少。我基本上可以创建一个新文件并在flash中创建一个shaderJob,但我真的不确定如何处理它...

我想我真的在问我如何传递pixelbender

A)数字的“大块”并让它传回2个最大值(左和右)

B)我的整个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 个答案:

答案 0 :(得分:2)

Pixel Bender不适合执行此任务,因为它不支持循环,因此无法搜索数据数组以返回单个值。它也不能将值传递给下一个处理过的块,这样会很好,因为那样你就可以将当前块与先前找到的最大值进行比较,就像在存储桶链中一样。

相反,我建议您查看Alchemy并使用其快速的bytearray操作码快速搜索您的数据。 Joa Ebert和Burak Kalayci都构建了帮助工具,即使不需要在C语言中编程,也可以使用这些操作码:http://philippe.elsass.me/2010/05/as3-fast-memory-access-without-alchemy/