Pour concevoir un système de musique génératif pour iOS, à l'aide d'OpenFrameworks, je devrais fournir un mode dans lequel l'utilisateur pourrait écouter la musique produite par l'application lorsque:
Certaines applications, telles que BLOOM ou réveil, fonctionnent de la sorte et proposent aux utilisateurs un commutateur pour activer/désactiver cette fonctionnalité.
Des conseils pour ça?
Lecture audio en arrière-plan
Une application qui lit ou enregistre de l'audio en continu (même si l'application tourne en arrière-plan ) Peut s'inscrire pour effectuer ces tâches dans le Contexte. Vous activez la prise en charge audio à partir de la section Modes d’arrière-plan de l'onglet Capacités de votre projet Xcode. (Vous pouvez également activer Cette prise en charge en incluant la clé UIBackgroundModes avec la valeur audio Dans le fichier Info.plist de votre application.) Les applications lisant du contenu audio dans l'arrière-plan doit jouer un contenu audible et non le silence.
Référence Apple "Lecture et enregistrement de sons d'arrière-plan"
S'assurer que l'audio continue lorsque l'écran se verrouille
Pour activer/désactiver cette fonctionnalité, j'ai trouvé Activer et désactiver votre session audio , je ne l'ai pas essayée moi-même, mais cela ressemble à ce dont vous avez besoin.
Vous devez apporter quelques modifications au fichier plist.
c'est à dire. 1) Définir le mode d'arrière-plan requis sur App lit l'audio
2) set L'application ne s'exécute pas en arrière-plan sur NO.
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
Ensuite, vous devez écrire beaucoup de code dans AppDelegate
Désormais, vous pouvez facilement utiliser le son lorsque l'écran du téléphone est verrouillé ou en arrière-plan.
Apportez les modifications suivantes dans les paramètres de projet xCode ainsi que dans le code.
étape 1) Sélectionnez votre fichier de projet dans le navigateur de Xcode. Ensuite, dans la section Capabilities, activez la sous-section Modes d’arrière-plan. Une fois que la liste des modes d’arrière-plan vous a été fournie, cochez la case Audio & Airplay.
stp 2) Utilisez le code Swift suivant, vous devez définir une 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 la lecture de votre application, même si l'application est en arrière-plan ou si le téléphone est en mode silencieux ou si l'appareil est verrouillé.
Regardez sur ce tutoriel. Il a quelques exemples de services d'arrière-plan
Vous devez apporter quelques modifications au fichier plist.
1) Définir le mode d'arrière-plan requis sur App lit l'audio
2) set L'application ne s'exécute pas en arrière-plan sur 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)")
}
});