需要一个可以像闹钟应用程序一样使用的iOS 4音频API

时间:2010-11-18 11:52:57

标签: iphone objective-c audio ios avaudioplayer

我正在制作报警应用程序,我需要找到播放声音的最佳方法:

  • 当应用在后台时播放循环播放的声音或预先播放的声音
  • 可以暂停/停止。当用户单击以在警报中关闭警报时,我需要停止声音
  • 覆盖静音开关(最好)
  • 将尊重音量控制(最好)
  • 将暂停iPod(最好)

我的主要要求是我的前两点,尝试使用SystemSounds但是我似乎无法阻止这些,一旦你告诉它播放它播放直到声音结束。然而,这在后台工作,但不能循环。并且被静音开关静音。

目前使用AudioSession忽略静音开关。我目前还在使用AVAudioPlayer,它允许我控制声音的播放/暂停。但是不会在后台工作!有没有办法使用AVAudioPlayer和AudioSession播放背景声音还是我需要使用别的东西? OpenAL的?

任何帮助都将非常感激......

谢谢,

2 个答案:

答案 0 :(得分:0)

当应用程序在后台时,您无法自己播放预定的背景声音。

可以做的唯一事情是使用Apple的多任务API注册自定义警报声音,并在预定义的时间点播放。

答案 1 :(得分:0)

好的,我研究过使用AudioServices并使用了以下代码:

// Use SystemSound API's
NSURL *alarmSound = [[NSBundle mainBundle] URLForResource:alarm.alarmTone withExtension:@"wav"];
soundFileURLRef = (CFURLRef) [alarmSound retain];
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundFileObject);

AudioServicesPlayAlertSound(soundFileObject);

[alarmSound release];

这在后台听起来很好听,AudioServicesPlayAlertSound也会触发振动,这是一个奖励。虽然你实际上无法停止声音,但我设法通过处理声音对象来阻止声音

AudioServicesDisposeSystemSoundID(soundFileObject);

我唯一不能做的就是让我的闹钟铃声覆盖静音开关,音频会话似乎对音频服务触发的音频没有任何影响。不知道是否还有人知道如何实现这一目标?另一个缺点是没有声音循环,但我刚刚在音频编辑器中循环我的声音文件:)