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机的处理器还是不能相比,所以开辟的子线程建议不要 ...
随机推荐
- oracle 11g 完全卸载方法
网上好多卸载教程都前篇一律,但很多卸完重装都有问题,卸了几次装了几次,就特地总结整理一下 另外说一句:在完全删除(或者叫卸载)oracle时,没有必要特别意oracle提示问题,只要把oracle痕迹 ...
- JavaScript函数之递归
递归 递归的本质就是使用函数自身来解决问题的思路. 递归的定义(摘): 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明 ...
- Bash的条件表达式求值
Bash的条件控制允许两种类型:1)命令的成功或失败 2)逻辑表达式的真假这两种类型都可以通过退出状态($?)来检验,$?=0为真,否则为假 一.命令的成功或失败 通过查看$?值$echo $? 二. ...
- VS2017专业版和企业版激活密钥
VS2017专业版和企业版激活密钥 Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q ...
- 关于ZendStudio 10.5的破解 包括mac
一. 下载ZendStudio 10.5 首先下载ZendStudio 10.5 我使用的是mac版 下载地址是: http://downloads.zend.com/studio-eclipse/1 ...
- Streaming结合Kafka
Spark2.11 两种流操作 + Kafka Spark2.x 自从引入了 Structured Streaming 后,未来数据操作将逐步转化到 DataFrame/DataSet,以下将介绍 S ...
- 学编程担心自己英语不好吗?(IT软件开发常用英语词汇)
发一份,我们导师的收集的常用词汇,与大家共享 欢迎加入Java学习交流裙六一六九五九四四四! S 欢迎加入Java学习交流裙 六一六 九五九 四四四!
- 音乐API之QQ音乐
欢迎大家来到我的博客,这是我在博客园写的第一篇文章,但不会是最后一篇,希望大家多多关注我,支持我哦!正文开始,今天我们要讲的是QQ音乐的API,都是来源于官方的地址,以前我也想写一个,但百度谷歌之后都 ...
- Binder的工作原理浅析
在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...
- 微信小程序开发者注册流程
一,首先打开浏览器,搜索微信公众平台 点击进入,此时还没有注册微信小程序开发账号,我们需要点击注册 进入注册页面,会出现四种账号,我们选择小程序账号 然后根据提示就可以进行注册了 注册时,需填写一下个 ...