在iPhone上播放CAF声音的最简单方法是什么?

3
有多难呢?有人告诉我在iPhone上播放音频非常困难。我真的不敢相信。但他说一个很难,两个或三个同时播放就非常难了。听起来很可怕。你们能对此发表什么意见吗?
我的需求是:我有大约10个带有小滴声、哔哔声和按钮按下声音的CAF文件。没有什么特别的。现在我想在每次发生某些事情时播放这些文件。同时可能会发生几件事情。因此,可能会出现播放重叠的情况。
也许有一个框架可以用来实现这个功能吗?
4个回答

7

播放小的提示音、蜂鸣声等(少于30秒的声音)实际上非常容易 - 这正是AudioServices的用途。您需要首先获取每个声音的ID,可以使用以下方法:

SystemSoundID soundID = 0;
CFURLRef soundFileURL = (CFURLRef)[NSURL URLWithString:somePathString];
OSStatus errorCode = AudioServicesCreateSystemSoundID(soundFileURL, &soundID);
if (errorCode != 0) {
  // Handle failure here
}

您可以保存该ID,直到需要使用它时,只需使用以下代码行即可播放声音:

AudioServicesPlaySystemSound(soundID);

还有一个AudioServicesPlayAlertSound()函数,它的行为会根据设备的能力略有不同,例如如果用户已将 iPhone 配置为振动,则会振动。您应该阅读Apple文档中的说明以获得更完整的解释。

请注意,使用 AudioServices 播放声音时,您对其播放几乎没有控制权 - 无法停止、控制音量等。AudioServices 只适用于警报声和其他短暂的哔哔声。当然,有 AVAudioPlayer,但在这种情况下,它有点过重了。除非 AudioServices 的某个限制使其无法使用,否则最好坚持使用 AudioServices。

您需要链接 AudioToolbox.framework 才能使用这些函数。

P.S. 欢迎来到 Stack Overflow!别忘了阅读 FAQ 并为你的问题标记接受的答案(如果它们是值得接受的好答案)。


谢谢。Xcode找不到任何AudioServices____调用的符号。我需要导入什么? - openfrog
@openfrog:我在答案中添加了一行。别忘了为你的问题点击被接受答案旁边的绿色勾号。 - Bryan Henry

2

我只使用iPhone工作了几周,从这个论坛上得到了很多帮助,所以能够回答问题让我感到非常高兴。

你需要的小工具是AVAudioPlayer,在苹果文档中可以找到。我刚刚完成了一个小的录音/播放应用程序,主要使用了书籍《IPhone SDK Development》(Dudney和Adamson)第16章的大量帮助。

在我投资的四本iPhone编程书籍中,它拥有最现实的应用程序可供使用。

但无论如何,请查看AVAudioPlayer类参考。它非常容易使用,这是一个新手的评价。

John Doner


1
谢谢!我也会去看看 AVAudioPlayer。 - openfrog

1

以下代码适用于我播放 .caf 文件

SystemSoundID SoundID;
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"beep" ofType:@"caf"];
NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &SoundID);
AudioServicesPlaySystemSound(SoundID);

0
``` #include SystemSoundID soundID = 0; CFURLRef soundFileURL = (CFURLRef)[NSURL URLWithString:@"myfile.caf"]; OSStatus errorCode = AudioServicesCreateSystemSoundID(soundFileURL, &soundID); AudioServicesPlaySystemSound(soundID); ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接