Сверхмощный Android PlayBack & amp; Запись одновременно

Я занимаюсь разработкой микшера с использованием библиотеки Superpowered Android C ++, у меня проблемы с проигрывателем во время записи, проигрыватель не воспроизводится, только записывающее устройство записывает. ниже код, может кто-нибудь направить меня, где я что-то не так

bool processRecording(short int *input, unsigned int numberOfSamples) {
pthread_mutex_lock(&mutex);
if (askRecording) {
unsigned int data = 0;

SuperpoweredShortIntToFloat(input, stereoBufferRecording, numberOfSamples);
data = recorder->process(stereoBufferRecording, NULL, numberOfSamples);

playerA->process( musicBuffer, false, numberOfSamples, 0.5f );
SuperpoweredShortIntToFloat(input, stereoBufferRecording, numberOfSamples);

SuperpoweredFloatToShortInt(musicBuffer, input, numberOfSamples);

pthread_mutex_unlock(&mutex);
return true;
}
pthread_mutex_unlock(&mutex);
return false;
}

Кто-нибудь есть идея, чтобы получить его в нужном месте?

после изменений, предложенных @Gabor, следующий фрагмент кода

bool processRecording(short int *input, unsigned int numberOfSamples) {

pthread_mutex_lock(&mutex);
if (askRecording) {
unsigned int data = 0;
SuperpoweredShortIntToFloat(input, stereoBufferRecording, numberOfSamples);

playerA->process( musicBuffer, false, numberOfSamples, 1.0f );

//=====================================================================================
// ================== Mixing Two Buffer ==================

mixerInputs[0] = musicBuffer;
mixerInputs[1] = stereoBufferRecording;
mixerInputs[2] = NULL;
mixerInputs[3] = NULL;

mixerOutputs[0] = outputBuffer;
mixerOutputs[1] = NULL;

float inputLevels[] = { 0.5f, 0.5f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f };
float outputLevels[] = { 1.0f, 1.0f };
__android_log_print(ANDROID_LOG_INFO, "NativeSuperpoweredRecorder  ", " processRecording 2>>");
mixerBackend->process(mixerInputs, mixerOutputs, inputLevels, outputLevels, NULL, NULL, numberOfSamples);

//=====================================================================================

data = recorder->process(mixerOutputs[0], NULL, numberOfSamples);
SuperpoweredFloatToShortInt(musicBuffer, input, numberOfSamples);
pthread_mutex_unlock(&mutex);
return true;
}
pthread_mutex_unlock(&mutex);

return false; }

3

Решение

Это то, что вы делаете в своем коде:

вход-> stereoBufferRecording-> самописец

вход-> stereoBufferRecording->?

player-> musicBuffer-> вход

Когда askRecording имеет значение false, игрок не играет вообще.

Я предполагаю, что «input» — это тот же буфер, который также идет в «output»?

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]