- 浏览: 150710 次
- 性别:
- 来自: 广州
最新评论
-
yinren13:
说的便捷的视频会议,我们公司的遥控器一按就能开始的视频会议tu ...
便捷视频会议 -
xujinquan19:
...
可视通讯与移植、跨平台开发 -
xujinquan19:
...
Android 平台下的即时通讯 -
xujinquan19:
...
Android 平台下的即时通讯 -
xujinquan19:
...
Android 平台下的即时通讯
iPhone 应用开发:音频播放
在 iPhone 应用或者是游戏的开发过程中,对声音的支持是必不可少的。在我做过的几个应用中,每个都涉及到音效,所以在这里做个简单的归纳,很多都是引用自《iPhone Application Programming Guide》(需要有 Apple ID 才能打开链接),加了一些实际使用的经验。
iPhone OS 主要提供以下了几种播放音频的方法:
System Sound Services
AVAudioPlayer 类
Audio Queue Services
OpenAL
1. System Sound Services
System Sound Services 是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:
■ 声音长度要小于 30 秒
■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
■ 打包成 .caf, .aif, 或者 .wav 的文件
■ 不能控制播放的进度
■ 调用方法后立即播放声音
■ 没有循环播放和立体声控制
另外,它还可以调用系统的震动功能,方法也很简单。具体的代码可以参考官方的示例 SysSound
,但是官方的示例只有一些简单的用法,从文档中我们发现可以通过AudioServicesAddSystemSoundCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。以下代码可以实现一个在程序中循环播放的背景音乐:
view plaincopy to clipboardprint?
static void completionCallback (SystemSoundID mySSID) {
// Play again after sound play completion
AudioServicesPlaySystemSound(mySSID);
}
- (void) playSound {
// Get the main bundle for the app
CFBundleRef mainBundle;
SystemSoundID soundFileObject;
mainBundle = CFBundleGetMainBundle ();
// Get the URL to the sound file to play
CFURLRef soundFileURLRef = CFBundleCopyResourceURL (
mainBundle,
CFSTR ("background"),
CFSTR ("wav"),
NULL
);
// Create a system sound object representing the sound file
AudioServicesCreateSystemSoundID (
soundFileURLRef,
&soundFileObject
);
// Add sound completion callback
AudioServicesAddSystemSoundCompletion (soundFileObject, NULL, NULL,
completionCallback,
(void*) self);
// Play the audio
AudioServicesPlaySystemSound(soundFileObject);
}
static void completionCallback (SystemSoundID mySSID) {
// Play again after sound play completion
AudioServicesPlaySystemSound(mySSID);
}
- (void) playSound {
// Get the main bundle for the app
CFBundleRef mainBundle;
SystemSoundID soundFileObject;
mainBundle = CFBundleGetMainBundle ();
// Get the URL to the sound file to play
CFURLRef soundFileURLRef = CFBundleCopyResourceURL (
mainBundle,
CFSTR ("background"),
CFSTR ("wav"),
NULL
);
// Create a system sound object representing the sound file
AudioServicesCreateSystemSoundID (
soundFileURLRef,
&soundFileObject
);
// Add sound completion callback
AudioServicesAddSystemSoundCompletion (soundFileObject, NULL, NULL,
completionCallback,
(void*) self);
// Play the audio
AudioServicesPlaySystemSound(soundFileObject);
}
2. AVAudioPlayer 类
AVAudioPlayer 是 AVFoundation.framework 中定义的一个类,所以使用要先在工程中引入 AVFoundation.framework。我们可以把 AVAudioPlayer 看作是一个高级的播放器,它支持广泛的音频格式,主要是以下这些格式:
■ AAC
■ AMR(AdaptiveMulti-Rate, aformatforspeech)
■ ALAC(AppleLossless)
■ iLBC(internetLowBitrateCodec, anotherformatforspeech)
■ IMA4(IMA/ADPCM)
■ linearPCM(uncompressed)
■ µ-lawanda-law
■ MP3(MPEG-1audiolayer3
AVAudioPlayer 可以播放任意长度的音频文件、支持循环播放、可以同步播放多个音频文件、控制播放进度以及从音频文件的任意一点开始播放等,更高级的功能可以参考 AVAudioPlayer 的文档。要使用 AVAudioPlayer 的对象播放文件,你只需为其指定一个音频文件并设定一个实现了AVAudioPlayerDelegate 协议的 delegate 对象。这里举一个简单的例子,和上一个例子一样,实现一直循环播放的背景音乐:
view plaincopy to clipboardprint?
(void) playBackgroundSoundEffect {
NSString *soundFilePath =
[[NSBundle mainBundle] pathForResource: @"background"
ofType: @"wav"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
AVAudioPlayer *newPlayer =
[[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
error: nil];
[fileURL release];
self.player = newPlayer;
[newPlayer release];
[self.player prepareToPlay];
[self.player setDelegate: self];
self.player.numberOfLoops = -1; // Loop playback until invoke stop method
[self.player play];
}
(void) playBackgroundSoundEffect {
NSString *soundFilePath =
[[NSBundle mainBundle] pathForResource: @"background"
ofType: @"wav"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
AVAudioPlayer *newPlayer =
[[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
error: nil];
[fileURL release];
self.player = newPlayer;
[newPlayer release];
[self.player prepareToPlay];
[self.player setDelegate: self];
self.player.numberOfLoops = -1; // Loop playback until invoke stop method
[self.player play];
}
可以看到,只要将 AVAudioPlayer 的 numberOfLoops 属性设为负数,音频文件就会一直循环播放直到调用 stop 方法。
AVAudioPlayer 同样支持 Callback,这是 AVAudioPlayerDelegate 的一个可选 delegate 方法:
view plaincopy to clipboardprint?
- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) flag {
if (player == self.player && flag == YES) {
NSLog(@"Playback finish.");
}
}
- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) flag {
if (player == self.player && flag == YES) {
NSLog(@"Playback finish.");
}
}
另外,你可以随时控制 AVAudioPlayer 对象的播放、暂停以及停止,通过判断对象的状态,分别调用play、pause 和 stop 方法即可:
view plaincopy to clipboardprint?
- (IBAction) playOrPause: (id) sender {
// if playing, pause
if (self.player.playing) {
[self.player pause];
// if stopped or paused, start playing
} else {
[self.player play];
}
- (IBAction) playOrPause: (id) sender {
// if playing, pause
if (self.player.playing) {
[self.player pause];
// if stopped or paused, start playing
} else {
[self.player play];
}
虽然 AVAudioPlayer 可以播放很多格式,但是我们在实际开发过程中还是最好使用一些没有压缩的格式,比如 WAVE 文件,这样可以减少系统处理单元的资源占用,以便更好的完成程序的其他功能。另外,在使用 AVAudioPlayer 连续播放 mp3 这类经过压缩的音频文件时,在连接处可能出现一定的间隔时间。
3. Audio Queue Services
如果以上两种音频播放的解决方案都无法满足你的需求,那么我想你肯定需要使用 Audio Queue Services。使用 Audio Queue Services 对音频进行播放,你可以完全实现对声音的控制。例如,你可以在声音数据从文件读到内存缓冲区后对声音进行一定处理再进行播放,从而实现对音频的快速/慢速播放的功能。
因为 Audio Queue Services 相对复杂很多,Apple 官方已经把它整理为一本书了,具体可以参考 Audio Queue Services Programming Guide 和 SpeakHere 的程序示例。
4. OpenAL
OpenAL 是一套跨平台的开源的音频处理接口,与图形处理的 OpenGL 类似,它为音频播放提供了一套更加优化的方案。它最适合开发游戏的音效,用法也与其他平台下相同。
iPhone 支持 OpenAL 1.1,我没有在实际开发中使用过,具体的文档可以参考 OpenAL 的网站http://openal.org 和 oalTouch 的程序示例。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/favormm/archive/2010/01/19/5212221.aspx#
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xujinquan19/archive/2010/12/07/6060814.aspx
发表评论
-
手机视频会议
2012-11-16 14:03 846在这个时代,手机被开发者们所赋予的意义已经远远超出了大众的期望 ... -
视频通讯demo源码
2012-11-09 15:23 1175以下为anychat视频通讯系统中的部分回调函数源码: 具体 ... -
音视频对话开发
2012-09-20 17:21 747AnyChat for Android是佰锐科技继2010年发 ... -
H.264视频编码标准在网络视频监控系统中的应用 .
2012-08-24 15:13 994【摘 要】本文介绍了ITU-T最新高性能视频压缩标准H.264 ... -
安卓平台下的即时通讯
2012-08-24 15:12 976基于Android 平台简易即时通讯的研究与设计 摘要 ... -
iOS音视频封装与传输demo
2012-08-24 15:01 2037ios没有直接得api用来封装传输rtp,但是经常有用到得接收 ... -
手机音视频应用开发(专注于Symbian、iPhone、Android等跨平台音视频应用开发方案)
2012-08-24 14:47 1151一款好的手机应用, 能让用户在第一分钟就爱上他, 一款烂的手 ... -
手机视频通讯开发
2012-08-24 14:46 825如今,3G网络快速发展 ... -
android视频开发
2012-08-16 17:31 1024摘要:论文简单介绍Android 平台的特性,主要阐述了基于A ... -
android视频聊天软件推荐
2012-08-15 17:00 1066正在当前那个社会 ... -
音视频交流服务系统
2012-03-15 16:22 912下面的这个平台是一种视频服务的应用,比如A(客户端)打视频电话 ... -
音视频开发平台
2012-03-15 16:12 840近日,腾讯公司发布了Q ... -
即时通讯开发平台(音视频)
2012-03-15 16:11 936近日,腾讯公司发布了Q ... -
手机视频之营销模式
2012-02-16 10:43 9073G时代的逼近,手机视 ... -
手机视频应用开发
2011-12-30 14:56 788AnyChat for Android是佰锐科技继2010年发 ... -
Android视频通话(即时通讯,可视电话,视频通讯,监控,电视直播)推荐
2011-06-22 15:21 2038正在当前那个社会里,相信良多伴侣都是独自一人正在中地拼搏,好久 ... -
安卓视频通讯与监控系统完全版本正式发布
2011-05-04 17:12 1112通过数个月的研发,视频通讯安卓版本的程序已经出来了。 ... -
LINUX常用命令
2011-04-22 15:22 658Linux 系统常用命令格 ... -
Linux网络编程
2011-04-22 15:17 696Linux网络编程 linux socket的 ... -
GCC对ARM支持的所有优化选项及指令
2011-04-22 15:11 20853.17.1 ARM Options These `-m' ...
相关推荐
在iOS平台上开发一款iPhone简易音频播放程序,涉及到的知识点涵盖了Objective-C编程语言、Apple的UIKit框架、AVFoundation框架以及多媒体处理。以下是对这些关键领域的详细解释: 1. **Objective-C编程语言**:作为...
- **音频与视频处理**:利用AVFoundation框架处理音频和视频文件,包括播放、录制和编辑功能。 - **图像处理**:使用Core Image框架进行图像滤镜效果的添加,以及如何使用Core Graphics进行更精细的图像绘制操作。 -...
【描述】:“ios源码Last.fm的官方iPhone应用程序:支持500多万首音乐.zip”描述了这个压缩包的内容,即Last.fm的iOS应用源代码,它能够接入并播放海量音乐。这表明源代码包含了处理音乐搜索、播放、推荐、用户个性...
资源名称:苹果官方iPhone应用高级开发课程(16集)资源...高效iPhone应用开发 2【】[iPhone应用开发高级课程]04.iPhone音频开发【】[iPhone应用开发高级课 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
在iOS平台上,开发针对iPhone和iPad的应用时,录音和声音播放是常见的功能需求。这篇文章将深入探讨如何在iOS应用中实现这些功能,主要基于Apple的AVFoundation框架。AVFoundation是苹果提供的一套强大的多媒体处理...
### iPhone应用开发指南知识点概述 本指南主要针对的是希望为iPhone平台开发应用程序的开发者们,提供了详尽的技术指导与规范。下面将从几个关键部分来深入解析这份文档中所涵盖的重要知识点。 #### 一、版权与...
AVFoundation框架提供了音频播放和处理的功能,开发者需要了解如何导入、播放和控制游戏中的音效。 在iOS应用的生命周期管理和内存管理方面,本书也会进行讲解。例如,如何在用户离开游戏时正确保存进度,以及如何...
《iPhone应用开发从入门到精通》是一本针对初学者与进阶者的全面指南,旨在帮助读者逐步掌握iOS应用开发的核心技能。这本书深入浅出,采用循序渐进的方式讲解了从基础概念到高级实践的全过程。 在iOS开发领域,...
《iPhone与iPad开发实战:iOS经典应用剖析》是一本深入探讨iOS应用开发的专业书籍,针对苹果公司的iPhone和iPad设备,提供了丰富的实践经验和详尽的技术解析。这本书不仅涵盖了基础的iOS编程概念,还深入剖析了多个...
在iOS平台上,开发一款iPhone应用程序,尤其是涉及到媒体播放功能,是一项技术含量较高的任务。本教程主要聚焦于"Iphone应用程序开发之播放器",这将带领我们深入探讨如何为iPhone构建一个功能完备、用户友好的...
- **开发环境要求**:开发iPhone应用程序需要在运行MacOS X v10.5或更高版本的Intel Mac电脑上进行,并且需要下载和安装iPhone SDK。 - **开发工具**:Xcode是主要的开发工具,用于编写代码、调试和打包应用程序;...
即使你已经具备一些iPhone应用开发经验,游戏开发也要求开发者掌握全新的技能。作者通过详细的例子和清晰的解释,引导读者了解如何为iPhone和iPod Touch解决特定的技术设计问题,并提出优化不同类型游戏性能的方法。...
1. **Objective-C或Swift编程**:iPhone和iPad应用主要使用Objective-C或Swift语言进行开发。Objective-C是早期的苹果开发语言,而Swift是近年来推出的更现代、更安全的语言,具有更高的开发效率。根据项目的具体...
移动办公应用开发专指为移动设备开发的办公自动化软件,这些应用通常包括日历管理、任务和项目跟踪、邮件收发、文档编辑等功能,以支持企业的移动办公需求。 根据上述知识点,上海诸君信息科技有限公司能够为不同...
在开发微信小程序时,实现音频播放功能是一个基础且常见的需求。特别是针对iOS平台,开发者可能遇到...开发者应该意识到,在音频播放等关键功能上,细致的测试和对API深入的理解是解决问题和优化应用不可或缺的一部分。
本文主要探讨的是基于苹果iOS平台的iPhone应用开发,特别是在毕业设计论文的背景下。iOS是由苹果公司为iPhone、iPod touch、iPad以及Apple TV等设备开发的操作系统,它源自于Darwin,属于类Unix的商业操作系统。自...
在iOS平台上进行iPhone应用开发时,处理音频文件,特别是MP3格式的下载和播放是常见的需求。MP3是一种广泛使用的音频编码格式,以其高效的压缩比和高质量的音质深受喜爱。本节将深入探讨如何在iPhone应用中实现MP3...