Если я правильно прочитал ваш код, вы пытаетесь синхронизировать воспроизводимый звук? Тогда использование Array.filter неэффективно - вам нужно только отслеживать последний пройденный маркер.
Предполагая, что ваш массив soundPositions отсортирован по номерам, это можно сделать простым циклом:
private var current : int = 0;
private function audioProgress(event:Event):void{
while( current < soundPositions.length -1 &&
soundPositions[current+1] < soundChannel.position )
current++;
doStuffWith(soundPositions[current]);
}
Таким образом, будет только одна итерация массива - всего. Цикл while начинается с текущего индекса и завершается, когда значение больше или равно позиции звука, поэтому current
всегда будет указывать на последний элемент, который (виртуальный) элемент воспроизведения прошел.