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 ?
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.
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.
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é.
Regardez ce tutoriel. Il a certains des services d'arrière-plan exemple
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)")
}
});
Vous pouvez aussi utiliser ce code:
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:NULL];
AVAudioSession *backgroundMusic = [AVAudioSession sharedInstance];
[backgroundMusic setCategory:AVAudioSessionCategoryPlayback error:NULL];