我有一个跨平台(iOS和安卓)的应用程序,我将在其中录制音频剪辑,然后将其发送到服务器进行一些机器学习操作。在我的iOS应用程序中,我使用AVAudioRecorder录制音频。在安卓应用程序中,我使用MediaRecorder录制音频。在移动端,由于大小的限制,我最初使用m4a格式。到达服务器后,我会将其转换为wav格式,然后在ML操作中使用它。
我的问题是,在iOS中,操作系统默认的AVAudioRecorder在我们开发人员访问原始数据之前会对原始音频数据进行放大。但在安卓系统中,MediaRecorder不提供任何形式的原始数据的默认放大功能。换句话说,在iOS中,我永远不会从麦克风获得原始音频流,而在安卓中,我只能从麦克风获得原始音频流。如果你可以在iPhone和Android手机上同时录制相同的音频和相同的音频源,然后在Audacity中导入录制的音频以进行视觉表现,那么这种区别是显而易见的。我已经附上了下面的示例表示屏幕截图。

在图像中,第一首曲目是Android录制的,第二首曲目来自iOS录制。当我通过耳机听到这两个音频时,我可以模糊地区分它们,但当我可视化数据点时,您可以清楚地看到图像中的差异。这些区别不利于ML操作。
显然,在iPhone中,有一定的放大因素,我也想在安卓中实现。
有没有人知道放大因子?或者,是否有其他可能的替代方案?
发布于 2019-10-11 06:32:31
很有可能不同之处在于自动增益控制的效果。
你可以在你的应用程序的AVAudioSession中通过将其模式设置为AVAudioSessionModeMeasurement来禁用它,这是在你的应用程序中执行一次-通常是在启动时。这禁用了大量的输入信号处理。
阅读你的问题描述,你可能会更好地在Android上启用AGC。
如果这两种情况都没有产生结果,您可能希望对两个信号都进行缩放,以便它们恰好低于剪裁。
let audioSession = AVAudioSession.sharedInstance()
audio.session.setMode(AVAudioSessionModeMeasurement)https://stackoverflow.com/questions/58325375
复制相似问题