Android錄音時(shí)獲取分貝值的方法代碼實(shí)例
參考文章Android中實(shí)時(shí)獲取音量分貝值詳解:http://www.dbjr.com.cn/article/64806.htm
public class MediaRecorderDemo { private final String TAG = "MediaRecord"; private MediaRecorder mMediaRecorder; public static final int MAX_LENGTH = 1000 * 60 * 10;// 最大錄音時(shí)長(zhǎng)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:實(shí)例化MediaRecorder對(duì)象 */ if (mMediaRecorder == null) mMediaRecorder = new MediaRecorder(); try { /* ②setAudioSource/setVedioSource */ mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設(shè)置麥克風(fēng) /* ②設(shè)置音頻文件的編碼:AAC/AMR_NB/AMR_MB/Default 聲音的(波形)的采樣 */ mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); /* * ②設(shè)置輸出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式 * ,H263視頻/ARM音頻編碼)、MPEG-4、RAW_AMR(只支持音頻且音頻編碼要求為AMR_NB) */ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); /* ③準(zhǔn)備 */ mMediaRecorder.setOutputFile(filePath); mMediaRecorder.setMaxDuration(MAX_LENGTH); mMediaRecorder.prepare(); /* ④開始 */ mMediaRecorder.start(); // AudioRecord audioRecord. /* 獲取開始時(shí)間* */ 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(); } }; /** * 更新話筒狀態(tài) * */ private int BASE = 1; private int SPACE = 100;// 間隔取樣時(shí)間 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); } } }
相關(guān)文章
android開發(fā)之蜂鳴提示音和震動(dòng)提示的實(shí)現(xiàn)原理與參考代碼
蜂鳴提示音和震動(dòng)提示此功能在手機(jī)使用中很實(shí)用,最近在讀zxing項(xiàng)目,學(xué)到了不少東西;我們一起來(lái)看看他是怎么做的,感興趣的朋友可以了解下哦2013-01-01Android實(shí)現(xiàn)調(diào)用攝像頭
本文給大家分享的是,在安卓APP開發(fā)的過(guò)程中,經(jīng)常會(huì)需要調(diào)用手機(jī)自身攝像頭拍照的代碼,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-07-07Android DrawerLayout帶有側(cè)滑功能的布局類(2)
這篇文章主要為大家詳細(xì)介紹了Android DrawerLayout帶有側(cè)滑功能的布局類,感興趣的小伙伴們可以參考一下2016-07-07自定義TextView跑馬燈效果可控制啟動(dòng)/停止/速度/焦點(diǎn)
Android自帶的跑馬燈效果不太好控制,不能控制速度,不能即時(shí)停止和啟動(dòng),而且還受焦點(diǎn)的影響蛋疼不已。由于項(xiàng)目需求需所以自己寫了一個(gè)自定義的TextView,感興趣的朋友可以了解下2013-01-01Android onMeasure與onDraw及自定義屬性使用示例
這篇文章主要介紹了Android onMeasure與onDraw及自定義屬性使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02Android 使用Vitamio打造自己的萬(wàn)能播放器(10)—— 本地播放 (縮略圖、視頻信息、視頻掃描服務(wù))
本文主要介紹Android 使用Vitamio開發(fā)播放器,這里主要講解本地播放 (縮略圖、視頻信息、視頻掃描服務(wù))等功能,有需要的小伙伴可以參考下2016-07-07android中實(shí)現(xiàn)在ImageView上隨意畫線涂鴉的方法
今天小編就為大家分享一篇android中實(shí)現(xiàn)在ImageView上隨意畫線涂鴉的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10