作者:林冠宏 / 指尖下的幽灵
掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8
博客:http://www.cnblogs.com/linguanh/
GitHub : https://github.com/af913337456/
为了您的直观体验,请务必看完下面 截图,源码 gitHub 链接在其之后。
顺便提一下:
这个是接着我上一次开源的 仿:Android - 微信 - 朋友圈 - 小视频播放,多4句废话算我输 项目的。
目的:
不想为具备相同功能的应用开发做每次的相同代码的编写,再用简洁的风格造轮子。


为了避免大家浪费时间,直接先看下面的 截图,看完后,若你觉得会需要到,那么就请听我继续。

扯下感慨

之前说过的开源IM系统,其实是做好了的,没什么时间写文档,太乱开了也没意义。这次的文章也是挤出时间写的。语言我会尽量做到通俗易懂,少说点废话,谢谢那些一直关注我的同行,定以干货以回报之。

GitHub 链接

本着开源的精神,如果对你有用,希望您能给予个星星(star)
https://github.com/af913337456/SpeexVoiceRecorder

功能点

1,直观的

  • 按键触发录音
  • 上移动或者其它移动可以撤销
  • 动态根据声音分贝显示图片进度效果
  • 录音时间过短的提示

2,隐藏的

  • 0 耦合,dialog 在内的 UI 代码我也集合了,业界风格。
  • 使用方便,下面见解析
  • 低内存占用,提供捞底回收
  • 多接口延伸,例如结果文件路径的返回,和文件的大小
  • 基于 Speex jni 库,高效,自定义语音文件格式

解析

实例:

private VoiceRecorderHelper voiceRecorderHelper;

触发:

// R.id.record 这个 VIew 是你的触发 View
findViewById(R.id.record).setOnTouchListener(new View.OnTouchListener() {@Overridepublic 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(){@Overridepublic String setOutPutPath() {/** 设置录音结果路径,你的格式也在这里设置 */return getAudioSavePath("LinGuanHong");}@Overridepublic void onDown(View v) {/** 纯粹的 down 事件回调 */}@Overridepublic void onMove_in_limit(View v) {/** 手指移动的范围在限制内 */}@Overridepublic void onMove_out_limit(View v) {/** 手指移动超过范围,内部做了显示取消的提示 */}@Overridepublic void onUp_start(View v) {/** 纯粹的 Up 事件回调 */}@Overridepublic void onUp_cancel(View v) {/** 这个时候已经因为手指移动超过范围取消了录音 */}@Overridepublic void onFinishRecord() {/** 录音结束 */}@Overridepublic void onRecordSuccess(float len, String savePath) {/** 录音、解码、保存成功 */Log.e("aaaaa", "录音的路径 " + savePath + " 长度 " + len);}@Overridepublic void onRecordVolumeChange(int voiceValue) {/** 录音声音强度的变化,单位分贝 */}});}

技术点 (可以不看)

jni层:编译好 Speex.so 库,使用提供的录制函数。
java层:异步线程录制,获取分贝等数据同步刷新UI

终。

转载于:https://www.cnblogs.com/linguanh/p/7249634.html

Android 基于 Speex 的高度封装语音库,0 耦合,没三方jar包相关推荐

  1. vue-cli3封装组件库打包并发布npm开源包和npm内网私有库

    ① 使用Vue-cli3搭建项目 vue create demo vue-cli3官方文档 注:cli3 提供一个可选的 vue.config.js 配置文件.如果这个文件存在则他会被自动加载,所有的 ...

  2. 红米android 升级包下载地址,红米手机2 MIUI9.0+Android7.1刷机包

    红米手机2 MIUI9内测刷机包是基于Android7.1的红米手机最新的MIUI系统,MIUI9以"色彩无限"为主题,给用户最好的手机系统体验,不仅有ios的悬浮球,还可以做到大 ...

  3. android.support.v4.content.FileProvider@authorities value项目和三方jar包相同导致冲突

    构建错误 解决办法: 根据错误提示:建议:添加"tools:replace="android:authorities"元素在AndroidManifest.xml中重写

  4. java打包要依赖maven库吗_maven-将依赖的 jar包一起打包到项目 jar 包中

    前言: 有时候在项目开发中,需要很多依赖的 jar 包,其中依赖的 jar 包也会依赖其他的 jar 包,导致jar 包的管理很容易不全,以下有两种方法可以规避这个问题. 一.在pom.xml 文件中 ...

  5. 三星android 8升级包,三星G930K官方安卓8.0固件rom升级更新包:KTC-G930KKKU2ESI3

    下面也是这个三星Galaxy S7手机的最新版本的系统包,也是支持线刷的,这个最新版本的系统包是KTC-G930KKKU2ESI3,大家下载下来解压出来然后采用odin工具进行刷入即可,如果你也需要的 ...

  6. java 图像识别包_Java基于百度API的图片文字识别免费源码和jar包

    1.准备工作(jdk1.8) 使用之前需要获取对应的项目API_KEY,SECRET_KEY,这些参数在使用API的时候必须用到,用于生成access_token. 如何获取这些参数? 登陆后创建一个 ...

  7. Android将so库封装到jar包中并加载其中的so库

    Android将so库封装到jar包中并加载其中的so库 之前写过将jar包和so库封装到jar包中的文章,但是没有考虑别人调用时需要加载so库的问题.因为so库放入jar之后,so就不是一个独立的. ...

  8. Android NDK开发:打包so库及jar包供他人使用

    文章目录 一.目标及方式 二.新建调用方工程 三.新建库module 四.为库模块添加c++支持 4.1 准备CMakeLists文件 4.2 修改sdk的gradle脚本 4.3 编写c++及jav ...

  9. android studio gradle 打jar 包 (混淆+第三方库包)

    将依赖的第三方库打包进自己的jar包 1.先将第三方的库包拿到,然后添加jar包到项目的libs. 2.项目的build.gradle脚本添加下面的task: 1 task buildJar(depe ...

最新文章

  1. GitHub超3k星!从Python代码到APP只需要一个小工具~
  2. Linux Kernel TCP/IP Stack — L2 Layer — Linux Bridge(虚拟网桥)
  3. mysql查询filter_子查询包含or引起的filter性能问题案例
  4. AOP基本概念、AOP底层实现原理、AOP经典应用【事务管理、异常日志处理、方法审计】...
  5. (chap1 网络基础知识)网络的构成要素:(7)网关
  6. 【图像分割模型】多感受野的金字塔结构—PSPNet
  7. Oracle 11g RAC 添加新节点及故障解决案例
  8. [渝粤教育] 江苏食品药品职业技术学院 酸奶及冰淇淋生产技术 参考 资料
  9. spring—事务控制
  10. String和STL的一些基础知识
  11. Tensorflow 2.1 迁移学习 基于VGG
  12. Factstone Benchmark
  13. ios 去掉底部状态栏,隐藏ios 9中的状态栏
  14. 插入保存?展现show的顺序
  15. 30多个Java实战项目,全部在这里了。
  16. C语言pid算法模糊控制,温度PID模糊控制的算法完整
  17. centos7服务器安装无线网卡,CentOS 7 安装无线网卡驱动方法实例教程
  18. 浅析EDA技术应用于电子设计竞赛的可行性
  19. Android Intent简介
  20. 桌面日历软件有哪些?日历提醒便签软件推荐

热门文章

  1. 对联广告,带关闭,可以移动
  2. linux系统级别的能够打开的文件句柄的数file-max命令
  3. 让你的数据离CPU更近一些
  4. 网页效率之DNS查找和并行下载
  5. ASP.NET超凡的代码控制
  6. Shell脚本基础介绍
  7. php 5.2 模块路径,5.2 模块和操作
  8. 版电力系统故障录波_电力系统中的变电运维技术匹配专业中的应用
  9. python正则取字符串日期_python 正则表达式获取字符串中所有的日期和时间
  10. python将string转换为json_python -- 将string转换成dict的方法