3

こんにちは、フラッシュで「パラメトリック」イコライザーを作成できるかどうかを知りたいです。通常のグラフィック効果だけでなく、アプリケーションを通過するサウンドの出力を変更するツールです。任意の参照、ヒントのアイデアを歓迎します。ありがとう

4

5 に答える 5

6

それほど簡単ではありません...しかし、ここに方法があるかもしれません:

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;
}
于 2009-07-08T16:43:57.513 に答える
2

これをチェックしてください:SoundFX、actionscript 3を備えたすぐに使用できるオーディオフィルター

于 2009-07-09T06:23:02.673 に答える
1

Andre Michelle のラボ ページをご覧ください。彼は Flash でオーディオを使って多くの作業を行っています...おそらく最高の作業の 1 つです。パラメトリック eq が何であるかはわかりませんが、そのページで適切な情報を見つけることができるはずです。

于 2009-07-08T16:26:28.937 に答える
1

更新: 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

于 2009-08-10T03:34:47.067 に答える
0

おそらく、一連のデジタル フィルターが最善の策でしょう。FFT とは異なり、デジタル フィルターでは波形全体をメモリに保持する必要はありません。デジタル フィルターは因果関係があり、過去および/または未来のいくつかのポイントを見るだけだからです。また、サウンドをストリーミングできる場合は、これらをその場で適用できます。単純なフィルターを簡単に連結して、より複雑なフィルターを作成できます。

デジタル フィルターに関する無料の本があります。この本にはいくつかの基本的な理論が含まれていますが、ページをめくるだけで式を持ち上げることもできます。たとえば、Chをすばやく閲覧します。19 には、ハイパス、ローパス、およびバンドパスの再帰フィルターの簡単な式がリストされており、おそらくうまくいくでしょう。

于 2009-07-09T04:12:40.500 に答える