李剑一 2019-03-23 10:06 采纳率: 0%
浏览 700

安卓仿微信语音聊天时,MediaRecorder mMediaRecorder处报错

import java.io.File;
import java.io.IOException;
import java.util.UUID;

import android.media.MediaRecorder;
import android.util.Log;

public class AudioManager {

    private MediaRecorder mMediaRecorder;
    private String mDir;
    private String mCurrentFilePath;

    private static AudioManager mInstance;

    private boolean isPrepared = false;

    public AudioManager(String mDir) {
        this.mDir = mDir;
    }

    /**
     * 回调准备完毕
     * @author lenovo
     *
     */
    public interface AudioStateListener
    {
        void wellPrepared();
    }

    public AudioStateListener mListener;

    public void setOnAudioStateListener(AudioStateListener mListener) {
        this.mListener = mListener;
    }

    public static AudioManager getInstance(String mDir)
    {
        if(mInstance == null)
        {
            synchronized (AudioManager.class)
            {
                mInstance = new AudioManager(mDir);
            }
        }
        return mInstance;
    }

    public void prepareAudio()
    {
        try {
            isPrepared = false;
            File dir = new File(mDir);
            if(!dir.exists())
                dir.mkdirs();

            String fileName = generateName();
            File file = new File(dir, fileName);

            mCurrentFilePath = file.getAbsolutePath();
            mMediaRecorder = new MediaRecorder();
            //设置输出文件
            mMediaRecorder.setOutputFile(file.getAbsolutePath());
            //设置音频源为麦克风
            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            //设置音频格式
            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
            //设置音频编码
            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

//          mMediaRecorder.setAudioSamplingRate(8000);

            mMediaRecorder.prepare();
            mMediaRecorder.start();

            isPrepared = true;
            if(mListener != null)
                mListener.wellPrepared();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }

    private String generateName() {
        return UUID.randomUUID().toString()+".amr";
    }

    public int getVoiceLevel(int maxLevel)
    {
        if(isPrepared)
        {
            try {
                //mMediaRecorder.getMaxAmplitude() 1-32767
                //注意此处mMediaRecorder.getMaxAmplitude 只能取一次,如果前面取了一次,后边再取就为0了
                return ((mMediaRecorder.getMaxAmplitude()*maxLevel)/32768)+1;
            } catch (Exception e) {
            }
        }
        return 1;
    }

    public void release()
    {
        if(mMediaRecorder != null)
        {
            mMediaRecorder.stop(); //这里报错
            mMediaRecorder.release();
            mMediaRecorder = null;
        }
    }

    public void cancel()
    {
        release();   //这里也报错
        if(mCurrentFilePath != null)
        {
            File file = new File(mCurrentFilePath);
            if(file.exists())
            {
                file.delete();
                mCurrentFilePath = null;
            }
        }
    }

    public String getCurrentFilePath() {
        return mCurrentFilePath;
    }
}

文件中的两处报错地点我都写上了,希望有大神帮忙解决一下!

  • 写回答

1条回答 默认 最新

  • 熊佳龙 2019-03-26 09:59
    关注

    错误log贴出来看看撒

    评论

报告相同问题?

悬赏问题

  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题