2014-10-22 2 views
5

Ich habe eine App, die eine Sounddatei jedes Mal spielt, wenn der Bildschirm berührt wird. Aus irgendeinem Grund, stürzt die App alle hin und wieder mit dem folgenden Fehler:Sound-Ressource kann nicht geladen werden Swift SKAction

reason: 'Resource tick.mp3 can not be loaded' 

Im Fall, dass Sie es, hier ist, wie ich die Datei jedes Mal, wenn der Bildschirm spielen angezapft:

runAction(SKAction.playSoundFileNamed("tick.mp3", waitForCompletion: false)) 

Dies passiert nicht sehr oft, vielleicht 1 in 10 Läufe der App. Die meiste Zeit läuft alles wie erwartet. Ich wünschte, ich wüsste, was ich mache, um den Absturz zu verursachen, aber ich habe keine Ahnung! Ich tippe einfach weg, scheinbar nicht anders als die Zeiten, in denen es nicht abstürzt. Dann ganz plötzlich ich dieses Problem bekommen ...

+0

Könnte die Sound-Aktion vorab in eine globale Konstanten-Hilfe geladen werden? – Okapi

+0

Bitte geben Sie einen Link zu 'Resource tick.mp3', damit ich versuchen werde, es zu lösen. (Auf DropBox zum Beispiel) –

+0

@ kartboy55 Auch Crash-Log wäre nützlich ... Was ist die Fehlermeldung eigentlich? – Whirlwind

Antwort

3

Wenn Sie den Ton über eine playSound Funktion spielen, wird es funktionieren

var soundFile = SKAction.playSoundFileNamed("bark.wav", waitForCompletion: false) 
playSound(soundFile) 

playsound:

func playSound(soundVariable : SKAction) 
{ 
    runAction(soundVariable) 
} 
+0

Dies ist das gleiche –

+5

@NikitaZernov Nein, das ist nicht das Gleiche, also bin ich mir nicht sicher, warum Sie gewählt haben. Das Vorladen der Audiodatei und das Abspielen über eine 'playSound'-Funktion verhindert einen Absturz. Ähnliche Fragen wurden schon oft gestellt und dies war schon immer die Lösung. Dies wird als Fehler bei swift angesehen. Ich weiß, es sieht genauso aus, aber mache nicht nur Vermutungen, denn in diesem Fall liegst du falsch. –

+1

Danke Reece Kenney! Deine Entscheidung hat mir gut geholfen! –

4

Zunächst einmal ist es, sieht so aus, als ob du eine mp3 Datei benutzt um (kurze) Soundeffekte zu spielen. Bei der Verwendung von MP3 wird das Audio komprimiert. In Erinnerung wird es eine andere, größere Größe haben. Außerdem gibt es einen Nachteil bei der Decodierungsleistung (Decodierung benötigt CPU-Zeit). Das Wichtigste, und der Grund, warum ich über MP3-Dateien spräche in docs finden:

When using hardware-assisted decoding, the device can play only a single instance of one of the supported formats at a time. For example, if you are playing a stereo MP3 sound using the hardware codec, a second simultaneous MP3 sound will use software decoding. Similarly, you cannot simultaneously play an AAC and an ALAC sound using hardware. If the iPod application is playing an AAC or MP3 sound in the background, it has claimed the hardware codec; your application then plays AAC, ALAC, and MP3 audio using software decoding.

Wie Sie sehen können, ist das Problem, dass es nur eine MP3-Datei zu einem Zeitpunkt unter Verwendung von Hardware abgespielt werden kann. Wenn Sie mehr als eine MP3 gleichzeitig abspielen, werden sie mit Software dekodiert und das ist langsam.

Also, ich würde Ihnen empfehlen, .wav oder .caf-Dateien zu verwenden, um Soundeffekte zu spielen. mp3 wäre wahrscheinlich gut für Hintergrundmusik.

über Absturz Ausgabe:

  • try .wav oder .caf Dateien verwenden anstelle von .mp3
  • versuchen, eine starken Referenz zum SKAction zu halten und sie wieder verwenden, wie vorgeschlagen von Reece Kenney.