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

我正在尝试构建从麦克风录制音频的应用程序,以便以后处理。

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

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

这里有一些额外的信息:Permissions:

  

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

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

提前致谢!

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

编辑

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

编辑

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

我不会称这是正常的,但你在这里输入特定于平台的行为。 在语音呼叫期间使用AudioSource.MIC进行录制将在某些设备上运行,但在其他设备上无法运行。

仅举几个原因,我已经遇到了为什么这个function可能被禁用的问题:

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

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

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

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

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