使用OpenFrameworks为iOS设计生成音乐系统,我需要提供一种模式,用户可以在以下情况下听取应用程序生成的音乐:
某些应用程序(如BLOOM或闹钟)就是这样,并向用户建议启用/禁用此功能。
有关于此的任何提示吗?
答案 0 :(得分:34)
播放背景音频
连续播放或录制音频的应用程序(即使应用程序是 在后台运行)可以注册执行那些任务 背景。您可以从后台模式部分启用音频支持 Xcode项目中的Capabilities选项卡。 (您也可以启用 通过在音频中包含UIBackgroundModes键来获得此支持 应用程序的Info.plist文件中的值。)播放音频内容的应用程序 背景必须播放听觉内容,而不是沉默。
Apple reference "Playing and Recording Background Audio"
Ensuring That Audio Continues When the Screen Locks
为了启用/禁用此功能,我找到Activating and Deactivating Your Audio Session,我自己没有尝试过,但它看起来就像你需要的那样。
答案 1 :(得分:29)
您需要在plist文件中进行一些更改。
即。 1)将所需背景模式设置为App播放音频
2)设置应用程序不在后台运行到NO。
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
然后,您需要在AppDelegate中编写这么多代码
现在,您可以在手机屏幕锁定或进入后台时轻松运行音频。
答案 2 :(得分:3)
在xCode项目设置和代码中进行以下更改。
步骤1)在Xcode导航器中选择项目文件。然后,从“功能”部分,打开“背景模式”子部分。在为您提供背景模式列表后,请在“音频和音频”上打勾。 Airplay开关。
stp 2)使用以下swift代码,基本上你需要为你的应用程序设置音频会话。
compareToBl
此音频播放会话将播放您的应用程序播放,即使应用程序处于后台或手机处于静音模式或设备已锁定。
答案 3 :(得分:1)
答案 4 :(得分:0)
您需要在plist文件中进行一些更改。
1)将所需的背景模式设置为App播放音频
2)设置应用程序不在后台运行到NO。
let dispatchQueue = DispatchQueue.global()
dispatchQueue.async(execute: {
do{
let session = AVAudioSession.sharedInstance()
try session.setCategory(AVAudioSessionCategoryPlayback)
try session.setActive(true)
self.isObjectAllocate = true
if self.isPlayed == false{
self.playSound(soundName: "http://radio.zahraun.com:8000/live.m3u")
self.isPlayed = true
self.btnPlayAudio.setImage(#imageLiteral(resourceName: "pause") , for: .normal)
}else{
self.audioPlayer.pause()
self.isPlayed = false
self.btnPlayAudio.setImage(#imageLiteral(resourceName: "audioPlay"), for: .normal)
}
}
catch{
print("\(error)")
}
});
答案 5 :(得分:-2)
您也可以使用此代码:
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:NULL];
AVAudioSession *backgroundMusic = [AVAudioSession sharedInstance];
[backgroundMusic setCategory:AVAudioSessionCategoryPlayback error:NULL];