Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android';s媒体记录器以匹配iOS';那是AVAudioRecorder吗?_Android_Ios_Audio_Audio Recording_Audio Processing - Fatal编程技术网

android';s媒体记录器以匹配iOS';那是AVAudioRecorder吗?

android';s媒体记录器以匹配iOS';那是AVAudioRecorder吗?,android,ios,audio,audio-recording,audio-processing,Android,Ios,Audio,Audio Recording,Audio Processing,我有一个跨平台(iOS和Android)的应用程序,我将录制音频片段,然后将其发送到服务器上进行一些机器学习操作。在我的iOS应用程序中,我使用AVAudioRecorder录制音频。在Android应用程序中,我使用MediaRecorder录制音频。在手机中,由于尺寸限制,我最初使用m4a格式。到达服务器后,我会将其转换为wav格式,然后在ML操作中使用它 我的问题是,在iOS中,默认情况下,AVAudioRecorder会在开发人员访问原始数据之前对原始音频数据进行放大。但在安卓系统中,M

我有一个跨平台(iOS和Android)的应用程序,我将录制音频片段,然后将其发送到服务器上进行一些机器学习操作。在我的iOS应用程序中,我使用
AVAudioRecorder
录制音频。在Android应用程序中,我使用MediaRecorder录制音频。在手机中,由于尺寸限制,我最初使用m4a格式。到达服务器后,我会将其转换为
wav
格式,然后在ML操作中使用它

我的问题是,在iOS中,默认情况下,AVAudioRecorder会在开发人员访问原始数据之前对原始音频数据进行放大。但在安卓系统中,MediaRecorder不提供任何原始数据的默认放大功能。换句话说,在iOS中,我永远不会从麦克风获取原始音频流,而在Android中,我总是只从麦克风获取原始音频流。如果您可以在iPhone和Android手机中使用一个公共音频源并排录制相同的音频,然后将录制的音频导入Audacity以进行可视化表示,那么这种区别是显而易见的。我在下面附上了一个示例表示屏幕截图

在图像中,第一个曲目是Android录制,第二个曲目来自iOS录制。当我通过耳机听到这两个音频时,我可以模糊地区分它们,但当我看到数据点时,你可以清楚地看到图像中的差异。这些区别不利于ML操作

显然,在iPhone中,有一个特定的放大因子,我也想在Android中实现


有人知道放大系数吗?或者还有其他可能的替代方案吗?

很可能区别在于自动增益控制的效果

您可以在应用程序的
AVAudioSession
中禁用此功能,方法是将其模式设置为
AVAudioSessionModeMeasurement
,通常在启动时在应用程序中执行一次。这将禁用大量输入信号处理

阅读您的问题描述,您最好在Android上启用AGC

如果这两种方法都不能产生结果,您可能需要对两种信号进行缩放,使其刚好低于限幅

let audioSession = AVAudioSession.sharedInstance()

audio.session.setMode(AVAudioSessionModeMeasurement)