【发布时间】:2018-07-19 21:16:49
【问题描述】:
这是关于在最近的 Android 设备上捕获音频内容的问题。我正在开发一个必须录制未处理的麦克风音频的 Android 应用程序。在试图弄清楚如何实现这一点的过程中,我遇到了 Android 兼容性定义文档 (CDD),从 5.0 (API 21) 版本开始,该文档声明“声明 android.hardware.microphone 的设备实现必须允许捕获原始音频内容 [...]”(请参阅 5.0 及更高版本的任何 CDD,在“音频录制”部分:https://source.android.com/compatibility/cdd)。
另一方面,我发现可以在 MediaRecorder API 下选择几个音频源,并且为了“录制原始音频,请选择 UNPROCESSED。某些设备不支持未处理的输入。首先调用 AudioManager.getProperty(AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED) 以验证它是否可用”(来源:https://developer.android.com/guide/topics/media/mediarecorder)。 API 24 中添加了 PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED 属性。
这就是我需要帮助的地方:我对 CDD 表明必须允许捕获原始数据而 MediaRecorder 并不总是允许访问它这一事实感到困惑。也许“原始”与“未加工”不同?或者这可能意味着原始/未处理的音频数据仅适用于系统级功能,第三方开发人员无法使用。
请注意,当我测试以验证未处理的属性是否可用于 3 种不同的 Android 设备(包括具有 API 26 的 Galaxy S8)时,我从未得到肯定的结果。
话虽如此,有人可以澄清为什么 CDD 表明当未处理的 AudioMagager API 属性似乎很少可用时,必须可以捕获原始音频内容。我应该以不同的方式访问原始/未处理的音频内容吗?
提前致谢!
【问题讨论】:
-
仅仅因为它必须提供原始数据并不意味着操作系统需要将它提供给用户。必须由框架/操作系统内部使用
标签: android audio microphone