您的位置:首页 > 移动开发 > Android开发

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

2016-02-07 14:02 746 查看
首先,编写录制音频类 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"/>


具体代码点击

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: