做者:林冠宏 / 指尖下的幽靈java
掘金:juejin.im/user/587f0d…git
博客:www.cnblogs.com/linguanh/github
GitHub : github.com/af913337456…微信
爲了您的直觀體驗,請務必看完下面 截圖,源碼 gitHub 連接在其以後。異步
順便提一下:
這個是接着我上一次開源的 仿:Android - 微信 - 朋友圈 - 小視頻播放,多4句廢話算我輸 項目的。ide目的:
不想爲具有相同功能的應用開發作每次的相同代碼的編寫,再用簡潔的風格造輪子。函數
爲了不你們浪費時間,直接先看下面的 截圖,看完後,若你以爲會須要到,那麼就請聽我繼續。post
以前說過的開源IM系統,實際上是作好了的,沒什麼時間寫文檔,太亂開了也沒意義。此次的文章也是擠出時間寫的。語言我會盡可能作到通俗易懂,少說點廢話,謝謝那些一直關注個人同行,定以乾貨以回報之。this
本着開源的精神,若是對你有用,但願您能給予個星星(star)
github.com/af913337456…spa
1,直觀的
2,隱藏的
實例:
private VoiceRecorderHelper voiceRecorderHelper;複製代碼
觸發:
// R.id.record 這個 VIew 是你的觸發 View
findViewById(R.id.record).setOnTouchListener(
new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN: /** 手指按下 */
voiceRecorderHelper.Action_Down(v,motionEvent);
return true;
case MotionEvent.ACTION_MOVE: /** 移動 */
voiceRecorderHelper.Action_Move(v,motionEvent);
return true;
case MotionEvent.ACTION_UP: /** 擡起 */
voiceRecorderHelper.Action_Up(v,motionEvent);
return true;
}
return false;
}
}
);複製代碼
初始化:
voiceRecorderHelper =
new VoiceRecorderHelper(
this,
new VoiceRecorderHelper.CallBack()
{
@Override
public String setOutPutPath() {
/** 設置錄音結果路徑,你的格式也在這裏設置 */
return getAudioSavePath("LinGuanHong");
}
@Override
public void onDown(View v) {
/** 純粹的 down 事件回調 */
}
@Override
public void onMove_in_limit(View v) {
/** 手指移動的範圍在限制內 */
}
@Override
public void onMove_out_limit(View v) {
/** 手指移動超過範圍,內部作了顯示取消的提示 */
}
@Override
public void onUp_start(View v) {
/** 純粹的 Up 事件回調 */
}
@Override
public void onUp_cancel(View v) {
/** 這個時候已經由於手指移動超過範圍取消了錄音 */
}
@Override
public void onFinishRecord() {
/** 錄音結束 */
}
@Override
public void onRecordSuccess(float len, String savePath) {
/** 錄音、解碼、保存成功 */
Log.e("aaaaa", "錄音的路徑 " + savePath + " 長度 " + len);
}
@Override
public void onRecordVolumeChange(int voiceValue) {
/** 錄音聲音強度的變化,單位分貝 */
}
}
);
}複製代碼
jni層:編譯好 Speex.so 庫,使用提供的錄製函數。
java層:異步線程錄製,獲取分貝等數據同步刷新UI
終。