Задержка воспроизведения AudioSampleBuffer в Juce

Я пишу плагин сверточной реверберации и хочу добавить ползунок предварительной задержки. У меня есть сигнал «Сухой» и «Влажный» в двух отдельных буферах для воспроизведения, как показано в коде ниже:

 // copy the original signal into a "dry signal" buffer that we'll use later
AudioSampleBuffer dryBuffer(buffer.getNumChannels(), buffer.getNumSamples());

// now apply convolution to the buffer
for (int i = 0; i < buffer.getNumChannels(); ++i)
{
    float* writePointer = buffer.getWritePointer (i % getNumOutputChannels());
    const float* readPointer = buffer.getReadPointer (i % getNumInputChannels());

    dryBuffer.copyFrom(
                       i, // destChannel
                       0, //destStartSample
                       buffer, // sourceBuffer
                       i, // sourceChannel
                       0, // sourceStartSample,
                       buffer.getNumSamples()
   );

    convolvers.getUnchecked(i % convolvers.size())->process (readPointer, writePointer, buffer.getNumSamples());

    //WET MIX
    buffer.applyGain(i, // channel
                     0, // startSample
                     buffer.getNumSamples(),
                     wetLevel->getValue() // gain
                     );

    //DRY MIX
    dryBuffer.applyGain(i,
                        0,
                        dryBuffer.getNumSamples(),
                        dryLevel->getValue()
                        );

    buffer.addFrom(
                   i, // destChannel
                   0, // destStartSample
                   dryBuffer, // sourceBuffer
                   i, // sourceChannel
                   0, // soucreStartSample,
                   buffer.getNumSamples(),
                   1.0 // gain
                   );


}

dryBuffer — это сухой AudioSampleBuffer, а буфер — это обработанный сигнал с примененной сверткой. Как я могу отложить воспроизведение влажного буфера?


person willfo    schedule 17.03.2016    source источник


Ответы (1)


Вы можете задержать влажный буфер, перемещая его сэмплы. Например, если вам нужна 2-секундная задержка, вы должны увеличить влажный буфер на 2*sample_rate и переместить все сэмплы на sample_rate*2*delay_amt семплов. Вам придется применить эти изменения в методе convolvers->process.

person yun    schedule 17.03.2016