创建Flash均衡器(修改输出声音)

嗨,它想知道它是否可以在闪存中创建一个“参数”均衡器。 不仅仅是通常的图形效果,还有一种修改通过应用程序的声音输出的工具。任何参考,提示的想法欢迎。 谢谢     
已邀请:
它不会非常容易......但这可能是一种方式:
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); // You will need to find a FFT(Fast Fourier Transform) function to generate an array. 
    for(var i:int = 0; i < freqDomain.length; i++)
    {
        freqDomain[i] = freqDomain[i] * parameters[i]; // This is where your EQ parameters get applied.
    }
    var timeDomain:Array = IFFT(freqDomain, event.data.length); // Inverse FFT

    for(value:Number in timeDomain) 
    {
        event.data.writeFloat(value);
    }
}
一些关于FFT和IFFT功能的FFT通常输出复数值(实数+复数分量),可以将其转换为幅度和相位分量。你真正需要的只是幅度,它有一个公式=(sqrt(real ^ 2 + complex ^ 2))。人耳对相位不敏感(与对相位非常敏感的眼睛相反),因此当您进行逆FFT时,可以插入随机或平坦相位,差别不大。请注意,就过滤器实现而言,我的方法水平非常低。 这是一个傅里叶变换函数(虽然不是快速,它只是一个卷积(O(n ^ 2))与FFT O(nlogn))仅供参考(错误...它是我的头顶,所以如果可能是错的常数):
// Note that this only returns the magnitude, I am discarding the phase.
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;
}
    
看看这个:SoundFX,带有动作脚本3的开箱即用的音频过滤器     
查看Andre Michelle的实验室页面。他在Flash中使用audo做了很多工作......可能是最好的之一。我不确定参数eq是什么,但你应该能够在该页面上找到一些好的信息。     
更新:我找到了一个使用Flash 10的3波段均衡器的示例。它使用的不同于提到的CookieOfFortune,但它有效(嗯,确实如此)。使用它,我更新了5个波段的示例并将其转换为在Flex中运行。你可以在GitHub上看到代码。 如果有人对如何运行数学有任何建议,我会非常高兴听到它。在声音修改方面,我真的不太了解。 原帖: 我不确定这会有多大帮助,但这是获得声音均衡器效果的权宜之计,没有FFT等的痛苦。 http://www.webdesign.org/web/flash/tutorials/sound-equalizer.5020.html 基本上,您创建了几个版本的声音文件,每个版本都设置为预制的均衡器设置。然后,当用户调节低音或高音时,只需调节相应文件的音量即可。 您可能还会发现extract()函数对声音变量有帮助: http://livedocs.adobe.com/flex/3/langref/flash/media/Sound.html#extract     
可能一组数字滤波器是您最好的选择。与FFT不同,使用数字滤波器不需要将整个波形保存在存储器中,因为数字滤波器是因果关系,只是看过去和/或将来的几点。此外,如果您可以流式传输声音,您可以即时应用这些声音。简单的过滤器可以轻松链接在一起,以制作更复杂的过滤器。 有一本关于数字滤波器的免费书籍,它有一些基本理论,但也可以通过翻页和提升公式。例如,快速阅读Ch。图19列出了高通,低通和带通递归滤波器的简单公式,这些公式可能会起作用,但如果你想获得更好的功能,那么本书中还有很多其他的过滤器。     

要回复问题请先登录注册