Как работать с фоновым воспроизведением звука, когда устройство iOS заблокировано или в другом приложении?
Создавая генеративную музыкальную систему для iOS, используя OpenFrameworks, мне нужно будет предоставить режим, в котором пользователь мог бы слушать музыку, создаваемую приложением, когда:
- устройство заблокировано
- пользователь использует другое приложение
Некоторые приложения, такие как BLOOM или будильник, работают так же и предлагают пользователям переключатель для включения/выключения этой функции.
Какие-нибудь советы для этого?
Ответы
Ответ 1
Воспроизведение фонового аудио
Приложение, которое воспроизводит или записывает звук непрерывно (даже если приложение работающие в фоновом режиме) могут зарегистрироваться для выполнения этих задач в задний план. Вы разрешаете поддержку звука из раздела "Фоновые режимы" вкладки "Возможности" в вашем проекте Xcode. (Вы также можете включить эта поддержка включает в себя ключ UIBackgroundModes со звуком значение в ваших файлах Info.plist приложений.) Приложения, которые воспроизводят аудиоконтент в фон должен воспроизводить звуковое содержимое, а не тишину.
ссылка Apple "Воспроизведение и запись фонового звука"
Обеспечение продолжения звука при блокировке экрана
Для включения/отключения этой функции я нашел Активацию и деактивацию аудио сессии, я сам не пробовал, но похоже, что вам нужно.
Ответ 2
Вам нужно сделать пару изменений в файле plist.
то есть.
1) Установите требуемый фоновый режим, чтобы приложение воспроизводило аудио
2) set Приложение не работает в фоновом режиме с NO.
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
Затем вам нужно написать много кода в AppDelegate
Теперь вы можете легко запускать звук при блокировке экрана телефона или в фоновом режиме.
Ответ 3
Внесите следующие изменения в настройки проекта xCode, а также в код.
Шаг 1) Выберите файл проекта в Навигаторе Xcode. Затем в разделе "Возможности" включите подраздел "Режимы фона". После того, как вам предоставлен список фоновых режимов, отметьте переключатель Audio и Airplay.
stp 2) Используйте следующий быстрый код, в основном вам нужно установить сеанс аудио для вашего приложения.
var audioPlayer : AVAudioPlayer!
@IBAction func playButtonClicked(sender : AnyObject){
let dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(dispatchQueue, {
if let data = NSData(contentsOfFile: self.audioFilePath())
{
do{
let session = AVAudioSession.sharedInstance()
try session.setCategory(AVAudioSessionCategoryPlayback)
try session.setActive(true)
self.audioPlayer = try AVAudioPlayer(data: data)
//self.audioPlayer.delegate = self
self.audioPlayer.prepareToPlay()
self.audioPlayer.play()
}
catch{
print("\(error)")
}
}
});
}
func audioFilePath() -> String{
let filePath = NSBundle.mainBundle().pathForResource("mySong", ofType: "mp3")!
return filePath
}
Этот сеанс воспроизведения звука будет воспроизводить воспроизведение вашего приложения, даже если приложение находится в фоновом режиме, или телефон находится в тихом режиме или устройство заблокировано.
Ответ 4
Посмотрите на этот учебник. В нем есть некоторые примеры фоновых услуг
http://www.raywenderlich.com/29948/backgrounding-for-ios
Ответ 5
Вам нужно сделать пару изменений в файле plist.
1) Установите требуемый фоновый режим, чтобы приложение воспроизводило аудио
2) set Приложение не работает в фоновом режиме с 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)")
}
});
Ответ 6
Также вы можете использовать этот код:
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:NULL];
AVAudioSession *backgroundMusic = [AVAudioSession sharedInstance];
[backgroundMusic setCategory:AVAudioSessionCategoryPlayback error:NULL];