當前位置:
首頁 > 知識 > Android 基於 Speex 的高度封裝語音庫,0 耦合,沒三方jar包

Android 基於 Speex 的高度封裝語音庫,0 耦合,沒三方jar包


作者:林冠宏 / 指尖下的幽靈

掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8

博客:http://www.cnblogs.com/linguanh/

GitHub : https://github.com/af913337456/

為了您的直觀體驗,請務必看完下面 截圖,源碼 gitHub 鏈接在其之後。

順便提一下:

這個是接著我上一次開源的 仿:Android - 微信 - 朋友圈 - 小視頻播放,多4句廢話算我輸項目的。

目的:

不想為具備相同功能的應用開發做每次的相同代碼的編寫,再用簡潔的風格造輪子。

為了避免大家浪費時間,直接先看下面的 截圖,看完後,若你覺得會需要到,那麼就請聽我繼續。

Android 基於 Speex 的高度封裝語音庫,0 耦合,沒三方jar包

Android 基於 Speex 的高度封裝語音庫,0 耦合,沒三方jar包

Android 基於 Speex 的高度封裝語音庫,0 耦合,沒三方jar包

Android 基於 Speex 的高度封裝語音庫,0 耦合,沒三方jar包

扯下感慨

之前說過的開源IM系統,其實是做好了的,沒什麼時間寫文檔,太亂開了也沒意義。這次的文章也是擠出時間寫的。語言我會盡量做到通俗易懂,少說點廢話,謝謝那些一直關注我的同行,定以乾貨以回報之。

GitHub 鏈接

本著開源的精神,如果對你有用,希望您能給予個星星(star)

功能點

1,直觀的

  • 按鍵觸發錄音
  • 上移動或者其它移動可以撤銷
  • 動態根據聲音分貝顯示圖片進度效果
  • 錄音時間過短的提示

2,隱藏的

  • 0 耦合,dialog 在內的 UI 代碼我也集合了,業界風格。
  • 使用方便,下面見解析
  • 低內存佔用,提供撈底回收
  • 多介面延伸,例如結果文件路徑的返回,和文件的大小
  • 基於 Speex jni 庫,高效,自定義語音文件格式

解析

實例:

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

終。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

初始jvm(一)——jvm內存區域與溢出
Python判斷文件是否存在的三種方法
《HelloGitHub》第 16 期

TAG:達人科技 |

您可能感興趣

ColorOS用上vivo三年前語音庫,OPPO你就是這麼糊弄用戶的嗎?
亞馬遜為Alexa技能開發人員介紹免費的聲音庫
搭建百TB級影音庫終極測試:12塊10TB氦氣盤用RAID5重建性能如何
科大訊飛推聲音復刻功能:10句話定製音庫
不僅提供聲音定製全案,「聲娛文化」想通過配音交易打造最大的聲音庫