因为公司的项目需要,要做一个有暂停功能的录音播放器。查询了资料发现Android原生的录音API--MediaRecorder没有暂停功能。一旦调用MediaRecorder的stop方法,就会生成一个录音文件,所以只能采用一个间接的方式去把每个录音文件给拼接起来。
网上查了好多资料,看了某大神的例子,选出了这个最简单的方式,amr格式的录音文件的合并,只需要把每个录音文件的二进制数据的前6位数据给删除,然后一起保存起来就实现了无缝拼接。比如录了两个文件,a.amr和b.amr,只需要把b.amr的头6位数据删除,然后把两个文件的字节流合并成一个文件,就实现了无缝拼接。
经过一整天的测试和修改,写出了最符合项目需求的Demo(已测试,没bug)。
先来看看效果图:
录音过程中会计时,可暂停,点击完成录音会生成最终的录音文件
录音结束后会生成相应文件夹下的录音列表,点击选择播放,播放可暂停。
代码中带有详细的注释,仔细看就会懂。
package com.example.mediarecorde; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import android.app.Activity; import