在语音呼叫期间,从麦克风录制的音频被静音

时间:2012-08-02 11:20:48

标签: java android audio-recording audiorecord

我正在尝试构建应用程序,该应用程序记录来自麦克风的音频以供稍后处理。

除了以下问题外,一切都运行良好: 在语音呼叫(进出)期间,录制的文件没有音频数据,它只包含NULL。

我使用的是AudioRecorder和MediaRecorder,两者都有同样的问题。 问题是,这是正常的API行为还是我遗漏了什么?

这里有一些额外的信息: 权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

SDK:minSdkVersion =“9”targetSdkVersion =“15”

我正在用Jelly Bean在Nexus S上测试我的应用程序。

提前致谢!

PS如果有人需要更具体的细节,请告诉我。

修改

好的,所有答案都表明这是一种正常行为,但我仍然感到困惑,因为我可以找到许多使用麦克风录制语音通话的应用程序。录制语音通话不是我的意图,但我认为即使在语音通话期间我也可以使用麦克风。 有什么建议吗?

修改

我刚刚测试了Galaxy S Gingerbread上的应用程序,它确实有效!现在我真的很困惑,开始明白“分割”这个词是什么意思......

3 个答案:

答案 0 :(得分:2)

我不会称这是正常的,但您在此处输入特定于平台的行为。在语音通话期间使用AudioSource.MIC进行录制可以在某些设备上使用,但在其他设备上则无效。

仅举几个原因,我已经了解了为什么此功能可能已被停用:

  • 某些平台仅支持在任何给定时间以单一采样率捕获麦克风音频。并且由于语音呼叫优先于其他任何事情(毕竟 一部电话)并且语音呼叫需要8或16 kHz的采样率,因此决定在进行持续录制时该怎么做语音通话启动可能只是简单地将录音静音,因此当您的应用认为它的音量达到44.1 kHz时,您的录音不会被8 kHz数据填充。

  • 如果在语音通话期间让录音机空闲(停止但未释放),某些平台可能会停止从麦克风传输音频数据,从而有效地静音语音呼叫上行链路。为避免这种情况,供应商可能只是决定语音通话期间的录音实际上不会被路由到任何输入设备,而只是填充零。

免责声明:我没有使用过Nexus S,因此我不知道该特定设备的原因是什么。

答案 1 :(得分:0)

我认为这是正常行为,连接CALL时的音频数据永远不会通过运行Android的应用处理器进行处理。通常,Audio芯片组会将其切换为来自Modem的流。

答案 2 :(得分:0)

理论上,你可以从通话本身获得一个馈送(http://stackoverflow.com/questions/4194342/how-can-i-record-voice-and-record-call-in-android),但是大多数制造商显然不支持这一点。

相关问题