Comment gérer la lecture audio de fond pendant que le périphérique iOS est verrouillé ou sur une autre application?

concevoir un système de musique générative pour iOS, en utilisant OpenFrameworks, j'aurais besoin de fournir un mode dans lequel l'utilisateur pourrait écouter la musique produite par l'application quand:

  • l'appareil est verrouillé
  • l'utilisateur utilise une autre application

certaines applications comme BLOOM, ou réveil, fonctionne comme cela et propose aux utilisateurs un commutateur pour activer/désactiver cette fonctionnalité.

des conseils pour qui ?

22
demandé sur gluon 2012-05-03 14:06:47

6 réponses

Lecture Audio D'Arrière-Plan

une application qui joue ou enregistre l'audio en continu (même si l'application est cours d'exécution en arrière-plan) peuvent s'inscrire pour effectuer ces tâches dans le fond. Vous activez la prise en charge audio à partir de la section Modes D'arrière-plan de L'onglet capacités dans votre projet Xcode. (Vous pouvez également activer ce support en incluant la clé UIBackgroundModes avec l'audio valeur dans les informations de votre application.dossier plist.) Applications qui jouent l'audio contenu dans le fond doit jouer un contenu audible et non le silence.

Pomme de référence "la Lecture et l'Enregistrement Audio d'arrière-plan"

S'assurer que L'Audio continue lorsque l'écran se ferme

pour activer / désactiver cette fonctionnalité j'ai trouvé activation et désactivation de votre Session Audio, Je ne l'ai pas essayé moi-même, mais il ressemble à ce dont vous avez besoin.

34
répondu DanSkeel 2014-10-31 12:44:32

vous devez faire quelques changements dans le fichier plist.

i.e. 1) Définir le mode d'arrière-plan requis pour L'application joue l'audio

2) set Application ne s'exécute pas en background vers NO.

 NSError *setCategoryErr = nil;
 NSError *activationErr  = nil;
 [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
 [[AVAudioSession sharedInstance] setActive:YES error:&activationErr];

alors, vous devez écrire ces beaucoup de code dans AppDelegate

Maintenant, vous pouvez facilement exécuter l'audio pendant que l'écran du téléphone se bloque ou va en arrière-plan.

29
répondu dhaval rupani 2016-01-08 09:47:06

faire les changements suivants dans les paramètres du projet xCode aussi bien que dans le code.

étape 1) Sélectionnez votre fichier de projet dans le Navigateur de Xcode. Ensuite, à partir de la section capacités, activez la sous-section Modes D'arrière-plan. Après que la liste des modes d'arrière-plan vous est donnée, cochez sur le commutateur Audio & Airplay.

stp 2) Utilisez le code swift, essentiellement vous devez définir la session audio pour votre application.

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
}

cette session de lecture audio sera jouée votre application de lecture, même si l'application est en arrière-plan ou le téléphone est en mode silencieux ou que l'appareil est verrouillé.

2
répondu Himanshu Mahajan 2015-10-27 18:02:00

Regardez ce tutoriel. Il a certains des services d'arrière-plan exemple

http://www.raywenderlich.com/29948/backgrounding-for-ios

1
répondu hmlasnk 2015-11-18 07:43:06

vous devez faire quelques changements dans le fichier plist.

1) Définir le mode d'arrière-plan requis pour L'application joue l'audio

2) set Application ne s'exécute pas en background vers 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)")
                    }
            });
0
répondu Varun Naharia 2017-03-17 08:19:12

Vous pouvez aussi utiliser ce code:

AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:NULL];

AVAudioSession *backgroundMusic = [AVAudioSession sharedInstance];

[backgroundMusic setCategory:AVAudioSessionCategoryPlayback error:NULL];
-1
répondu Evgenii Melnik 2013-12-05 07:01:03