soundtouch源码分析
1.soundtouch官网:http://www.surina.net/soundtouch/。这上面有soundtouch的介绍、源码,封装好的dll文件、使用方法、以及一些demo。这上面demo做的不好。
2.一个利用java的jni调用soundtouch非常短小精悍的java swing界面小程序:http://www.aplu.ch/home/apluhomex.jsp?site=44。
3.csdn suhetao做的soundtouch源码分析:http://blog.csdn.net/suhetao/article/details/5843480。
4.关于声音处理的一个理论网页:http://www.surina.net/article/time-and-pitch-scaling.html。
5.其他资料:http://baosu.iteye.com/blog/1840054
http://baosu.iteye.com/blog/1843031
http://blog.csdn.net/leilu2008/article/details/6724354
1. 音频采集
这点主要是通过Android设备的麦克风实时采集音频,由于Android平台的MediaRecorder类录制音频到文件,虽然可以通过空设备回调获得实时的音频流,不过为了降低开发者的难度,Android开发网推荐使用正统的AudioRecord和AudioTrack,首先我们仍然需要加入android.permission.RECORD_AUDIO这个权限。
android.media.AudioRecord类的read方法主要有
3
种重载形式:
int
read(
short
[] audioData,
int
offsetInShorts,
int
sizeInShorts)
//short在java中占用两个字节
int
read(
byte
[] audioData,
int
offsetInBytes,
int
sizeInBytes)
//byte在java中占用一个字节
int
read(ByteBuffer audioBuffer,
int
sizeInBytes)
//基于NIO的ByteBuffer类型
我们可以看到从麦克风中获取的音频无需经过文件系统直接通过AudioRecord类的read方法读入到我们预定的缓冲区中,这里需要注意的是采样率的大小必须有足够的缓冲区空间处理
2. 变声处理
这点需要一些基本的音频处理方式,比如移调、变速,Android开发网推荐大家参考Adobe Audition的早期Cool Editi泄露的代码,当然音频处理算法比较多,大家可以自己实现。
3. 播放原始音频流
同样,处理完后考虑到效率我们仍然直接从内存流中播放,最简单的就是AudioTrack类,通过android.media.AudioTrack类的write方法,让Android声卡播放原始音频流。两种重载方法如下
int
write(
short
[] audioData,
int
offsetInShorts,
int
sizeInShorts)
int
write(
byte
[] audioData,
int
offsetInBytes,
int
sizeInBytes)
4,编译NDK:http://soundtouch.surina.net/README-SoundTouch-Android.html
转载于:https://my.oschina.net/sitexa/blog/384171
soundtouch源码分析相关推荐
- soundtouch源码分析__based on csdn :
1. soundtouch介绍和相关资源 The SoundTouch Library Copyright © Olli Parviainen 2001-2014 SoundTouch is an o ...
- 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇
https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...
- 音视频开发之旅(67) - 变速不变调之sonic源码分析
目录 基音周期.浊音的概念 Sonic源码分析 资料 收获 上一篇我们学习了音频变速不变调的原理以及WSOLA波形相似叠加算法进行时域压扩处理.其中在寻找相似帧方面,Sonic采用AMDF(平均幅度差 ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...
- SpringBoot-web开发(二): 页面和图标定制(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...
- SpringBoot-web开发(一): 静态资源的导入(源码分析)
目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...
- Yolov3Yolov4网络结构与源码分析
Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...
- ViewGroup的Touch事件分发(源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...
最新文章
- hdu1506 dp
- 控制单元维修_「维修案例」一汽大众迈腾挡风玻璃喷水电机不喷水,实操步骤解决...
- dhl: js判断网页对象是否存在
- python编程从入门到实践 之 数据可视化部分总结和回顾(未完待续)
- 使用IDEA 连接mysql数据库,执行sql指令
- Vue前端路由(Vue-router)
- 华为P50系列再曝“坏消息”:疑似再度延期至7月份
- 软件测试:测试一个网站
- 没有基础怎么学Web前端?相关学习路线是什么?
- LeetCode – Refresh – Exceel Sheet Column Number
- [leetcode]Length of Last Word
- 服务器lsass系统错误,电脑开机提示lsass.exe系统错误,安全帐户管理器初始化失败该怎么办?...
- 2.语音增强短时谱估计算法——幅度谱减法
- Linux uart底层设备驱动详解
- 将数组分成两部分使得两部分的和的差最小
- KVM虚拟机,使用linux bridge配置vlan隔离
- 基于Windows平台的Radius服务器搭建指南
- 【嵌入式--伺服电机】(11)MIT无刷电机FOC硬件电路分析
- 移植内核2.6.24.4到S3C2440
- html5网页制作实训日志,网页制作实训日志X.doc
热门文章
- 模拟NOIP2018提高组(普及组)初赛总结(题目+易错点+解析)
- php过滤所有中英文标点符号
- VggNet架构重现与解析
- 联发科推出天玑1200,新一年的头道“5G甜点”究竟滋味如何?
- 射频功率衰减器一般采用电阻元件,有两种主要电路形式:π型和T型
- 一款大功率6A 深度PWM调光的降压恒流驱动工作原理
- html怎么上下左右分div分,超级简单div上下左右居中
- 2019.9.3 瓜子二手车笔试题
- 日本手机开发——DoCoMo手机,表单get提交,action的url的参数丢失
- 绞车拆装实训报告_机电一体化实习报告