0

バッファーを反復するたびに、バッファー内のオーディオ ボリュームを (フェードアウトのように) 減少させる単純な関数を作成しようとしています。これが私の簡単な機能です。

double iterationSum = 1.0;

double iteration(double sample)
{
 iterationSum *= 0.9;

 //and then multiply that sum with the current sample.
 sample *= iterationSum;
 return sample;
}

これは 44100 kHz のサンプルレートに設定すると正常に動作しますが、サンプルレートが 88200 kHz に変更された例の場合、サンプルレートが 2 倍になり、それ以外の場合は、ハーフタイムで「フェードアウト」を終了し、44100 / 88200 = 0.5 のような係数を使用しようとしましたが、これではステップの半分にはなりません。

プログラム中にサンプルレートが変更された場合にこの関数が呼び出されるため、各反復で半分のステップにするために何ができますか?

よろしく、モーガン

4

2 に答える 2

1

私が理解したかどうかはわかりませんが、次のようなものはどうですか:

public void fadeOut(double sampleRate)
{
    //run 1 iteration per sec?
    int defaultIterations=10;

    double decrement = calculateIteration(sampleRate, defaultIterations);

    for(int i=0; i < defaultIterations; i++)
    {

        //maybe run each one of these loops every x ms?
        sampleRate = processIteration(sampleRate, decrement);
    }
}


public double calculateIteration(double sampleRate, int numIterations)
{
    return sampleRate/numIterations;
}


private double processIteration(double sampleRate, double decrement)
{
    return sampleRate -= decrement;
}
于 2013-11-18T00:32:58.847 に答える