音频概念,
http://www.raywenderlich.com/259/audio-tutorial-for-ios-playing-audio-programatically
1,音频文件格式,音频容器
.caf:
.mpeg-1:
.mpeg-2:
.adts:
.aiff:
.caf:
.wave:
2,音频数据格式,即音频编码
acc:
he-acc:
amr:
alac:
ilbc:
ima4:
linear pcm:
mp3:
3,比特率:
是音频文件每秒占据的字节数(比特数),编码可以指定音频文件压缩的比特数,比特率越高越清晰,
概述:
· 32kbit/s: 调幅(AM)广播的质量
· 48kbit/s: 一般比较长时间的语音播客的比特率
· 64kbit/s: 一般正常长度的语音播客的比特率
· 96kbit/s: 调频(FM)广播的质量
· 128kbit/s: 大多数MP3音乐的比特率
· 160kbit/s: 那些很喜欢音乐的,想要听觉感受的人更喜欢的在128kbit/s之上的一个比特率
· 192kbit/s: 数字电台的质量
· 320kbit/s: 在这个比特率下人们几乎和CD的播放效果一样,不能区别
· 500kbit/s-1,411kbit/s: 无损的音频编码,就像linear PCM
4,采样率:
表示 在转换一个模拟信号到数字信号时候,多久进行 一次抽取 声音波形式样来转换成 数字信号,
5,选择何种录音格式:
mp3: ios,android录制都 需要进行编码转换,使用lame第三方库,播放应该都可以直接播放
iLBC:ios支持编码解码, android 低版本不支持,不过有开源第三方库,可以进行录制编码,播放解码的处理
Speex:也是开源的第三方库,声称文件小,能降噪,需要ios,android客户端都进行编码解码处理
amr:ios 4.3之前的版本支持,以后版本都不支持amr格式,android设备支持该格式,采用这种格式,ios设备可用libOpenCore第三方库进行转换,播放时再进行解码成原始pcm进行播放。android设备可直接录制与播放
aac:两系统应该都支持的格式,但有说android设备有支持的不够好。没做测试,具体情况未知。
5,通道数,采集位数(占有二进制位的多少),
采集位数越高,越精准,
6,数据速率,存储需求量
数字音频的数据速率(每秒钟的字节数)可用下式计算:
比特深度 / 8 × 取样率 × 声轨数。
其得数除以1048576以后得到每秒兆字节(MB/sec)数。
例如,一个24比特/44.1khz、16声轨记录的数据速率应为
(24/8×44100×16)/1048576 = 2 MB / sec。
把数字音频记录到硬盘上去的时候,需要占用大量空间。其存储的需求量可通过下式计算:
比特深度 / 8 × 取样率 × 声轨数 × 60 × 分钟数
其得数除以1048576以后得到兆字节(MB)单位。再除以1024得千兆字节(GB)单位。
例如,假如要用24比特、44.1kHz、16声轨的条件下录一场时间长达2个小时的音乐会,那么所需要的硬盘空间容量应为:
(24 / 8×44100×16×60×120)/ 1048576 = 14534.9 MB或14.2 GB
7,桶与水,呵呵水管与水,房子与人,数据类型与数据,
文件格式就像是桶一样,里面可以装很多水,那些水就是那些音频数据。桶有很多种,也就是有很多种文件格式,而且不一样的桶,也需要装不同的水。CAF这种桶就可以装各种各样的水,不过有些就只能装几种类型的水。
8,
AVSampleRateKey, //采样率
AVFormatIDKey,//音频编码格式
AVLinearPCMBitDepthKey,//采样位数 默认 16
AVNumberOfChannelsKey,//通道的数目
AVLinearPCMIsBigEndianKey,//大端还是小端 是内存的组织方式
AVLinearPCMIsFloatKey,//采样信号是整数还是浮点数
AVEncoderAudioQualityKey,//音频编码质量
鉴于考虑到可能各位看官对于我们所要给出的参数并不了解,所以在此我们来依次解释一下每一个参数的含义
首先是采样率,简单地说就是通过波形采样的方法记录1秒钟长度的声音,需要多少个数据。44KHz采样率的声音就是要花费44000个数据来描述1秒钟的声音波形。原则上采样率越高,声音的质量越好。
编码格式可以理解为每种音频格式不同的编解码方式,鄙人对于此了解的也不是非常多(能熟知所有编解码的人一定是偶像级的超人!)而IOS下这些编码方式被集中到一个枚举中,而我们本次代码中所使用的编码格式是WAV文件的格式,想要使用其他的编码格式就在成功导入AVFouncation框架之后即可通过Xcode的自动提示找到以kAudioFormat开头的各种枚举的名称。
采样位数即采样值或取样值,是用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。声卡的位客观地反映了数字声音信号对输入声音信号描述的准确程度。
通道数目应该很好理解了,1意味着单声道声音,2指立体声,4是指四个声道等等。
接下来的AVLinearPCMIsBigEndianKey是指再内存中音频的存储模式,在计算机中,通常采用的字节存储机制主要有两种:big-endian和little-endian,即大端模式和小端模式。这个参数为BOOL值,YES为大端,NO为小端。关于大端和小端相关到两个关键词,MSB以及LSB。MSB:Most Significant Bit( 最高有效位),LSB:Least Significant Bit (最低有效位)你可以理解为一段数据再内存中的起始位置以及终止位置,大端模式就是MSB存放在最低端的地址上。而小端口模式就是LSB存放在最低端的地址上。
在Big-Endian中,对于bit序列中的序号编排方式如下(以双字节数0x8B8A为例):
bit | 0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15
——MSB———————————-LSB
val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
+——————————————–+
在Little-Endian中,对于bit序列中的序号编排和Big-Endian刚好相反,其方式如下(以双字节数0x8B8A为例):
bit | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0
——MSB———————————–LSB
val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
+———————————————+
总之可以理解为在内存中正反两种存储顺序。
对于采样信号是整数还是浮点数也是一个BOOL类型的参数,本人并未理解会影响到的含义,或许是设计到音频信号再解析时候的精准度但并不敢确定还有待设定,所以也没有设置这个参数。
最后一个参数音频编码质量比较好理解了,这个参数又是一个枚举,我们可以找到以AVAudioQuality开头的High、Low、Medium、Max、Min五种设置。介于参数键值对的解释暂时就是这些了,如果又看官得到了一些其他参数的资料或者对于我的解释有纠正补充的欢迎指教。