用Android源生的Api做个简单的录音播放。
private var mMediaRecorder: MediaRecorder? = null
private fun startRecord(duration: Int) {
try {
stopRecord()
if (mMediaRecorder == null) {
mMediaRecorder = MediaRecorder()
}
mMediaRecorder!!.setAudioSource(MediaRecorder.AudioSource.MIC) // 设置麦克风
mMediaRecorder!!.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT)
mMediaRecorder!!.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT)
val destDir = File(CommonConstant.PHOTO_PATH) //文件路径
if (!destDir.exists()) {
destDir.mkdirs()
}
val file = File(CommonConstant.PHOTO_PATH + "testMic.mp3")
if (!file.exists()) {
file.createNewFile()
}
mMediaRecorder!!.setOutputFile(file.absolutePath)
mMediaRecorder!!.setMaxDuration(duration * 1000) //最大持续时间
mMediaRecorder!!.prepare()
mMediaRecorder!!.start()
mHandler?.postDelayed({
stopRecord()
}, (duration * 1000).toLong())
} catch (e: IllegalStateException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}
}
//停止录音
private fun stopRecord() {
if (mMediaRecorder != null) {
mMediaRecorder!!.stop()
mMediaRecorder!!.reset()
mMediaRecorder!!.release()
mMediaRecorder = null
}
}
播放:
public void testMicAudio() {
try {
File file = new File(CommonConstant.PHOTO_PATH + "/testMic.mp3");
final MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(file.getAbsolutePath());
mediaPlayer.setLooping(false);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(mp -> {
mp.start();
MagicLog.d("------------------begin");
});
mediaPlayer.setOnCompletionListener(mp -> {
MagicLog.d("------------------onCompletion release");
mediaPlayer.release();
});
mediaPlayer.setOnErrorListener((mp, what, extra) -> {
MagicLog.e("-----mediaPlayer onError");
return false;
});
MagicLog.d("开始播放");
} catch (IOException e) {
e.printStackTrace();
}
}
|