2017-08-18 41 views
2

我正在开发使用超级动力Android C++库的混音器,我在录音时遇到问题,播放器不播放,只有录音机正在录音。下面的代码,任何人都可以指导我在那里乱放东西超级动力Android回放和记录同时

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; } 
+0

@kasurd你能帮我吗,因为我已经看到你的代码https://bitbucket.org/snippets/kasurd/Mynnp同步模式的记录器和播放器 –

回答

2

这是你在你的代码做什么:

输入 - > stereoBufferRecording->录音机

输入 - > stereoBufferRecording - >?

播放器 - > musicBuffer->输入

当askRecording是假的,球员是不是在玩的。

我猜“输入”是同样的缓冲区,它也去“输出”以及?

+0

我想实现简单的卡拉OK风格的实现。 –

+0

你需要这样的: 1.输入 - > stereoBufferRecording使用shortIntToFloat 2.播放器 - > musicBuffer 3.混合stereoBufferRecording和musicBuffer第三缓冲,recordingBuffer(你可以使用SuperpoweredCross ...例如功能) 4.录音机 - >处理录音缓冲区 5. musicBuffer-> input using floatToShortInt –

+0

在我的例子中“playerA-> process(musicBuffer,false,numberOfSamples,1.0f);”返回false,任何线索@Gabor –