2017-08-18 63 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 –