Beim Entwurf eines generativen Musiksystems für iOS mit OpenFrameworks muss ein Modus bereitgestellt werden, in dem der Benutzer die von der Anwendung produzierte Musik hören kann, wenn:
Einige Anwendungen wie BLOOM oder Wecker funktionieren auf diese Weise und schlagen Benutzern einen Schalter zum Aktivieren/Deaktivieren dieser Funktion vor.
Irgendwelche Tipps dafür?
Hintergrundmusik abspielen
Eine App, die kontinuierlich Audio abspielt oder aufzeichnet (selbst wenn die .__ im Hintergrund ausgeführt wird), kann sich registrieren, um diese Aufgaben in der .__ auszuführen. Hintergrund. Sie aktivieren die Audiounterstützung im Abschnitt Hintergrundmodi der Registerkarte Capabilities in Ihrem Xcode-Projekt. (Sie können diese Unterstützung auch aktivieren, indem Sie den UIBackgroundModes-Schlüssel mit dem Audio-Wert in der Info.plist-Datei Ihrer App hinzufügen.) Apps, die Audio-Inhalte in .__ wiedergeben. Der Hintergrund muss hörbare Inhalte und keine Stille wiedergeben.
Apple-Referenz "Hintergrundaudio abspielen und aufzeichnen"
Sicherstellen, dass das Audiosignal fortgesetzt wird, wenn der Bildschirm gesperrt wird
Zum Aktivieren/Deaktivieren dieser Funktion fand ich Aktivieren und Deaktivieren Ihrer Audiositzung , ich habe es selbst nicht probiert, aber es sieht so aus, wie Sie es brauchen.
Sie müssen einige Änderungen in der Plist-Datei vornehmen.
d.h. 1) Stellen Sie den erforderlichen Hintergrundmodus auf App, um Audio abzuspielen
2) Die Anwendung wird im Hintergrund nicht auf NO gesetzt.
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
Dann müssen Sie diesen Code in AppDelegate schreiben
Jetzt können Sie problemlos Audio abspielen, während der Bildschirm des Telefons gesperrt ist oder im Hintergrund angezeigt wird.
Nehmen Sie die folgenden Änderungen in den xCode-Projekteinstellungen sowie im Code vor.
schritt 1) Wählen Sie Ihre Projektdatei im Navigator von Xcode aus. Schalten Sie dann im Bereich Capabilities den Unterabschnitt Background Modes ein. Nachdem Sie die Liste der Hintergrundmodi erhalten haben, aktivieren Sie das Kontrollkästchen Audio & Airplay.
schritt 2) Verwenden Sie den folgenden Swift-Code. Grundsätzlich müssen Sie die Audiositzung für Ihre App einstellen.
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
}
Diese Audiowiedergabesitzung gibt Ihre Anwendungswiedergabe wieder, auch wenn sich die App im Hintergrund befindet oder das Telefon stummgeschaltet ist oder das Gerät gesperrt ist.
Schauen Sie sich dieses Tutorial an. Es gibt einige Beispiele für Hintergrunddienste
Sie müssen einige Änderungen in der Plist-Datei vornehmen.
1) Stellen Sie den erforderlichen Hintergrundmodus auf App, um Audio abzuspielen
2) Die Anwendung wird im Hintergrund nicht auf NO gesetzt.
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)")
}
});