Android音频相关基础

版权声明:本文为博主原创文章,转载希望能注明出处,感谢。 https://blog.csdn.net/u010126792/article/details/86308840

音频基础概念

模拟信号数字信号:
模拟信号用模拟量的电压或电流来表示的信号,时间上是连续的,幅度变化也是连续的,类似正弦,余弦曲线连续变化。
数字信号是通过0和1的数字串所构成的数字流来传输的,数字信号不是连续的,从上面的模拟信号中取部分点进行表示。

采样:
把模拟信号转化成数字信号的过程,包括音频,视频等都需要进行采样。

采样频率:
采样频率单位为HZ,表示每秒从连续信号中提取并组成离散信号的采样个数,采样频率的倒数为采样间的时间间隔。采样频率越高声音就越接近真实声音。
常用的采样频率:8kHZ,11.025kHZ,22.05Khz,16kHz,37,8kHz,44.1kHz,48kHz,96kHz,192kHz等。人类耳朵能够听到的最高频率为20kHz,因此要使人们能听到声音,每秒至少要采集40K次,所以采样率至少为40kHz。
Android录音API AudioRecord的参数有一个是采样率,但Android对音频采样率做了限制,默认值是22050Hz,并且不能小于4000Hz,不能大于48000Hz,即采样率必须位于[4000,48000]hz之间。

44100Hz是目前唯一一个能够在所有的设备上使用的频率,但是一些其他的例如22050、16000、11025也能够在一部分设备上使用。

量化:
把模拟信号表示成数字信号后,还需要对每个点的信息进行表示(强弱,幅度等信息),通常可以是4bit,8bit,16bit,32bit,64bit等,用的位数越多,信号越接近真实值。量化利用bit表示数据,数据会按照固定的编码方式进行排列。

声道数:
声道分为单声道(MONO),双声道(STEREO),立体声道,单声道默认一个声道,双声道默认两个声道。
android支持双声道立体声和单声道 CHANNEL_IN_MONO是单声道,在所有设备上支持,CHANNEL_IN_STEREO是双声道立体声。

音频编码格式:
编码格式是音频量化的策略,任何编码策略都是有损的,只能做到无限接近无法真正完全还原。常用的编码方式PCM能够达到最高保真,所以很多编码都是在PCM上重新处理。

音频压缩:
如果想减少存储空间的占用同时又不想降低音频质量,就需要对音频数据进行压缩。
音频占用空间计算公式: 采样率值×采样大小值×声道数bps

对于常用的44khz的采样频率,量化单位为16bit,双声道的PCM编码,速率为44K * 16 *2 = 1408Kbps,除以8 得到176KB/s,这个数据量是很大的,所以需要压缩。

**常用压缩格式:**MP3,AAC,OGG,WMA,m4a,AMR,等。

音频流:
流支持边录制边播放,也就是不必得到完整音频数据,就可以进行播放。

Android中的音频处理:

  • 音频采集: MediaRecoder,AudioRecord
  • 音频播放: MediaPlayer,AudioTrack ,SoundPool
  • 音频编解码: MediaCodec

MediaPlayer,AudioTrack ,SoundPool三者区别

  • SoundPool:适合短促且对反应速度比较高的情况
  • AudioTrack: 播放解码后的PCM码流
  • MediaPlayer :适合比较长且时间要求不高的情况

AudioRecord 可以获取到一帧帧 PCM 数据,可以对这些数据进行处理。
MediaRecorder 内部基于 AudioRecorder 的 API ,它可以直接将采集到的音频数据转化为执行的编码格式,并保存,保存的格式包括arm,aac,mp3等。

AudioRecord最后得到的文件为pcm格式文件,MediaPlayer没法直接播放,需要利用AudioTrack播放或者把PCM格式文件转化为Wav格式再利用MediaPlayer进行播放。

猜你喜欢

转载自blog.csdn.net/u010126792/article/details/86308840