2014-10-22 8 views
5

Ho un'app che riproduce un file audio ogni volta che lo schermo viene toccato. Per qualche ragione, l'applicazione si blocca ogni tanto un po 'con il seguente errore:La risorsa audio non può essere caricata Swift SKAction

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

In caso di necessità, ecco come io gioco il file ogni volta che lo schermo viene toccato:

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

Questo non accade molto spesso, forse 1 su 10 correzioni dell'app. Il più delle volte tutto funziona come previsto. Vorrei sapere cosa sto facendo per causare l'incidente ma non ne ho idea! Sto solo toccando via apparentemente non diverso rispetto alle volte in cui non si blocca. Poi tutto ad un tratto ho questo problema ...

+0

Potrebbe precaricare l'azione del suono in un aiuto costante globale? – Okapi

+0

Vi preghiamo di darci un link a "Risorsa tick.mp3', quindi proverò a risolverlo. (Su DropBox ad esempio) –

+0

@ kartboy55 Anche il registro degli arresti anomali sarebbe utile ... Qual è il messaggio di errore in realtà? – Whirlwind

risposta

3

Se si gioca il suono tramite una funzione playSound, funzionerà

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

PlaySound:

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

Questo è lo stesso –

+5

@NikitaZernov No questa non è la stessa cosa quindi non sono sicuro del motivo per cui hai votato. Pre-caricando il file audio e poi riproducendolo attraverso una funzione 'playSound' si evita il crash. Domande simili sono state poste molte volte prima e questa è sempre stata la soluzione. Questo è pensato per essere un bug con swift. So che sembra lo stesso, ma non fare solo supposizioni perché in questo caso ti sbagli. –

+1

Grazie Reece Kenney! La tua decisione mi ha aiutato bene! –

4

Prima di tutto, sembra che tu stia usando il file mp3 per riprodurre (brevi) effetti sonori. Quando si utilizza mp3 l'audio è compresso. In memoria, avrà dimensioni diverse e più grandi. Inoltre c'è una penalizzazione delle prestazioni di decodifica (la decodifica richiede tempo della CPU). La cosa più importante, e la ragione per cui sto parlando file mp3 possono essere trovati in docs:

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.

Come si può vedere, il problema è che un solo file mp3 alla volta può essere giocato utilizzando hardware. Se suoni più di un mp3 alla volta, saranno decodificati con il software e questo è lento.

Quindi, ti consiglio di utilizzare i file .wav o .caf per riprodurre effetti sonori. l'mp3 sarebbe probabilmente buono per la musica di sottofondo.

Circa problema crash:

  • tenta di utilizzare .wav o file .caf invece di .mp3
  • cercare di contenere un riferimento forte al SKAction e riutilizzarlo come suggerito di Reece Kenney.
Problemi correlati