【发布时间】:2018-01-17 11:37:19
【问题描述】:
我正在使用 MediaRecorder VOICE_CALL 音频源开发通话记录器应用程序,在某些棉花糖设备中它崩溃了,然后我将源更改为 MIC 这里传入的语音不是被记录下来。由于这个 java 限制,现在我正在使用原生 android 代码来录制语音通话。 我设法使用native-audio 录音机录制了通话录音机的音频。问题出在本机代码中,它只录制一侧的声音,传入的声音没有被录制。然后我尝试了语音通信预设配置,它没有录音。下面是预设的配置代码。
const SLInterfaceID id[2] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE,SL_IID_ANDROIDCONFIGURATION};
const SLboolean req[2] = { SL_BOOLEAN_TRUE,SL_BOOLEAN_TRUE};
result = (*engineEngine)->CreateAudioRecorder(engineEngine, &recorderObject, &audioSrc,
&audioSnk, 2, id, req);
SLAndroidConfigurationItf inputConfig;
result = (*recorderObject)->GetInterface(recorderObject,
SL_IID_ANDROIDCONFIGURATION,
&inputConfig);
if (SL_RESULT_SUCCESS == result) {
SLuint32 presetValue =SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION ;
(*inputConfig)->SetConfiguration(inputConfig,
SL_ANDROID_KEY_RECORDING_PRESET,
&presetValue,
sizeof(SLuint32));
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "\n Native PCM Conf Success\n");
} else{
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "\n Native PCM Conf Error %d\n",result);
}
添加预设配置后,开始录制语音通话时出现系统错误:
E/AudioRecord:无法获取记录源 7 的音频输入,示例 速率 16000,格式 0x1,通道掩码 0x10,会话 925,标志 0
E/libOpenSLES: android_audioRecorder_realize(0x559548c350) 错误 创建 AudioRecord 对象;状态 -22
W/libOpenSLES:离开 Object::Realize (SL_RESULT_CONTENT_UNSUPPORTED)
【问题讨论】:
-
你在谈论github.com/googlesamples/android-ndk/tree/master/audio-echo这个链接,但在我的情况下,音频文件不是用这个代码创建的
-
不,我使用了这个例子:github.com/googlesamples/android-ndk/tree/master/native-audio,在语音通话期间,我启动了录音机,并将缓冲区存储的文件作为 .pcm 存储在 sd 卡中。检查此链接以保存到 SD 卡:stackoverflow.com/questions/18444354/…
-
表示它没有自动启动?我运行代码有一个按钮启动所以当我打电话给任何人时我去这个appp并按下按钮开始然后它会开始记录?它把我的文件放在哪个文件夹?
-
您需要将缓冲区保存在 sdcard 中,在您的情况下,它会将记录的文件作为缓冲区数据保存在 ram 中。您需要将该本地文件放入您的通话记录器应用程序中,并在触发通话时启动记录器。
-
你解决了吗?
标签: android audio android-ndk opensl