2 u013944865 u013944865 于 2014.12.15 09:42 提问

利用Android平台录音,得到的音频严重失真

最近在做Android开发录音方面的开发,利用mediarecord录取声音,得到的音频严重失真,几乎听不出声音的内容,但从声音可以确定的是,这个声音确实是刚才录进去的。开始以为是采样率方面出错,但从打印信息看到,audio系统获取的采样率是8000,通道数是1,调用编码器时识别的采样率也是8000,通道数也是1。现在很迷糊,不知道什么原因导致系统录音失真,请大神帮我定位一下问题。

8个回答

luowenlong860502
luowenlong860502   2014.12.15 10:43
已采纳

你试试我这段代码看能不能录,
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;
}
u013944865
u013944865   2014.12.15 10:48

恩,不是apk的问题,应该是系统的问题。同样一款软件(自己编的、网上第三方的都试了),在我的平台上就出问题,其他平台都可以录制。

luowenlong860502
luowenlong860502   2014.12.15 11:26

哦,那估计真是系统问题了,可以换一款手机试试

lincyang
lincyang   Rxr 2014.12.15 13:32

也不排除是硬件的原因。

u013944865
u013944865   2014.12.15 13:44

还没完全排除硬件,我利用audiorecord,可以录取到正常的PCM(raw),声音正常。但是利用mediarecord录出来就有问题,声音含糊不清。
audiorecord获取到的是PCM数据,没有经过编码器的。mediarecord会调用编码器,但他的数据来源也是利用了audiorecord的PCM数据。
只是在mediarecord的录取过程,我还没能直接截取PCM数据出来分析,还没法验证编码前的数据是否有问题。

luowenlong860502
luowenlong860502   2014.12.15 13:54

如果用audiorecord录制PCM数据就有问题,说明原始声音数据出来就有问题,你可以改下参数,比如改成双声道
public static int channel = AudioFormat.CHANNEL_OUT_STEREO;//AudioFormat.CHANNEL_CONFIGURATION_MONO has deprecated in API level 5;
看是否可行

u013944865
u013944865 单独利用audiorecord录取是没有问题的。
3 年多之前 回复
u013944865
u013944865   2014.12.15 14:18

单独利用audiorecord录取是没有问题的。
我描述一下mediarecord编码后得到的声音,声音带有很大的噪音,声音的音色也失真了,但是还是可以隐约听出声音的内容。声音中说话的速度跟我录进去的速度是一样的(这个是不是可以说明采样率没有问题?)。

luowenlong860502
luowenlong860502   2014.12.15 15:22

那我觉得可能还是参数问题,你将采样率设置为16000 声道设置为立体声 试试

u013944865
u013944865 您好,能加一下您的qq吗?873819557
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!