2

私は大学向けのコンボリューション リバーブ プラグインを作成しています。出力がインパルス応答による入力である単純なプラグインを動作させることができました。コードを変更してウェット/ドライ パラメータを作成する方法を知りたいです。

このために「ブレンド」パラメーターを追加しました。

const float defaultBlend = 0.5f;
addParameter(blendParam = new FloatParameter (defaultBlend, "Blend"));

次に、コンボルバーが初期化されます。

convolver.init (512, buffer.getReadPointer(0), buffer.getNumSamples());

ここで処理されます:

 for (int channel = 0; channel < getNumInputChannels(); ++channel)
    {
        float* channelData = buffer.getWritePointer (channel);
        const float* inputData = buffer.getReadPointer(channel);

        for (int i = 0; i < buffer.getNumSamples(); ++i)
            channelData[i] = inputData[i] * level / 20;

        //convolver stuff
        convolver.process (inputData, channelData, buffer.getNumSamples());

    }

何か案は?

4

1 に答える 1

1

あなたの問題について考えると、次のプロパティを探しているようです。

  1. blendParamof が与えられた場合0.0f、オーディオを変更せずに渡します。
  2. の を指定して、オーディオを最大容量まで処理しますblendParam1.0f
  3. の が与えられた場合、未処理のオーディオの半分を処理済みblendParamのオーディオとミックスします。0.5f

続行する前に、上記 (およびその他) の単体テストを作成することをお勧めします。

次のコードは、これらのプロパティを満たすようです。

channelData[i] = level * (inputData[i] * (1.0f - blendValue) + convolvedData[i] * blendValue);
  • convolvedData「完全に処理された」データです。
  • blendValueのキャッシュ値ですblendParam.getValue()

出力パラメーターとして呼び出される別の配列を使用して、現在行っているようにconvolvedData呼び出して取得できます。convolver.processconvolvedData

これは、結果の数値を range にクランプすることを考慮していないことに注意してください。これ[-1.0f, 1.0f]を行うためのより効率的な方法がある可能性がありますが、それはあなたの出発点です。

于 2015-10-26T19:40:27.380 に答える