Подтвердить что ты не робот

Как работать с фоновым воспроизведением звука, когда устройство iOS заблокировано или в другом приложении?

Создавая генеративную музыкальную систему для iOS, используя OpenFrameworks, мне нужно будет предоставить режим, в котором пользователь мог бы слушать музыку, создаваемую приложением, когда:

  • устройство заблокировано
  • пользователь использует другое приложение

Некоторые приложения, такие как BLOOM или будильник, работают так же и предлагают пользователям переключатель для включения/выключения этой функции.

Какие-нибудь советы для этого?

4b9b3361

Ответ 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
}

Этот сеанс воспроизведения звука будет воспроизводить воспроизведение вашего приложения, даже если приложение находится в фоновом режиме, или телефон находится в тихом режиме или устройство заблокировано.

Ответ 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];