最近在做Android开发录音方面的开发,利用mediarecord录取声音,得到的音频严重失真,几乎听不出声音的内容,但从声音可以确定的是,这个声音确实是刚才录进去的。开始以为是采样率方面出错,但从打印信息看到,audio系统获取的采样率是8000,通道数是1,调用编码器时识别的采样率也是8000,通道数也是1。现在很迷糊,不知道什么原因导致系统录音失真,请大神帮我定位一下问题。
你试试我这段代码看能不能录,
public static boolean record(String savePath){
LogHelper.logPrint(MediaUtils.class, "record savePath = " + savePath);
boolean ret = true;
if(mediaRecorder != null){
mediaRecorder.release();
mediaRecorder = null;
}
mediaRecorder = new MediaRecorder();
if(mediaRecorder != null){
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setOutputFile(savePath);
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
ret = false;
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
ret = false;
e.printStackTrace();
}
if(ret){
mediaRecorder.start();
}
}else{
LogHelper.errorPrint(MediaUtils.class, "create mediaRecorder failed!!!");
ret = false;
}
return ret;
}
恩,不是apk的问题,应该是系统的问题。同样一款软件(自己编的、网上第三方的都试了),在我的平台上就出问题,其他平台都可以录制。
也不排除是硬件的原因。
还没完全排除硬件,我利用audiorecord,可以录取到正常的PCM(raw),声音正常。但是利用mediarecord录出来就有问题,声音含糊不清。
audiorecord获取到的是PCM数据,没有经过编码器的。mediarecord会调用编码器,但他的数据来源也是利用了audiorecord的PCM数据。
只是在mediarecord的录取过程,我还没能直接截取PCM数据出来分析,还没法验证编码前的数据是否有问题。
如果用audiorecord录制PCM数据就有问题,说明原始声音数据出来就有问题,你可以改下参数,比如改成双声道
public static int channel = AudioFormat.CHANNEL_OUT_STEREO;//AudioFormat.CHANNEL_CONFIGURATION_MONO has deprecated in API level 5;
看是否可行
单独利用audiorecord录取是没有问题的。
我描述一下mediarecord编码后得到的声音,声音带有很大的噪音,声音的音色也失真了,但是还是可以隐约听出声音的内容。声音中说话的速度跟我录进去的速度是一样的(这个是不是可以说明采样率没有问题?)。
那我觉得可能还是参数问题,你将采样率设置为16000 声道设置为立体声 试试