自定义录音工具类

编程入门 行业动态 更新时间:2024-10-11 23:24:54

<a href=https://www.elefans.com/category/jswz/34/1771438.html style=自定义录音工具类"/>

自定义录音工具类

录音管理类:AudioManger.java

负责创建录音文件,初始化录音,获取音量大小,开始录音,结束录音,释放资源等。

/*** Created by qianye on 2016/8/30.*/
public class AudioManger {private MediaRecorder mMediaRecorder;private String mDir;private String mCurrentFilePath;private static AudioManger mInstance;private boolean isPrepared;//Recorder准备好录音后的回调public interface AudioStateListener {void wellPrepared();}public AudioStateListener mListener;public void setOnAudioStateListener(AudioStateListener Listener) {this.mListener = Listener;}//单例模式public static AudioManger getInstance(String dir) {if (mInstance == null) {synchronized (AudioManger.class) {if (mInstance == null) {mInstance = new AudioManger(dir);}}}return mInstance;}//构造器 参数:  录音文件夹private AudioManger(String dir) {mDir = dir;}//准备录音public void prepareAudio() {try {isPrepared = false;//在录音目录下建立录音文件File dir = new File(mDir);if (!dir.exists()) {dir.mkdirs();}String fileName = generateFileName();File file = new File(dir, fileName);mCurrentFilePath = file.getAbsolutePath();mMediaRecorder = new MediaRecorder();//设置输出文件mMediaRecorder.setOutputFile(mCurrentFilePath);//设置音频源为麦克风mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置音频格式api>=10使用amr_nb 小于10使用raw_amrmMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);//设置音频的编码为amrmMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//准备录制mMediaRecorder.prepare();//准备好录制isPrepared = true;if (mListener != null) {mListener.wellPrepared();}} catch (IOException e) {e.printStackTrace();}}public void start() {if (isPrepared) {//开始录制mMediaRecorder.start();}}//随机生成文件名称private String generateFileName() {return System.currentTimeMillis() + ".amr";}//获取音量大小  maxLevel为最大等级public int getVoiceLevel(int maxLevel) {if (isPrepared) {try {//mMediaRecorder.getMaxAmplitude() 1-32767return maxLevel * mMediaRecorder.getMaxAmplitude() / 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);file.delete();mCurrentFilePath = null;}}public String getCurrentFilePath() {return mCurrentFilePath;}}

自定义录音view:继承了ImageView
使用就和正常的ImageView一样
RecordView.java

/*** Created by qianye on 2017/4/6.*/public class RecordView extends ImageView implements AudioManger.AudioStateListener {private AudioManger audioManger;private boolean isRecording = false;//是否正在录制private boolean tooShort = false;//是否时间过短private int time = 0;private Handler handler;private int MaxVoice = 14;//默认音量等级private int MAXTIME = 90;private boolean isPrepared = false;public RecordView(Context context) {this(context, null);Log.i("LHD", "RecordView  1");}public RecordView(Context context, AttributeSet attrs) {super(context, attrs);Log.i("LHD", "RecordView  2");String dir = Environment.getExternalStorageDirectory() + "/audios";audioManger = AudioManger.getInstance(dir);audioManger.setOnAudioStateListener(this);handler = new Handler();audioManger.prepareAudio();}//audio准备后之后开始录音的回调@Overridepublic void wellPrepared() {Log.i("LHD", "wellPrepared");isRecording = false;time = 0;tooShort = false;isPrepared = true;}public void start() {if (!isPrepared) {audioManger.prepareAudio();}audioManger.start();isRecording = true;//更新音量handler.post(runnable);}public void stop() {if (time <= 30) {audioRecordListener.tooShort();} else {//回调audioRecordListener.finish(time, audioManger.getCurrentFilePath());}//正常结束audioManger.release();isPrepared = false;reset();}//接口回调public interface AudioRecordListener {//已经录制的时间void hasRecord(int seconds);//录制完成void finish(int seconds, String filePath);//时间太短void tooShort();//音量大小  根据设置的最大音量返回当前音量值void curVoice(int voice);}private AudioRecordListener audioRecordListener;public void setOnAudioRecordListener(AudioRecordListener listener) {audioRecordListener = listener;}Runnable runnable = new Runnable() {@Overridepublic void run() {if (isRecording) {time++;audioRecordListener.hasRecord(time);audioRecordListener.curVoice(audioManger.getVoiceLevel(MaxVoice));handler.postDelayed(this, 100);}}};//置位private void reset() {isRecording = false;time = 0;tooShort = false;handler.removeCallbacks(runnable);}//get set 方法public void setMaxVoice(int maxVoice) {MaxVoice = maxVoice;}public int getMaxVoice() {return MaxVoice;}
}

使用:

        imgStart.setMaxVoice(16);imgStart.setOnAudioRecordListener(new RecordView.AudioRecordListener() {@Overridepublic void hasRecord(int seconds) {//已经录制的时间}@Overridepublic void finish(int seconds, String filePath) {//录制时间 注意此处单位是ms,如果需要修改成s可直接修改代码}@Overridepublic void tooShort() {//小于3s显示时间过短}@Overridepublic void curVoice(int voice) {//当前的音量等级}});

具体使用可参考我的另一篇博客:

自定义view实现录音功能,圆形进度条 - 秦时明月 - 博客频道 - CSDN.NET

demo下载:

自定义view 录音 圆形进度条 - 下载频道 - CSDN.NET

更多推荐

自定义录音工具类

本文发布于:2024-03-07 18:57:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718642.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   工具

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!