Android MediaRecorder无法修改音频通道数,始终输出单声道求助
我在开发一款应用时,按以下方式配置MediaRecorder:
mediaRecorder.setAudioSource(AudioSource.MIC); mediaRecorder.setVideoSource(VideoSource.SURFACE); CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); cpHigh.audioChannels = 2; mediaRecorder.setProfile(cpHigh); mediaRecorder.setVideoSize(specifiedWidth, specifiedHeight); mediaRecorder.setOutputFile(videoFilename); try { mediaRecorder.prepare(); } catch (Exception e) { ... }
尽管设置了cpHigh.audioChannels = 2;,但保存的文件仍为单声道。改用mediaRecorder.setAudioChannels(2);后依旧无效,始终输出单声道,请问这是什么原因?
设备硬件限制:多数安卓设备的内置麦克风本身就是单声道硬件,不管代码里怎么设置双声道,硬件无法提供立体声输入,最终输出自然还是单声道。可以先拿系统自带录音APP测试,看设备本身是否支持立体声录制。
CamcorderProfile的覆盖逻辑:
CamcorderProfile.get()返回的是设备预设的支持配置,手动修改audioChannels大概率不生效——setProfile()方法会优先套用设备实际支持的音频参数,直接覆盖你的修改。另外setAudioChannels()必须在setProfile()之前调用才有可能生效,因为setProfile()会重置所有音频相关配置。编码格式不支持立体声:部分老旧设备的默认音频编码(比如AMR-NB)本身不支持双声道,即便设置了通道数,编码器也会自动降级为单声道。可以检查
cpHigh.audioCodec对应的编码格式,尝试切换到AAC这类支持立体声的编码格式。音频源的限制:
AudioSource.MIC在部分设备上被系统限制为单声道输入,哪怕硬件是立体声的,系统音频源配置也会锁死通道数。可以尝试替换为AudioSource.DEFAULT,或者查看设备的音频源权限配置是否允许立体声输入。
内容的提问来源于stack exchange,提问作者Matin Kh

