u013944865
wsxnvkzh
2014-12-15 01:42
采纳率: 100%
浏览 6.9k

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • luowenlong860502
    媒体盒子 2014-12-15 02: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
    wsxnvkzh 2014-12-15 02:48

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

    点赞 评论
  • lincyang
    全速前行 2014-12-15 05:32

    也不排除是硬件的原因。

    点赞 评论
  • u013944865
    wsxnvkzh 2014-12-15 05:44

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

    点赞 评论
  • luowenlong860502
    媒体盒子 2014-12-15 05:54

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

    点赞 评论
  • u013944865
    wsxnvkzh 2014-12-15 06:18

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

    点赞 评论
  • luowenlong860502
    媒体盒子 2014-12-15 07:22

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

    点赞 评论

相关推荐