Пожалуйста скажите как сделать extract по таймеру, чтобы флеш не зависал и я мог поставить прелоадер.
Добавлено через 1 минуту
Вот мой класс визуализации звука

Код AS3:
package src
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.utils.ByteArray;
public class Visualizator extends Sprite
{
var samples:ByteArray = new ByteArray();
var buffer:BitmapData = new BitmapData(1024,256,true,0x00FFFFFF);
var screen:Bitmap = new Bitmap(buffer);
var rect:Rectangle = new Rectangle(0,0,1,0);
var playingTime:int;
var ratio:Number;
var step:int;
var sound:Sound;
public function Visualizator(_sound:Sound):void
{
sound = _sound;
}
public function show():void
{
addChild(screen);
buffer.fillRect( buffer.rect, 0 );
var extract:Number = Math.floor ((sound.length/1000)*44100);
playingTime = sound.length;
ratio = playingTime / buffer.width;
var lng:Number = sound.extract(samples,extract);
samples.position = 0;
step = samples.length / 4096;
do
{
step--;
}
while ( step % 4 );
var left:Number;
var right:Number;
var mono:Number;
for (var c:int = 0; c < 4096; c++)
{
rect.x = c / 4;
left = samples.readFloat() * 128;
right = samples.readFloat() * 128;
mono = Math.abs(Math.max(left, right)) + Math.abs(Math.min(left, right));
samples.position = c * step;
if (left > 0)
{
rect.y = 128 - left;
rect.height = left;
}
else
{
rect.y = 128;
rect.height = - left;
}
buffer.fillRect( rect, 0xFF5d96da );
if (right > 0)
{
rect.y = 128 - right;
rect.height = right;
}
else
{
rect.y = 128;
rect.height = - right;
}
buffer.fillRect( rect, 0xFF5d96da );
}
screen.width = 930;
screen.height = 90;
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
Добавлено через 1 час 11 минут
Ну, что никто не знает как сделать? Срочно надо. Готов заплатить.