Android录音时获取分贝值的方法代码实例

Android录音时获取分贝值的方法代码实例,第1张

概述参考文章Android中实时获取音量分贝值详解:https://www.oudahe.com/p/23240/publicclassMediaRecorderDemo{

参考文章AndroID中实时获取音量分贝值详解:https://www.oudahe.com/p/23240/

public class MediaRecorderDemo {   private final String TAG = "MediaRecord";   private MediaRecorder mMediaRecorder;   public static final int MAX_LENGTH = 1000 * 60 * 10;// 最大录音时长1000*60*10;   private String filePath;    public MediaRecorderDemo(){     this.filePath = "/dev/null";   }    public MediaRecorderDemo(file file) {     this.filePath = file.getabsolutePath();   }    private long startTime;   private long endTime;    /**    * 开始录音 使用amr格式    *    *      录音文件    * @return    */   public voID startRecord() {     // 开始录音     /* ①Initial:实例化MediaRecorder对象 */     if (mMediaRecorder == null)       mMediaRecorder = new MediaRecorder();     try {       /* ②setAudioSource/setVedioSource */       mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风       /* ②设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default 声音的(波形)的采样 */       mMediaRecorder.setoutputFormat(MediaRecorder.OutputFormat.DEFAulT);             /*        * ②设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式        * ,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB)        */       mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);        /* ③准备 */       mMediaRecorder.setoutputfile(filePath);       mMediaRecorder.setMaxDuration(MAX_LENGTH);       mMediaRecorder.prepare();       /* ④开始 */       mMediaRecorder.start();       // AudioRecord audioRecord.       /* 获取开始时间* */       startTime = System.currentTimeMillis();       updateMicStatus();       Log.i("ACTION_START","startTime" + startTime);     } catch (IllegalStateException e) {       Log.i(TAG,"call startAmr(file mRecAudiofile) Failed!"               + e.getMessage());     } catch (IOException e) {       Log.i(TAG,"call startAmr(file mRecAudiofile) Failed!"               + e.getMessage());     }   }    /**    * 停止录音    *    */   public long stopRecord() {     if (mMediaRecorder == null)       return 0L;     endTime = System.currentTimeMillis();     Log.i("ACTION_END","endTime" + endTime);     mMediaRecorder.stop();     mMediaRecorder.reset();     mMediaRecorder.release();     mMediaRecorder = null;     Log.i("ACTION_LENGTH","Time" + (endTime - startTime));     return endTime - startTime;   }    private final Handler mHandler = new Handler();   private Runnable mUpdateMicStatusTimer = new Runnable() {     public voID run() {       updateMicStatus();     }   };    /**    * 更新话筒状态    *    */   private int BASE = 1;   private int SPACE = 100;// 间隔取样时间    private voID updateMicStatus() {     if (mMediaRecorder != null) {       double ratio = (double)mMediaRecorder.getMaxAmplitude() /BASE;       double db = 0;// 分贝       if (ratio > 1)         db = 20 * Math.log10(ratio);       Log.d(TAG,"分贝值:"+db);       mHandler.postDelayed(mUpdateMicStatusTimer,SPACE);     }   } }

总结

以上是内存溢出为你收集整理的Android录音时获取分贝值的方法代码实例全部内容,希望文章能够帮你解决Android录音时获取分贝值的方法代码实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1142352.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存