2017-08-18 1 views
2

私はSuperpowered Android C++ライブラリを使用してミキサーを開発しています。録音中にPlayerに問題が発生しました。プレーヤーが再生していないため、レコーダーだけが録音しています。以下はコードですが、誰かがどこに何かを置き忘れているのか教えてくださいSuperpowered Android PlayBack&Record同時に

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 - >?

player-> musicBuffer->入力

askRecordingがfalseの場合、プレイヤーは全く演奏されていません。

"入力"は "出力"にも同じバッファであると思いますか?

+0

簡単なカラオケスタイルの実装を実装したいと思います。 –

+0

あなたはこの必要があります 1を入力 - >あなたはたとえばSuperpoweredCross ...機能を使用することができる第3のバッファ、recordingBuffer(にshortIntToFloat 2. player-> musicBuffer 3.ミックスstereoBufferRecordingとmusicBufferを使用してstereoBufferRecording ) 4.私の場合、playerA-> process(musicBuffer、false、numberOfSamples、1.0f);でfloatToShortInt –

+0

を使用して5. musicBuffer-> input 5. recorder-> process recordingBuffer ; falseを返す、手がかり@Gabor –

関連する問題