声音的用处 ·声效
■ 点击按钮?■ 警告声?■ 用户动作伴随的短声
· 任意长度的声音(音乐,播客,讲话内容) · 来自网络服务的音频流?· 录制的声音
这会有多难?
· 在一个多功能的移动设备上播放声音可能令人惊讶 的复杂
■ 可能同时有多个来源
■ 无数可能的输出
■ 变幻的事件,可能超出用户的控制 ■ 给看上去类似的动作不同的优先级
· 操作系统管理声音系统?■ 再一次,你只需简单的搭它的车
CoreAudio
· 高层级,容易使用?■ System Sound API - 短的声音
■ AVAudioPlayer class - ObjC,简单API
· 低层级,花费更多努力,但是有更多控制
AudioToolbox-录制和播放,流处理,完全的控制
Audio Units - 处理声音
OpenAL - 3D定位的声音?· 使用哪个取决于你要做什么?■ 许多情况下满意于系统声音和AVAudioPlayer
播放短音?· "短"指少于30秒
· 非常简单的API,但是有限制 ■ 不能重复
■ 没有音量控制 ■ 立刻播放?■ 有限的格式
■ 线性化的PCM或IMA4 ■ .caf,.aif或.wav文件
播放短音
· 两步的过程?■ 注册这个声音,返回一个"声音ID“?■ 播放声音?■ 当声音播放结束时可选择是否运行回调函数
NSURL *fileURL = ... // 一个文件的地址 SystemSoundID myID;
// 先注册这个声音?AudioServicesCreateSystemSoundID ((CFURLRef)fileURL, &myID);
// 现在可以播放这个声音 AudioServicesPlaySystemSound (myID);
播放短音 ·清理
■ 当你完成时清除声音ID?■ 否则你会得到一个内存警告
SystemSoundID myID;
// 清除前面注册的声音 AudioServicesDisposeSystemSoundID (myID);
体会你的声音?· 系统的声音API允许促发手机的振动
· 使用这个特定的系统声音ID kSystemSoundID_Vibrate ■ 在iPod touch上不做任何事情
- (void)vibrate { // 促发手机的振动
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
}
转换声音?· 转换声音的命令行工具
/usr/bin/afconvert
· 支持各种输入和输出格式 · 细节请查看man的页面
· 可以容易的转换声音为系统声音格式?/usr/bin/afconvert -f aiff -d BEI16 input.mp3 output.aif
播放长音?· iPhone OS 2.1之前的版本里,你必须使用低层级的
CoreAudio APIs
■ 可能会很复杂,很麻烦?· iPhone OS 2.2引入了ObjC类来处理简单的音频播放
■ AVAudioPlayer?· 如果你要在期末项目里使用声音,更新到2.2版
AVAudioPlayer
· 播放长音(超过30秒)
· 本地存储的文件或内存里的(或来自网络流)
· 能够循环,跳动,播放,暂停
· 提供音量信息
· 同时播放多个声音
· Cocoa-风格的 API?■ 从文件地址或数据初始化
■ 允许代理
AVAudioPlayer
· 从文件地址或数据生成 AVAudioPlayer *player;
NSString *path = [[NSBundle mainBundle] pathForResource...];
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url]; · 简单的开始/停止方法
if (!player.playing) {
[player play];
} else {
[player pause];
}
AVAudioPlayerDelegate
· 告知什么时候播放停止
· 告知音频解码错误
· 提供处理中断的接口 ■ Oh,这些讨厌的中断
Audio Sessions
· 操作系统需要知道你在对声音做什么?■ 开始玩游戏或收听播客,然后锁定设置...什么会发生?
■ 如果你玩的是一个射击游戏并用发声/静音开关来静音... 什么会发生?
· 提供了一种方式让你表达你的音频目的 ■ Categories被定义用来弄清
■ 环境声?■ 媒体播放?■ 录制?■ 播放和录制
默认Sessions
· 应用程序获得默认session时会?■ 当播放你的声音时(比如iPod音频)其他声音被静音 ■ 使用发声/静音开关?■ 当用户锁定设备时静音
· 对许多应用程序这不错,但是不一定适合你的应用程序 ■ 如果这样,你需要使用Audio Session APIs
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。