08.音频基础知识和概念的介绍

yangchong211 / 文 发表于2018-02-06 17:34 次阅读

目录介绍

  • 1.音频开发具体涉及哪些业务
  • 1.1 音频播放[这个应该最多]
  • 1.2 音频编辑,比如录音,裁剪等
  • 1.3 音频算法处理,这个很难
  • 1.4 音频的编解码和格式转换
  • 1.5 音频压缩,变声,速率开发
  • 2.了解一些基础概念
  • 2.1 采样率(samplerate)
  • 2.2 声道数(channels)
  • 2.3 音频帧(frame)
  • 3.音频的压缩,编码与其他
  • 3.1 常见的音频压缩格式
  • 3.2 常见的音频编码方式
  • 3.3 音频开发相关的API
  • 3.4 关于音频采集录制
  • 4.音频播放常用方法介绍
  • 4.1 MediaPlayer的常用方法
  • 4.2 MediaPlayer的几个监听方式
  • 5.其他问题说明
  • 5.1 版本更新情况
  • 5.2 参考链接
  • 5.2 个人博客

1.音频开发具体涉及哪些业务

1.1 音频播放[这个应该最多]

  • 可以直接看我的项目代码,基础播放功能有:播放,暂停,下一首,上一首;可以设置多种播放类型:顺序播放,随机播放,单曲循环

1.2 音频编辑,比如录音,裁剪等

  • 比如音频录音功能,录完后可以进行裁剪,比如喜马拉雅,懒人听书等等都有这个功能。

1.3 音频算法处理,这个很难

  • 目前音频算法处理的开源库有:speex、ffmpeg,webrtc等等。
  • 可以使用FFmpeg框架,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。
  • 具体使用看官方网站:https://www.ffmpeg.org/

1.4 音频的编解码和格式转换

  • 直接参考该系列第五篇文章,很详细介绍了

1.5 音频压缩,变声,速率开发

  • 后期研究,有点复杂,也没找到什么好的案例

2.了解一些基础概念

2.1 什么是采样率(samplerate)

  • 采样就是把模拟信号数字化的过程,不仅仅是音频需要采样,所有的模拟信号都需要通过采样转换为可以用0101来表示的数字信号,示意图如下所示:
  • 图片采集于网络,只是作为学习使用 image
  • 蓝色代表模拟音频信号,红色的点代表采样得到的量化数值。
  • 采样频率越高,红色的间隔就越密集,记录这一段音频信号所用的数据量就越大,同时音频质量也就越高。
  • 根据奈奎斯特理论,采样频率只要不低于音频信号最高频率的两倍,就可以无损失地还原原始的声音。
  • 通常人耳能听到频率范围大约在20Hz~20kHz之间的声音,为了保证声音不失真,采样频率应在40kHz以上。常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

2.2 声道数(channels)

  • 音频的采集和播放是可以叠加的,因此,可以同时从多个音频源采集声音,并分别输出到不同的扬声器,故声道数一般表示声音录制时的音源数量或回放时相应的扬声器数量。
  • 常见的有单声道(Mono)和双声道(Stereo)

2.3 音频帧(frame)

  • 音频跟视频很不一样,视频每一帧就是一张图像,而从上面的正玄波可以看出,音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。
  • 这个时间被称之为“采样时间”,其长度没有特别的标准,它是根据编解码器和具体应用的需求来决定的,我们可以计算一下一帧音频帧的大小:
  • 假设某通道的音频信号是采样率为8kHz,位宽为16bit,20ms一帧,双通道,则一帧音频数据的大小为:
  • int size = 8000 x 16bit x 0.02s x 2 = 5120 bit = 640 byte

3.音频的压缩与编码

3.1 常见的音频压缩格式

  • 首先简单介绍一下音频数据压缩的最基本的原理:因为有冗余信息,所以可以压缩。
  • 频谱掩蔽效应: 人耳所能察觉的声音信号的频率范围为20Hz~20KHz,在这个频率范围以外的音频信号属于冗余信号。
  • 时域掩蔽效应: 当强音信号和弱音信号同时出现时,弱信号会听不到,因此,弱音信号也属于冗余信号。
  • 简单列出常见的音频压缩格式:MP3,AAC,OGG,WMA,Opus,FLAC,APE,m4a,AMR,等等

3.2 常见的音频编码方式

  • 模拟的音频信号转换为数字信号需要经过采样和量化,量化的过程被称之为编码,根据不同的量化策略,产生了许多不同的编码方式,常见的编码方式有:PCM 和 ADPCM,这些数据代表着无损的原始数字音频信号,添加一些文件头信息,就可以存储为WAV文件了,它是一种由微软和IBM联合开发的用于音频数字存储的标准,可以很容易地被解析和播放。
  • 音频开发过程中,会经常涉及到WAV文件的读写,以验证采集、传输、接收的音频数据的正确性。

3.3 音频开发相关的API

  • 音频采集: MediaRecoder,AudioRecord
  • 音频播放: SoundPool,MediaPlayer,AudioTrack
  • 音频编解码: MediaCodec
  • NDK API: OpenSL ES
  • 目前此开源项目采用MediaPlayer播放音频,采集使用AudioRecord

3.4 关于音频采集录制

  • 这块没作为重点,如果想深入了解,可以参考大神博客:https://yq.aliyun.com/articles/8637
  • 有点复杂……

4.音频播放常用方法介绍

4.1 MediaPlayer的常用方法

  • 当然这里仅仅只是列举了一些常用的方法
  • 具体可以参考我的代码:https://github.com/yangchong211/YCAudioPlayer
  • 注意同步加载和异步加载的区别:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需 要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统 会通知进程进行处理,这样可以提高执行的效率。
1.setDataSource() //设置 资源 
2.start() throws IllegalStateException //开 始播放,如果没有预编译错过会报错 
3.stop() //停 止播放 
4.pause() //暂 停播放 
5.prepare()//同步加载 
6.prepareAsync()// 异步加载,完成后调用监听 7.isPlaying(); //本 地方法,判断播放状态 
8.seekTo(int msec) //本地方法,跳转到时间点 9.int getDuration(); //本 地方法,获取音乐总长度 
10.release() //释 放资源 
11.reset() //重 置MediaPlayer 
12.setLooping(boolean looping) //设 置循环 
13.public native boolean isLooping(); //判 断循环状态 
14.setVolume(float leftVolume, float rightVolume) 
/ /设置音量,左声道和右声道 
15.setVolume(float volume) //设 置音量

4.2 MediaPlayer的几个监听方式

  • 4.2.1 异步加载完成时回调监听
public void setOnPreparedListener(OnPreparedListener listener) 
异步监听,一般在异步预加载之前就要设置好。
  • 4.2.2 播放完毕后回调监听
public void setOnCompletionListener(OnCompletionListener listener) 
一般用于设置播放完毕后,播放下一首还是循环播放
  • 4.2.3 跳转完成时的监听
public void setOnSeekCompleteListener(OnSeekCompleteListener listener) 
一般用于监听进度突然改变的值的变化

5.其他问题说明

5.1 版本更新情况

  • v1.0.0 2017年11月14日
  • v1.0.2 2018年1月28日

5.2 参考链接

  • Android音频知识介绍-从AndroidRecord看起:https://www.jianshu.com/p/8da3cf058c0f
  • Android音频使用总结:http://blog.csdn.net/wenzhi20102321/article/details/53018738
  • 大神之作,Android MP3录音实现:http://www.cnblogs.com/ct2011/p/4080193.html
  • Android音频开发基础:http://blog.51cto.com/ticktick/1748506?spm=a2c4e.11153940.blogcont8637.16.305f9135xi03I2
  • Android音频焦点机制深入理解:http://blog.csdn.net/wusuobupo/article/details/53034506
  • Android音频框架笔记 :https://www.jianshu.com/p/9481b1482367

5.2 个人博客

收藏 赞 (1) 踩 (1)