Android - 基于 Speex 的高度封装语音库,0 耦合使用
作者:林冠宏 / 指尖下的幽灵
掘金: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() {
@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
终。
Android - 基于 Speex 的高度封装语音库,0 耦合使用的更多相关文章
- Android 基于 Speex 的高度封装语音库,0 耦合,没三方jar包
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- c++ 封装线程库 0
1.互斥锁简介 互斥锁主要用于互斥,互斥是一种竞争关系,用来保护临界资源一次只被一个线程访问. POSIX Pthread提供下面函数用来操作互斥锁. int pthread_mutex_init(p ...
- okhttputils【 Android 一个改善的okHttp封装库】使用(一)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文使用的OKHttp封装库是张鸿洋(鸿神)写的,因为在项目中一直使用这个库,所以对于一些常用的请求方式都验证过,所以特此整理下. ...
- okhttputils【 Android 一个改善的okHttp封装库】使用(三)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这一篇主要讲一下将OkHttpUtils运用到mvp模式中. 数据请求地址:http://www.wanandroid.com/to ...
- 【Node.js 自己封装的库 http_parse, libuv】
[Node.js 自己封装的库 http_parse, libuv] Node.js 介绍:一个网络框架,更多:http://www.oschina.net/p/nodejs 官网:http://no ...
- 公布一个基于 Reactor 模式的 C++ 网络库
公布一个基于 Reactor 模式的 C++ 网络库 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 2010 Aug 30 本文主要介绍 muduo 网 ...
- 关于Android NDK中调用第三方的动态库
因为最近在整合Android 上RTSP播放器的网络库,因需要调用自己编译的网络库,调用一直出现问题,开始时是直接在Android.mk 中加入LOCAL_SHARED_LIBRARIES := li ...
- 【我的Android进阶之旅】解决sqlcipher库:java.lang.IllegalStateException: get field slot from row 0 col 0 failed.
一.背景 最近维护公司的大数据SDK,在大数据SDK里面加入了ANR的监控功能,并将ANR的相关信息通过大数据埋点的方式记录到了数据库中,然后大数据上报的时候上报到大数据平台,这样就可以实现ANR性能 ...
- 我的Android进阶之旅------>Android基于HTTP协议的多线程断点下载器的实现
一.首先写这篇文章之前,要了解实现该Android多线程断点下载器的几个知识点 1.多线程下载的原理,如下图所示 注意:由于Android移动设备和PC机的处理器还是不能相比,所以开辟的子线程建议不要 ...
随机推荐
- webpack 插件拾趣 (1) —— webpack-dev-server
结束了一季的忙碌,我这封笔已久的博客也终究该从春困的咒印中复苏,想来写些实用易读的作为开篇,自然是最好不过. 新开个 webpack 插件/工具介绍的文章系列,约莫每周更新一篇篇幅适中的文章聊以共勉, ...
- ASP.NET MVC5(四):数据注解和验证
前言 用户输入验证的工作,不仅要在客户端浏览器中执行,还要在服务端执行.主要原因是客户端验证会对输入数据给出即时反馈,提高用户体验:服务器端验证,主要是因为不能完全信任用户提供的数据.ASP.NET ...
- 14.Java中的Future模式
jdk1.7.0_79 本文实际上是对上文<13.ThreadPoolExecutor线程池之submit方法>的一个延续或者一个补充.在上文中提到的submit方法里出现了Future ...
- JAVA 基础知识学习笔记 名称解释
Java ee: IDE: itegrity development environment 集成开发环境 JMS: java Message Service java 信息服务 JM ...
- Kubernetes服务之StatefulSets简介
StatefulSets在v1.5时还是个beta特性,它取代了v1.4的PetSets特性.PetSets的用户可以参考v1.5的升级指导,将正在运行的PeetSets升级到StatefulSets ...
- eclispe JavaEE 配置tomcat
http://blog.csdn.net/hongshan50/article/details/8293526 http://blog.csdn.net/longshengguoji/article/ ...
- Python Click 学习笔记(转)
原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...
- juggle dsl语法介绍及codegen浅析
juggle语法规范如下: 类型: bool -> in cpp bool int -> in cpp int64 float -> in cpp double string -&g ...
- UML中关联(Association)和依赖(Dependency)的区别
原文转自:http://blog.csdn.net/metasearch/article/details/2334853 在UMLCHINA精华区,看到了一些关联和依赖的讨论,似乎越讲越糊涂.我想谈一 ...
- phpcmsV9常用标签
头部: <title>{if isset($SEO['title']) && !empty($SEO['title'])}{$SEO['title']}{/if}{$SEO ...