It won't be terribly easy ... but there could be a way:
var parameters:Array = [1,1,1,1,0.5]
var sound:Sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, filter);
sound.load(soundURLRequest);
sound.play();
private function filter(event:SampleDataEvent):void
{
var freqDomain:Array = FFT(event.data, parameters.length);
for(var i:int = 0; i < freqDomain.length; i++)
{
freqDomain[i] = freqDomain[i] * parameters[i];
}
var timeDomain:Array = IFFT(freqDomain, event.data.length);
for(value:Number in timeDomain)
{
event.data.writeFloat(value);
}
}
FFT IFFT, FFT ( + ), . , = (sqrt (real ^ 2 + complex ^ 2)). ( , ), , , . , .
( Fast, (O (n ^ 2)) vs FFT O (nlogn)) (.. , ):
function FFT(sample:Array, size):Array
{
var frequencies = new Array(size);
for(int i = 0; i < sample.size; i++)
{
for(int j = 0; i < frequencies.size; j++)
{
var real:Number = sample[i] * Math.cos(Math.PI/2 * i * j);
var complex:Number = sample[i] * Math.sin(Math.PI/2 * i * j);
frequencies[j] += Math.sqrt(real * real + complex * complex);
}
}
return frequencies;
}