Superpoder: cambio de tono en tiempo real con timestretcher no funciona

Estoy usando Superpowered para varios FX en tiempo real y todos funcionan de manera muy sencilla. Sin embargo, el cambio de tono es otra historia, creo que, de hecho, se basa en el algoritmo de estiramiento de tiempo que, por supuesto, tiene que lidiar con la salida que cambia en el tiempo, que es mucho más complejo que aplicar FX como EQ o reverb. Sin embargo, solo estoy interesado en cambiar el tono de mi entrada de micrófono.

MiréEl único ejemplo que pude encontrar en GitHub y lo adapté ligeramente para que se ajuste a mi trabajo:

static bool audioProcessing(void *clientdata,
                            float **buffers,
                            unsigned int inputChannels,
                            unsigned int outputChannels,
                            unsigned int numberOfSamples,
                            unsigned int samplerate,
                            uint64_t hostTime) {
    __unsafe_unretained Superpowered *self = (__bridge Superpowered *)clientdata;

    SuperpoweredAudiobufferlistElement inputBuffer;

    inputBuffer.startSample = 0;
    inputBuffer.samplesUsed = 0;
    inputBuffer.endSample = self->timeStretcher->numberOfInputSamplesNeeded;
    inputBuffer.buffers[0] = SuperpoweredAudiobufferPool::getBuffer(self->timeStretcher->numberOfInputSamplesNeeded * 8 + 64);
    inputBuffer.buffers[1] = inputBuffer.buffers[2] = inputBuffer.buffers[3] = NULL;

    self->outputBuffers->clear();
    self->timeStretcher->process(&inputBuffer, self->outputBuffers);
    int samples = self->timeStretcher->numberOfInputSamplesNeeded;
    float *timeStretchedAudio = (float *)self->outputBuffers->nextSliceItem(&samples);
    if (timeStretchedAudio != 0) {
        SuperpoweredDeInterleave(timeStretchedAudio, buffers[0], buffers[1], numberOfSamples);
    }

    //self->outputBuffers->rewindSlice();

    return true;
}

He eliminado la mayor parte del código que pensé que no era necesario. Por ejemplo, hubo un ciclo while que parecía tratar con escenarios de extensión de tiempo, solo estoy produciendo el mismo tiempo que ingresé.

Algunas observaciones

Si yo noclear eloutputBuffers mi uso de memoria se disparaSi yo usoself->outputBuffers->rewindSlice(); la aplicación se vuelve silenciosa, lo que probablemente significa que los buffers se sobrescriben con silencioSi yo no usoself->outputBuffers->rewindSlice(); Puedo escuchar mi propia voz regresando, perotimeStretchedAudio es siempre0 excepto la primera vez

Respuestas a la pregunta(2)

Su respuesta a la pregunta