当前位置: 首页 > 知识库问答 >
问题:

如何配置OpenSL来记录语音通话

桓宜
2023-03-14

我正在开发一个使用MediaRecorderVOICE_CALL音频源的通话记录器应用程序,在一些Marshmallow设备中,它崩溃了,然后我将源更改为MIC,这里输入的语音没有被记录。由于这个java限制,现在我正在使用原生android代码来记录语音通话。我设法使用原生音频记录器来记录通话记录器的音频。问题是在原生代码中,它也只记录一侧语音,输入的语音没有被记录。然后我尝试了语音通信预设配置,它没有被记录。下面是预设配置代码。

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(0x 559548 c 350)创建audio record对象时出错;状态-22

打开状态: 离开对象::实现 (SL_RESULT_CONTENT_UNSUPPORTED)

共有1个答案

谈桐
2023-03-14

检查文档并设置正确的采样率、格式和掩码。通道掩码可以是立体声或单声道。我不确定您是如何获得状态-22错误的,但根据文档,Realize错误非常明显

SL_RESULT_CONTENT_UNSUPPORTED如果不支持格式(例如采样率太高)

看看NDK样本,以阐明您的参数设置

 类似资料:
  • 问题内容: 我想通知任何传入和传出语音呼叫的代码。我需要掌握以下所有内容: 如果是来电或去电 拨打的号码或来电显示的电话号码 通话时长,或者如果错过了通话 如果电话号码与电话的联系人列表中的某人匹配,如果我可以获得更多的联系信息,特别是联系人姓名,那也将是一件很圆滑的事。 通话结束后,我需要我的代码来获取这些信息。也许我只是没有在寻找正确的术语,但是我很难找到如何实现此目标的任何示例。 如果有人可

  • 我有一个应用程序whcih记录传入和传出语音呼叫,它在Marshmallow或更高版本的设备上运行良好versions.But当我尝试在android 5.1.1上运行它时,它给我错误,应用程序停止响应。 我用于录制语音通话的代码是 - 编辑-我按照下面的回答做了,但是错误仍然存在。通过稍微调整代码,调用状态现在只被调用一次,但应用程序仍然崩溃,甚至异常也是一样的。

  • 我用MediaRecorder开发了语音记录器。我在听最后一段录音。我想要一个录音开始时像Google voice那样的语音图/图表(Google Speak Now图表)

  • 问题内容: 如何配置OpenEJB日志记录格式?这就是我现在在日志中看到的内容: 我想禁用消息,并更改其他消息的格式。中的更改无效。 问题答案: 这是我为使事情正常运行所做的工作: 现在工作正常。这是我的: 这是: 现在,由于大卫的支持,我可以在测试期间微调OpenEJB的日志记录:)

  • 我在Android的通话记录应用程序中工作,以记录双方的语音,它在Android版本6之前工作良好,但在Android 7中不工作。Android 7的问题是远程语音未记录或可能听不到。 我用的是MediaRecorder。我尝试了所有的音频来源,但没有运气。如果有人知道如何在Android 7中实现这一点,请分享它或一些关于这方面的建议将非常有帮助。

  • 我对android中的通话记录非常感兴趣。但正如你已经知道的那样,android 9正式关闭了语音通话记录。但就在Android 10发布后(2019年9月3日),在浏览他们的新发行说明时,我看到了下面的页面,在通话记录方面看起来很有希望。https://developer . Android . com/guide/topics/media/sharing-audio-input关于语音通话记录