Superpowered 2 TimeStretching шаг приводит к искаженному аудио - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь реализовать передачу в реальном времени только (без растяжения времени) с Superpowered 2 в C ++.

Я инициализирую библиотеку следующим образом:

timeStretcher = new Superpowered::TimeStretching(dspSampleRate);
tsBuffer = (float *)malloc(dspSampleRate * 2 * sizeof(float) + 16384);
tsBufferOut = (float *)malloc(dspSampleRate * 2 * sizeof(float) + 16384);

Затем в моей функции обработки ясделайте следующее:

timeStretcher->pitchShiftCents = fxPitch * 100;

tsBuffer[0] = tmpInL;
tsBuffer[1] = tmpInR;

timeStretcher->addInput(tsBuffer, 1);

unsigned int outputFramesAvailable = timeStretcher->getOutputLengthFrames();
if ((outputFramesAvailable > 0) && timeStretcher->getOutput(tsBufferOut, outputFramesAvailable)) {

     for (int i = 0; i < outputFramesAvailable / 2; ++i) {

          outLR res;

          res.left = tsBufferOut[i * 2];
          res.right = tsBufferOut[i * 2 + 1];

          rbQ.enqueue(res);

     }

}

Итак, в моем понимании - поскольку я не использую временную растяжку, мне не нужно иметь большие куски кадров, чем один кадр на процесс. Я также пытаюсь перемежать и де-перемежать звуковой буфер самостоятельно.

Наконец, я помещаю все в очередь и поток из этой очереди позже. Эта часть работает нормально (потому что раньше я использовал ту же технику с другой библиотекой ..)

Результат, однако, разбит, но искажен. что я делаю не так?

...