延迟 AudioSampleBuffer 在 Juce 中的播放

Delay playback of AudioSampleBuffer in Juce

本文关键字:播放 Juce AudioSampleBuffer 延迟      更新时间:2023-10-16

我正在编写一个卷积混响插件,并想添加一个预延迟滑块。我将"干"信号和"湿"信号放在两个单独的缓冲区中用于播放,如下面的代码所示:

 // 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,缓冲区是应用卷积的湿信号。如何延迟湿缓冲区的播放?

您可以通过移动湿缓冲区的样本来延迟其。例如,如果您想要 2 秒的延迟,则需要将湿缓冲液增加 2*sample_rate 并将所有样品移动sample_rate*2*delay_amt样品。您必须在convolvers->process方法中应用这些更改