我正在使用 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 建议的更改之后是代码 fragment
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; }
Best Answer-推荐答案 strong>
这是您在代码中所做的:
输入->stereoBufferRecording->录音机
输入->stereoBufferRecording->?
播放器->musicBuffer->输入
当 askRecording 为 false 时,播放器根本不玩。
我猜“输入”与“输出”的缓冲区相同?
关于android - super 强大的 Android 同时播放和录制,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/45764824/
|