2016-06-24 16 views
1

Ich hatte Schwierigkeiten mit einer einfachen Aufgabe: Spielen Sie eine Audiodatei im Hintergrund, wenn eine SpriteKit-Szene geladen wird.AVAudioPlayer funktioniert nicht auf SpriteKit Szene wird geladen

Ich habe eine Audiodatei mit dem Namen "Test Song.wav" in mein Projekt kopiert und es wurde auch in meinen Assets gefunden, wenn ich unter "Build Phases"> "Copy Bundle Resources" suche (was this post vorgeschlagen wurde))

Mein Code kompiliert gerade gut, und mein ring/silent switch wurde richtig zum Klingeln gedreht, aber das Audio spielte nicht, als die Szene geladen wurde.

Ich verwende

  • Xcode Version 8.0 beta
  • iPhone 6S Plus-iOS läuft 10 Beta 1

Hier war mein gebrochener Code:

import AVFoundation 

class GameScene: SKScene { 

    override func didMove(to view: SKView) { 

     if let path = Bundle.main().pathForResource("Test Song", ofType: "wav") { 

     let filePath = NSURL(fileURLWithPath:path) 

     let songPlayer = try! AVAudioPlayer.init(contentsOf: filePath as URL) 

     songPlayer.numberOfLoops = 0 

     songPlayer.prepareToPlay() 

     songPlayer.play() 

     } 
    } 
} 

Hinweis: Ich habe erfahren, dass die Methode init() von AVAudioPlayer in Swift 3.0 den NSError-Parameter nicht mehr akzeptierte, also dieser Kabeljau e DOES NOT Kompilierung:

var error:NSError? 
audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error) 
+1

Hallo, ich Ihre Mäßigung Bemühungen zu schätzen wissen, und Sie sind technisch korrekt, dass dies ein Duplikat ist. Ich versuche nicht zu argumentieren: Ich bin wirklich neugierig, wie diese Seite funktioniert. In diesem Sinne: Ich kann nicht anders, als mich zu fragen, warum mein Beitrag nicht für sich allein stehen kann, ohne downvotiert zu werden, weil er nicht nützlich ist. Ich habe es zu einem "Q & A" -Stil gemacht, so dass niemand Zeit damit verschwendet hat, es zu beantworten/zu versuchen, es ist in Swift 3.0 und für iOS 10 geschrieben, und ich zitiere alle meine Quellen. Wenn ich nicht wüsste, mit welchem ​​Beitrag Sie verbunden sind, wie sollte ich wissen, dass ich einen Beitrag zu diesem Beitrag beitragen soll, anstatt einen eigenen Post zu schreiben? –

Antwort

1

Dank this website ich erfuhr, dass mein Problem der Umfang meines AVAudioPlayer Objekt war.

Hier ist der Arbeitscode:

class GameScene: SKScene { 

    var songPlayer:AVAudioPlayer? 

    override func didMove(to view: SKView) { 

     if let path = Bundle.main().pathForResource("Test Song", ofType: "wav") { 

      let filePath = NSURL(fileURLWithPath:path) 

      songPlayer = try! AVAudioPlayer.init(contentsOf: filePath as URL) 

      songPlayer?.numberOfLoops = 0 //This line is not required if you want continuous looping music 

      songPlayer?.prepareToPlay() 

      songPlayer?.play() 

     } 
    } 
} 
+0

Über welche Website sprichst du? Der Link fehlt in Ihrer Antwort. –