Я использую библиотеку гобоя и ресэмплер::MultiChannelResampler для имитации сдвига высоты тона с изменением длительности в небольших аудиоклипах (фортепиано). Это хорошо работает, когда я создаю новый экземпляр ресэмплера каждый раз, когда хочу сыграть ноту, но я хотел бы избежать этих накладных расходов и повторно использовать экземпляр ресэмплера. Однако всякий раз, когда я использую его повторно, я слышу щелчок/хлопок в начале воспроизведения, что, вероятно, связано с тем, что в ресемплере еще остались данные от последнего использования (воспроизведение можно остановить до полного завершения клипа). Я хотел бы знать, есть ли способ очистить внутренние данные ресэмплера без необходимости создания нового экземпляра.
Я хотел бы иметь возможность повторно использовать ресэмплер Oboe без проблем. с щелчком/всплыванием в начале
Изменить: добавлен код:
Я использую пример из документа Oboe resampler. Итак, когда я нажимаю клавишу, ресэмплер заполняется кадрами, и я жду вывода ресэмплера, когда это произойдет. Как здесь:
https://github.com/google/oboe/tree/mai ... /resampler
Код: Выделить всё
int outputFramesLeft = numOutputFrames;
while (outputFramesLeft > 0) {
if(resampler->isWriteNeeded()) {
const float *frame = getNextInputFrame(); // you provide this
resampler->writeNextFrame(frame);
} else {
resampler->readNextFrame(outputBuffer);
outputBuffer += channelCount;
outputFramesLeft--;
}
}
После использования этого ресэмплера, который может перестать заполняться в любой момент (при отпускании клавиши фортепиано), я хочу переназначить его на новую нажимаемую ноту. Однако при использовании того же экземпляра в первых кадрах нового аудиоклипа происходит щелчок/хлопок, который, как я полагаю, связан с остатками данных от его последнего использования. Поэтому я хотел бы знать, как очистить ресэмплер, чтобы его можно было повторно использовать без этой проблемы.
Подробнее здесь:
https://stackoverflow.com/questions/793 ... lresampler