参考文章:
http://blog.csdn.net/kingkong1024/article/details/14004885
英文链接地址
http://www.raywenderlich.com/69365/audio-tutorial-ios-file-data-formats-2014-edition
这篇文章中提到两个问题:
每个音频文件有两个部分,一个是文件格式(音频容器),一个是数据格式(音频编码)。音频容器好比桶,一个桶可以装好几种水(音频编码)。有的桶可以装好多种水,有的桶可以装几种水。
音频容器有几种各种,包括MPEG-1 (.mp3), MPEG-2 ADTS (.aac), AIFF, CAF, and WAVE,音频编码有AAC,HE-AAC,ALAC,ILBC,IMA4,lINEAR PCM,μ-law and a-law,MP3
· AAC:aac其实是“高级音频编码(advanced audio coding)”的缩写,它是被设计用来取代MP3格式的。你可能会想,它压缩了原始的声音,导致容量占用少但是质量肯定会有所下降。不过这些质量的损失取决于声音比特率的大小,当比特率合适的时候,这些损失人耳是很难听出来的。事实上,aac比mp3有更好的压缩率,特别是在比特率低于128bit/s的时候。

· HE-AAC:HE-AAC是AAC的一个超集,这个“HE”代表的是“High efficiency”。 HE-AAC是专门为低比特率所优化的一种音频编码格式,比如streaming audio就特别适合使用这种编码格式。

· AMR:AMR全称是“Adaptive Multi-Rate”,它也是另一个专门为“说话(speech)”所优化的编码格式,也是适合低比特率环境下采用。

· ALAC:它全称是“Apple Lossless”,这是一种没有任何质量损失的音频编码方式,也就是我们说的无损压缩。在实际使用过程中,它能够压缩40%-60%的原始数据。这种编码格式的解码速度非常快,这对iphone或者ipod这种小型设备来说非常适合。

· iLBC: 这是另一种专门为说话所设计的音频编码格式,它非常适合于IP电话等其它需要流式音频的场合。

· IMA4: 这是一个在16-bit音频文件下按照4:1的压缩比来进行压缩的格式。这是iphone上面一种非常重要的编码格式,我们将在以后讨论原因。

· Linear PCM:它的中文意思是基于线性脉冲编码调制,用于将模拟声音数据转换成数字声音数据。简而言之,就是意味着无压缩数据。由于数据是非压缩的,它可以非常快的播放,并且当空间不是问题时,这是在iphone上面首选的音频编码方式。

· μ-law and a-law: 就我所知道的,这种编码是交替的编码模拟数据为数字格式数据,但是在speech优化方面比linear PCM更好。

· MP3: 这种格式是我们都知道也喜欢的,虽然很多年过去了,但MP3到目前为止仍然是一种非常流行的编码格式,它也能被iphone很好地支持。

参考文献:
http://www.cnblogs.com/Amandaliu/archive/2013/02/04/2891604.html
android Android提供了两个API用于实现录音功能:android.media.AudioRecord、android.media.MediaRecorder。
1、AudioRecord

主要是实现边录边播(AudioRecord+AudioTrack)以及对音频的实时处理(如会说话的汤姆猫、语音)

优点:语音的实时处理,可以用代码实现各种音频的封装

缺点:输出是PCM语音数据,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩

示例:

使用AudioRecord类录音,并实现WAV格式封装。录音20s,输出的音频文件大概为3.5M左右(已写测试代码)

2、MediaRecorder

已经集成了录音、编码、压缩等,支持少量的录音音频格式,大概有.aac(API = 16) .amr .3gp

优点:大部分以及集成,直接调用相关接口即可,代码量小

缺点:无法实时处理音频;输出的音频格式不是很多,例如没有输出mp3格式文件

示例:

使用MediaRecorder类录音,输出amr格式文件。录音20s,输出的音频文件大概为33K(已写测试代码)

3、音频格式比较

WAV格式:录音质量高,但是压缩率小,文件大

AAC格式:相对于mp3,AAC格式的音质更佳,文件更小;有损压缩;一般苹果或者Android SDK4.1.2(API 16)及以上版本支持播放

AMR格式:压缩比比较大,但相对其他的压缩格式质量比较差,多用于人声,通话录音

至于常用的mp3格式,使用MediaRecorder没有该视频格式输出。一些人的做法是使用AudioRecord录音,然后编码成wav格式,再转换成mp3格式

源码:
在MediaRecorder的编码格式有以下几种:

public static final int AAC = 3;
public static final int AAC_ELD = 5;
public static final int AMR_NB = 1;
public static final int AMR_WB = 2;
public static final int DEFAULT = 0;
public static final int HE_AAC = 4;
public static final int VORBIS = 6;

在MediaRecorder的文件格式有以下几种

public static final int AAC_ADTS = 6;
public static final int AMR_NB = 3;
public static final int AMR_WB = 4;
public static final int DEFAULT = 0;
public static final int MPEG_4 = 2;
/** @deprecated */
@Deprecated
public static final int RAW_AMR = 3;
public static final int THREE_GPP = 1;
public static final int WEBM = 9;

在AudioRecord中的编码格式有以下几种:

public static final int ENCODING_AC3 = 5;
public static final int ENCODING_DEFAULT = 1;
public static final int ENCODING_DTS = 7;
public static final int ENCODING_DTS_HD = 8;
public static final int ENCODING_E_AC3 = 6;
public static final int ENCODING_INVALID = 0;
public static final int ENCODING_PCM_16BIT = 2;
public static final int ENCODING_PCM_8BIT = 3;
public static final int ENCODING_PCM_FLOAT = 4;

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐