2

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

一切正常,除了以下问题:在语音通话(进出)期间,录制的文件没有音频数据,它只包含 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 上测试了该应用程序,它成功了!现在我真的很困惑,开始理解“分段”这个词是什么意思......

4

3 回答 3

2

我不会称这为正常,但您在此处输入特定于平台的行为。在语音通话期间录音AudioSource.MIC将适用于某些设备,但不适用于其他设备。

仅举几个我自己遇到的为什么此功能可能已被禁用的原因:

  • 某些平台仅支持在任何给定时间以单一采样率捕获麦克风音频。而且由于语音通话优先于其他任何东西(毕竟这一部电话),并且语音通话需要 8 或 16 kHz 采样率,因此当您在语音通话开始时进行持续录音时,决定做什么可能很简单将录音静音,这样当您的应用程序认为它达到 44.1 kHz 时,您的录音就不会充满 8 kHz 数据。

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

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

于 2012-08-03T13:08:11.280 回答
0

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

于 2012-08-02T11:34:46.613 回答
0

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

于 2012-08-02T11:37:34.957 回答