it-swarm.com.de

Wie kann ich Hintergrundmusik abspielen, wenn das iOS-Gerät gesperrt ist oder in einer anderen Anwendung?

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:

  • das Gerät ist gesperrt
  • der Benutzer verwendet eine andere Anwendung

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?

22
gluon

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.

34
DanSkeel

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.

29
dhaval rupani

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.

2

Schauen Sie sich dieses Tutorial an. Es gibt einige Beispiele für Hintergrunddienste

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

1
hmlasnk

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)")
                    }
            });
0
Varun Naharia