【Android开发小记--13】录制音频

来源:互联网 发布:京东高级java笔试题 编辑:程序博客网 时间:2024/04/27 22:11


首先,编写录制音频类 AudioRecorde.java :

       这里需要 1. 设置存储的目录路径; 2. 开启录制项; 3. 停止录制项


public class AudioRecorder {    private String dir;//路径    private String fileName;    private MediaRecorder mediaRecorder;//--------------- 1 -----------------------------------------    public AudioRecorder() {        //目录地址        dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myrecorder/";    }//--------------- 2 -----------------------------------------    /*开启录制*/    public void start() throws IOException {        String state = Environment.getExternalStorageState();        if (!state.equals(Environment.MEDIA_MOUNTED)) {            throw new IOException("没有可用的存储空间");        }        File myDir = new File(dir);        if (!myDir.exists()) {            myDir.mkdir();        }        //文件的的名字=目录名+系统时间+音频格式        fileName = dir + System.currentTimeMillis() + ".amr";        //实例化        mediaRecorder = new MediaRecorder();//        设置参数        //录音音频来源        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);        //输出格式设置        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);        //编码        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);        //采样率        mediaRecorder.setAudioSamplingRate(8000);        //音频的名字设置到输出文件中        mediaRecorder.setOutputFile(fileName);        mediaRecorder.prepare();        mediaRecorder.start();//开启录制    }//--------------- 3 ---------------------------------------    /*停止录制*/    public void stop() {        if (mediaRecorder != null) {            mediaRecorder.stop();//停止            mediaRecorder.release();//释放            mediaRecorder = null;//置空        }    }    public String getPath(){        return fileName;    }}


然后,播放音频类 AudioPlayer.java :
      这里需要 1. 播放功能  2. 获取读取路径

public class AudioPlayer {    private MediaPlayer mediaplayer;//播放类    private String playerPath;//播放路径    public AudioPlayer() {    }    public void setPlayerPath(String playerPath) {        this.playerPath = playerPath;    }    /*播放*/    public void play() {        if (mediaplayer == null) {            mediaplayer = new MediaPlayer();        }        try {            mediaplayer.setDataSource(playerPath);            mediaplayer.prepare();            mediaplayer.start();            mediaplayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {                @Override                public void onCompletion(MediaPlayer mp) {                }            });        } catch (IOException e) {            e.printStackTrace();        }    }}


然后,在 MainActivity.java 中具体实现音频的录制与播放:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button btn_recorder;    private Button btn_stop_recorder;    private Button btn_play_recorder;    private AudioRecorder mRecorder;    private AudioPlayer mPlayer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn_recorder = (Button) findViewById(R.id.btn_recorder);        btn_stop_recorder = (Button) findViewById(R.id.btn_stop_recorder);        btn_play_recorder = (Button) findViewById(R.id.btn_play_recorder);        btn_recorder.setOnClickListener(this);        btn_stop_recorder.setOnClickListener(this);        btn_play_recorder.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            //录制音频            case R.id.btn_recorder:                if (mRecorder == null) {                    mRecorder = new AudioRecorder();                }                try {                    mRecorder.start();                } catch (IOException e) {                    e.printStackTrace();                }                break;            //停止录音            case R.id.btn_stop_recorder:                if (mRecorder != null) {                    mRecorder.stop();                }                break;            //播放录音            case R.id.btn_play_recorder:                if (mPlayer == null) {                    mPlayer = new AudioPlayer();                    mPlayer.setPlayerPath(mRecorder.getPath());                }                mPlayer.play();                break;        }    }}



最后还需添加权限功能:
  读取、写入外部存储,以及录制音频的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.RECORD_AUDIO"/>



具体代码点击





0 0