【发布时间】:2017-05-27 16:17:52
【问题描述】:
自从我的 Galaxy S5 更新了棒棒糖后,我尝试修复我的应用程序中的通话录音。作为基础,我从这里使用 google 示例项目:Sample。
这是代码的主要部分:
AudioRecorder::AudioRecorder(SampleFormat *sampleFormat, SLEngineItf slEngine) :freeQueue_(nullptr), recQueue_(nullptr), devShadowQueue_(nullptr), callback_(nullptr)
SLresult result;
sampleInfo_ = *sampleFormat;
SLAndroidDataFormat_PCM_EX format_pcm;
ConvertToSLSampleFormat(&format_pcm, &sampleInfo_);
gFp = fopen("/storage/emulated/0/file.pcm", "w");
// configure audio source
SLDataLocator_IODevice loc_dev = {SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT,
SL_DEFAULTDEVICEID_AUDIOINPUT, NULL};
SLDataSource audioSrc = {&loc_dev, NULL};
// configure audio sink
SLDataLocator_AndroidSimpleBufferQueue loc_bq = {
SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE,
DEVICE_SHADOW_BUFFER_QUEUE_LEN};
SLDataSink audioSnk = {&loc_bq, &format_pcm};
// create audio recorder
// (requires the RECORD_AUDIO permission)
const SLInterfaceID id[2] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
SL_IID_ANDROIDCONFIGURATION};
const SLboolean req[2] = {SL_BOOLEAN_FALSE, SL_BOOLEAN_FALSE};
result = (*slEngine)->CreateAudioRecorder(slEngine,
&recObjectItf_,
&audioSrc,
&audioSnk,
2,
id, req);
SLASSERT(result);
// Configure the voice recognition preset which has no
// signal processing for lower latency.
SLAndroidConfigurationItf inputConfig;
result = (*recObjectItf_)->GetInterface(recObjectItf_,
SL_IID_ANDROIDCONFIGURATION,
&inputConfig);
SLuint32 presetValue = SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION;
result = (*inputConfig)->SetConfiguration(inputConfig,
SL_ANDROID_KEY_RECORDING_PRESET,
&presetValue,
sizeof(SLint32));
SLASSERT(result);
result = (*recObjectItf_)->Realize(recObjectItf_, SL_BOOLEAN_FALSE);
SLASSERT(result);
result = (*recObjectItf_)->GetInterface(recObjectItf_, SL_IID_RECORD, &recItf_);
SLASSERT(result);
result = (*recObjectItf_)->GetInterface(recObjectItf_, SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
&recBufQueueItf_);
SLASSERT(result);
result = (*recBufQueueItf_)->RegisterCallback(recBufQueueItf_, bqRecorderCallback, this);
SLASSERT(result);
devShadowQueue_ = new AudioQueue(DEVICE_SHADOW_BUFFER_QUEUE_LEN);
assert(devShadowQueue_);
这是我的问题,这段代码不记录通话的另一端,在输出文件中我只能听到麦克风的声音。我尝试更改参数但结果相同。有谁知道我做错了什么?
【问题讨论】:
-
你好@rafal-depta,你有什么解决方案可以在android中进行相同的或通话录音吗?任何帮助都会非常显着。提前谢谢你。
-
您好@CchanchalShelar 来解决这个问题您需要使用 Android NDK 在 C++ 中编写一些代码。
-
谢谢@rafal-depta 的提示,有什么可能的参考吗?
-
您好,请您提供 cpp 文件的更新代码。任何帮助都将是可观的。
-
我也没有找到 AudioQueue 的 cpp 文件或类,请帮我找到它。提前致谢...
标签: android android-ndk audio-recording voice-recording