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源码分析相关推荐

  1. soundtouch源码分析__based on csdn :

    1. soundtouch介绍和相关资源 The SoundTouch Library Copyright © Olli Parviainen 2001-2014 SoundTouch is an o ...

  2. 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇

    https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...

  3. 音视频开发之旅(67) - 变速不变调之sonic源码分析

    目录 基音周期.浊音的概念 Sonic源码分析 资料 收获 上一篇我们学习了音频变速不变调的原理以及WSOLA波形相似叠加算法进行时域压扩处理.其中在寻找相似帧方面,Sonic采用AMDF(平均幅度差 ...

  4. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  5. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

  6. SpringBoot-web开发(二): 页面和图标定制(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...

  7. SpringBoot-web开发(一): 静态资源的导入(源码分析)

    目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...

  8. Yolov3Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...

  9. ViewGroup的Touch事件分发(源码分析)

    Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...

最新文章

  1. hdu1506 dp
  2. 控制单元维修_「维修案例」一汽大众迈腾挡风玻璃喷水电机不喷水,实操步骤解决...
  3. dhl: js判断网页对象是否存在
  4. python编程从入门到实践 之 数据可视化部分总结和回顾(未完待续)
  5. 使用IDEA 连接mysql数据库,执行sql指令
  6. Vue前端路由(Vue-router)
  7. 华为P50系列再曝“坏消息”:疑似再度延期至7月份
  8. 软件测试:测试一个网站
  9. 没有基础怎么学Web前端?相关学习路线是什么?
  10. LeetCode – Refresh – Exceel Sheet Column Number
  11. [leetcode]Length of Last Word
  12. 服务器lsass系统错误,电脑开机提示lsass.exe系统错误,安全帐户管理器初始化失败该怎么办?...
  13. 2.语音增强短时谱估计算法——幅度谱减法
  14. Linux uart底层设备驱动详解
  15. 将数组分成两部分使得两部分的和的差最小
  16. KVM虚拟机,使用linux bridge配置vlan隔离
  17. 基于Windows平台的Radius服务器搭建指南
  18. 【嵌入式--伺服电机】(11)MIT无刷电机FOC硬件电路分析
  19. 移植内核2.6.24.4到S3C2440
  20. html5网页制作实训日志,网页制作实训日志X.doc

热门文章

  1. 模拟NOIP2018提高组(普及组)初赛总结(题目+易错点+解析)
  2. php过滤所有中英文标点符号
  3. VggNet架构重现与解析
  4. 联发科推出天玑1200,新一年的头道“5G甜点”究竟滋味如何?
  5. 射频功率衰减器一般采用电阻元件,有两种主要电路形式:π型和T型
  6. 一款大功率6A 深度PWM调光的降压恒流驱动工作原理
  7. html怎么上下左右分div分,超级简单div上下左右居中
  8. 2019.9.3 瓜子二手车笔试题
  9. 日本手机开发——DoCoMo手机,表单get提交,action的url的参数丢失
  10. 绞车拆装实训报告_机电一体化实习报告