文档章节

iPhone开发音频资料

AmoyAI
 AmoyAI
发布于 2012/12/11 17:23
字数 1432
阅读 1561
收藏 10

每个音频文件都是由两部分内容所构成:它的文件格式(或者音频容器)以及它的数据格式(或者音频编码)。

    文件格式(或音频容器)是用于形容文件本身的格式。我们可以通过多种不同的方法为真正的音频数据编码。例如CAF文件便是一种文件格式,它能够包含MP3格式,线性PCM以及其它数据格式的音频。

  数据格式(或音频编码)

  我们将从音频编码开始阐述(而不是文件格式),因为编码是最重要的环节。

线性PCM:这是表示线性脉冲编码调制,主要是描写用于将模拟声音数据转换成数字格式的技术。简单地说也就是未压缩的数据。因为数据是未压缩的,所以我们便可以最快速地播放出音频,而如果空间不是问题的话这便是iPhone音频的优先代码选择。



文件格式(或音频容器)

  iPhone支持许多文件格式,包括MPEG-1(.mp3),MPEG-2 ADTS(.aac),AIFF,CAF以及WAVE。但是通常情况下我们都会选择CAF,因为它能够同时包含所有iPhone所支持的编码,并且它也是iPhone中的优先文件格式选择。

比特率:

比特率是指一个音频文件所占有的每秒字节数。像AAC或MP3等编码便能够指定字节数而压缩音频文件。当你降低每秒钟的字节数时,你同时也在降低音频的质量。

以下是一些较常见的比特率:

  每秒32千比特率:调频广播质量

  每秒48千比特率:较长的语音博客中常见的频率

  每秒64千比特率:标准长度的语音博客中常见的频率

  每秒96千比特率:调频收音机的质量

  每秒128千比特率:MP3音乐最常见的比特率

  每秒160千比特率:音乐家和敏感听众的优先选择

  每秒192千比特率:数字无线电广播的质量

  每秒320千比特率:和CD的质量没两样了

  每秒500千至1411千比特率:无失真的音频编码,如线性PCM

 采样频率

  我们最后需要提到的一个术语便是:采样频率。

  当我们将模拟信号转换成数字格式时,采样频率是指我们多长时间抽取一次声波去创造数字信号。

  通常情况下44100赫兹便是最常用的采样频率,因为这与CD音频的频率相同。

  转换和记录

  这是iPhone开发者需要掌握的制作音频要素的第二部分。

  在上文中我提到了文件格式与数据格式间的区别,以及iPhone所支持的各种格式。而接下来我将说说如何在这两种格式间进行转换。


Which format should I use?

The short answer: Use CAFF (uncompressed) for short sound effects and AIFF IMA4 (compressed) for music. This is also the recommendation from Apple.

  • CAFF (Core Audio File Format) is, in a nutshell, the iPhone's native audio file format for uncompressed sounds.
  • AIFF (Audio Interchange File Format) with IMA4 gets you about 4:1 compression on audio files. It is supported natively by the iPhone. One other advantage of this format is that it loops seamlessly - most other compressed audio files are problematic in this regard.

# creates sound.caf (little endian, 16 bit) afconvert -f caff -d LEI16 sound.wav  
# creates sound.caf (little endian, 16 bit, 22kHz) afconvert -f caff -d LEI16@22050 sound.wav  
# creates sound.caf (little endian, 16 bit, MONO) afconvert -f caff -d LEI16 -c 1 sound.wav  
# creates sound.aifc (IMA4 compression) afconvert -f AIFC -d ima4 sound.wav  
# creates sound.aifc (IMA4 compression, MONO) afconvert -f AIFC -d ima4 -c 1 sound.wav
若是要转换一个文件夹内的所有音频文件,可创建如下的一个脚本:
#!/bin/bash 
for i in *.wav; do   
afconvert -f caff -d LEI16 $i 
done  
# move new files to project directory 
mv *.caf ~/my_project_path/sounds/
存储该脚本文件名为 convert_sounds.sh,拷贝到要转换的音频文件夹内,在终端执行如下命令:
chmod u+x convert_sounds.sh    
./convert_sounds.sh

不在乎内存空间大小的话,采用 linear PCM数据格式的音频,因为该格式播放最快,而且也可以同时播放多个音频且没有cpu消耗资源问题;否则采用 AAC(背景音乐)和 IMA4(音效)
linear PCM在iphone上的采用的是 little-endian integer 16-bit,简称 LEI16,而在mac上用的是 native-endian float 32-bit;
ios都采用caf格式音频文件
采样率使用 44,100Hz
比特率列表:
  • 32kbit/s: AM Radio quality
  • 48kbit/s: Common rate for long speech podcasts
  • 64kbit/s: Common rate for normal-length speech podcasts
  • 96kbit/s: FM Radio quality
  • 128kbit/s: Most common bit rate for MP3 music
  • 160kbit/s: Musicians or sensitive listeners prefer this from 128kbit/s
  • 192kbit/s: Digital radio broadcasting quality
  • 320kbit/s: Virtually indistinguishable from CDs
  • 500kbit/s-1,411kbit/s: Lossless audio encoding such as linear PCM

3个命令行指令:
afplay, afinfo,  afconvert(执行 afconvert -hf可打印出能转换的所有音频格式 )
afconvert -d [out data format] -f [out file format] [in file] [out file]
例:
afconvert -d LEI16 -f caff input_file.xxx output_file.caf (使用linear PCM数据格式创建caf格式音频,ios最常用的格式)
afconvert -d aac -f caff -b 32768 background-music-lei.caf test_32.caf (-b后跟比特率32768=32*1024,即32kbit/s)

录制音效Audacity软件: http://audacity.sourceforge.net/
该软件保存的是 16-bit big-endian signed integer格式,所以最后还要转换成 LEI16

播放音效,此种方式仅支持数据格式为linear PCM和IMA4,文件格式为caf,aif和wav,长度不超过30秒的音频文件:
NSString *pewPewPath = [[NSBundle mainBundle] pathForResource:@"pew-pew-lei" ofType:@"caf"]
NSURL *pewPewURL = [NSURL fileURLWithPath:pewPewPath]
AudioServicesCreateSystemSoundID((CFURLRef)pewPewURL, &_pewPewSound)
AudioServicesPlaySystemSound(_pewPewSound);
播放背景音乐,开始播放前会有一定的延迟:
NSError *error; 
_backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error]
[_backgroundMusicPlayer prepareToPlay]
[_backgroundMusicPlayer play];
OpenAL:有一个开源引擎:下载地址:
a nice Sound Engine library using OpenAL

本文转载自:http://tech.hexun.com/2012-07-23/143860301.html

AmoyAI
粉丝 31
博文 59
码字总数 3593
作品 0
朝阳
私信 提问
iphone系统架构以及各层提供的主要服务

iPhone OS的技术实现包括四层:核心OS(Core OS)层、核心服务(Core Service)层、媒体(Media)层和Cocoa Touch层。系统低层为所有应用提供基础服务,其他较高层包含较多的复杂服务和技术。...

Orange1
2012/10/11
484
0
iPhone 应用开发:音频播放

在 iPhone 应用或者是游戏的开发过程中,对声音的支持是必不可少的。在我做过的几个应用中,每个都涉及到音效,所以在这里做个简单的归纳,很多都是引用自《iPhone Application Programming ...

长平狐
2012/08/13
106
0
ios音频播放

在 iPhone 应用或者是游戏的开发过程中,对声音的支持是必不可少的。在我做过的几个应用中,每个都涉及到音效,所以在这里做个简单的归纳,很多都是引用自《iPhone Application Programming ...

长平狐
2012/10/09
272
0
关于HLS直播流H5页面播放解决

在最近的项目开发中,涉及了HLS直播音频流的播放,关于网上的资料较多,各种混杂,因此对此在问题解决尝试以及结果进行总结。 什么是HLS 首先,什么是HLS? HTTP Live Streaming(缩写是HLS...

小浊微清
2017/11/09
0
0
支付宝9.3版本聊天语音保存Tweak开发笔记

环境 iPhone 5,iOS 8.3,越狱。 支付宝9.3 。 使用iPhone5主要是因为CPU是32位,32位arm汇编。IDA免费版不能反汇编64位程序。其次也是我初学,这本书中的例子也都是32位汇编,对我来说更简单...

久遇而安
2019/06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS-启用SFTP

创建用户组及用户 $ groupadd sftp $ useradd -g sftp -s /sbin/nologin -d /home/sftp sftp 设置密码 $ passwd sftp 输入密码(123456) 确认密码 修改sshd_config文件 $ vim /etc/ssh/sshd_......

自由人生-ZYRS
6分钟前
8
0
这个IM项目没时间搞了,开源算了。10万并发,基于golang。

先上效果 安装方法 本系统升级到golang1.12,请开启如下支持 #开启go mod支持export GO111MODULE=on#使用代理export GOPROXY=https://goproxy.io 1.下载项目 git clone https://github.c...

非正式解决方案
10分钟前
4
0
Mysql基本操作

查看mysql中已经有的数据库 二、删除已经有的数据库school 三、创建新数据库myschool 四、进入到myschool中 五、查看myschool库中所有的表 六、新建一张student表 七、查看student表结构 八、...

愚蠢的土豆
10分钟前
4
0
经典检索算法:BM25

BM25算法是一种常见用来做相关度打分的公式 思路比较简单,主要就是计算一个query里面所有词和文档的相关度, 然后在把分数做累加操作 而每个词的相关度分数主要还是受到tf/idf的影响 其实就...

Java搬砖工程师
17分钟前
4
0
详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群

概述 目前业界对数据库性能优化普遍采用集群方式,而oracle集群软硬件投入昂贵,mysql则比较推荐用mycat去搭建数据库集群,下面介绍一下怎么用mycat+haproxy+keepalived搭建一个属于mysql数据...

小致Daddy
17分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部