现在移动端已不仅仅局限于文本、图片这些 pc 平台上的常见信息类型,语音的使用愈见频繁,于是前段时间萌生了个想法:如果在移动端对语音内容做处理,提取特征出来构建关键词库是否可以对这些语音进行分类、搜索,于是花了一段时间研究 android,本文从音频的录制、处理来记录总结,识别下篇放上。

一、 音频系统的架构

安卓系统里的音频模块可划分为几层:硬件、驱动、硬件抽象层、硬件与 java 库之间的 “中介”、Framework(供 app 调用的接口都封装在这层)、实际用户可视的 app。

二、 语音录制

处理语音录制的类主要 4 个: AudioTrack、AudioRecorder、MediaPlayer 和 MediaRecorder,都在 android.media 包下,MediaRecorder 的使用相对简单,不过相对的是无法处理一些底层的操作,例如无法对音频进行处理。

除了上面的类库实现外,音频系统实际调用了更为底层的服务来实现音频的采集,这就是 AudioFlinger 和 AudioPolicyService 。

AudioRecord 使用:

1、 创建 AudioRecord 对象

1

2

3

4

5

6

7

8

9

10

11

AudioRecord(

intaudioSource,

intsampleRateInHz,

intchannelConfig,

intaudioFormat,

intbufferSizeInBytes)

参数说明

AudioSource 音频采集来源

SampleRateInHz  录制频率

channelConfig 录制通道

AudioFormat 录制编码格式

BufferSize 录制缓冲大小,可以通过 getMinBufferSize 来获取

getMinBufferSize 这个接口返回了要成功创建一个 AudioRecord object 所需的最小 buffer size。

2、监听用户界面操作

1

publicvoidsetOnClickListener(View.onClickListenerl)

3、读

1

2

3

4

5

6

7

publicintread(

byte[]audioData,

intoffsetInBytes,

intsizeInBytes)

audioData 是一个用来存储音频的字节数组

4、写

写操作主要涉及几个类:

java.io.File;

java.io.FileInputStream;

java.io.FileOutputStream;

使用:

1

2

3

FileOutputStreamfos=null;

fos.write(audiodata);//将上一步得到的字节数组写入到文件中

二、音频处理

一般信号处理技术采用快速傅立叶变换,卷积变换和逆傅立叶变换来实现音频处理。

音频处理大致两类:变频、变速、变调。我们录到的声音为时域信号,需要利用信号处理技术将时域转成频域(指在对函数或信号进行分析时,分析其和频率有关部份,而不是和时间有关的部份),然后用频谱迁移技术来对信号处理,最后再将频域信号转换回时域。

对于每个音频片段,傅里叶变换将音频波形分解为它的成分音符并且保存下来,从而代替存储原始波形。语音识别就是基于此,将一段话分成块,与已有词库进行比较。

“函数或信号可以透过一对数学的运算子在时域及频域之间转换。例如傅里叶变换可以将一个时域信号转换成在不同频率下对应的振幅及相位,其频谱就是时域信号在频域下的表现,而反傅里叶变换可以将频谱再转换回时域的信号。”

虽说音频处理令人为之一亮,但涉及的技术较为复杂,因此现在市场上提供了相关产品直接提供开发者使用,例如 soundtouch,IIR 。

android4.2 音频模块启动分析,Android 音频模块学习小结相关推荐

  1. android 音频切换分析,Android音频可视化操作

    在我们使用各大音乐软件时,会发现,很多软件都会有一个音频的特效--鲸云特效,而鲸云特效,实际上就是对音频的一种可视化处理. 音频可视化,顾名思义就是将声音以视觉的方式呈现出来.那么怎么实现音频可视化呢 ...

  2. 分析android动画模块

    Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果:第二类是Frame 动画,即顺序播放事先做好的图像,跟电影类似.本文分 ...

  3. 分析android动画模块[转]

    2019独角兽企业重金招聘Python工程师标准>>> 作者: 刘鹏 日期: 2009-03-07 Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象 ...

  4. android启动分析,Android APP启动方式、启动流程及启动优化分析

    本文章向大家介绍Android app应用启动的一些相关知识,包括app启动方式.app启动流程和app启动优化等知识! app应用启动方式 1.冷启动 当启动应用时,后台没有该应用的进程,这时系统会 ...

  5. android内录音频,字节跳动Android架构师学习笔记

    缘起 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑.快速迭代的目的越来越难,还有应用之间的互相调用等等问题,插件化技术应用而生.如果没有插件化技术,美团. ...

  6. Android 音频源码分析——AndroidRecord录音(一)

    Android 音频源码分析--AndroidRecord录音(一) Android 音频源码分析--AndroidRecord录音(二) Android 音频源码分析--AndroidRecord音 ...

  7. Android 音频源码分析——AudioTrack设备选择

    Android 音频源码分析--AndroidRecord录音(一) Android 音频源码分析--AndroidRecord录音(二) Android 音频源码分析--AndroidRecord音 ...

  8. android音频编辑之音频合成

    前言 音频编辑系列: android音频编辑之音频转换PCM与WAV android音频编辑之音频裁剪 android音频编辑之音频合成 本篇主要讲解音频PCM数据的合成,这里合成包括音频之间的拼接, ...

  9. Android 音频开发——AudioTrack播放

    Android 音频--PCM转WAV Android 音频开发--AudioRecord录音  AudioTrack类用来管理.播放单个音频资源,它只能播放PCM数据,其他音频格式(aac.amr. ...

最新文章

  1. 从「林」开始: imx51-linux-rt3070ap-dhcpd
  2. 天籁数学——数列篇(1)
  3. Windows 7平台安装Oracle Client 10g版本时需要做的一点变更
  4. 圣诞前夜预告|深入理解Linux内核经验分享
  5. azure linux 多磁盘 lvm,EVE-NG扩展磁盘空间(扩展LVM卷)
  6. [转载] Java中的静态方法不能被子类重写
  7. 读书笔记-你不知道的JS上-词法作用域
  8. 一个可以实时查相关电子产品价格的网站
  9. 《海量数据库解决方案》之位图索引的结构和特征
  10. 解决Selection executes are supported only in the DbVisualizer Personal edition
  11. CreateFile和WriteFile
  12. 《信号与系统》4.11.2系统函数的幅频特性和相频特性分析 MATLAB实现
  13. 2018年下半年系统集成项目管理工程师下午真题及答案解析
  14. 安卓怎么打开html游戏,安卓手机如何打开.xapk文件
  15. lob 索引 oracle,oracle 12c lob索引
  16. git fatal: The remote end hung up unexpectedly 错误
  17. APP支付支付签名验证失败
  18. 电脑端(PC)按键精灵2023——入门小白 详细 教程
  19. 年化超额收益计算matlab,超额年化收益率的计算 看了一下雪球上一些雪友贴出的基金或大V的历年收益率,发现一些人统计的不对,想说一下: 1.超额收益率 某基金当年收益率为... - 雪球...
  20. CSS中一些渐变效果与透明

热门文章

  1. Tomato多拨脚本
  2. Loadrunner如何监控Linux系统资源
  3. Microsoft SQL server 2005的基本操作
  4. YAML_12 批量创建用户,分别设置用户组
  5. C语言入门篇(二)指针的介绍和运用
  6. SDN期末作业——负载均衡
  7. HDU 2604 Queuing(矩阵高速幂)
  8. 提高你css技能的css开发技巧
  9. 简单的进度条拖动效果及拖拽改变层大小
  10. Batis-iBatis基本操作(增删改查)