2015-09-10 20 views
10

Sto cercando di capire perché playSoundFileNamed non funziona dopo aver ricevuto due telefonate consecutive. In realtà funziona solo dopo aver ricevuto la prima telefonata. passaggi che riproducono sono:SKAction playSoundFileNamed non funziona dopo aver ricevuto due telefonate consecutive

  1. iniziare una partita
  2. Attendere una telefonata e andare a fondo
  3. chiamata
  4. telefono è finito (diminuita o interrotta da chiamante)
  5. Tornando al primo piano

Quindi, riprodurre il suono da tocca Inizio funziona ancora.

Quando ripeto i passaggi da sopra (il primo passaggio viene saltato), meccanismo dai tocchi. Began smette di funzionare. Non so perché sta succedendo questo ... Ecco il codice che può produrre comportamento descritto:

@interface GameScene() 

@property (nonatomic, strong) SKAction *sound; 
@end 

@implementation GameScene 

-(void)didMoveToView:(SKView *)view { 
    self.sound = [SKAction playSoundFileNamed:@"sound1.wav" waitForCompletion:NO]; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    /* Called when a touch begins */ 
    [self runAction:self.sound]; 
} 
@end 

So che ci sono alcune domande relative a questo su SO, ma date le risposte sono legate a soluzioni alternative. Non mi interessa la soluzione alternativa, ma piuttosto perché sta succedendo? È in qualche modo correlato a AVAudioSession? (probabilmente no) So che potrei usare AVAudioPlayer come soluzione alternativa, ma non sono ancora sicuro di quanto sia performante per la riproduzione di molti brevi suoni ...

+1

Ho avuto a che fare con questo un po 'di tempo fa. Non ho mai trovato una soluzione. Per me sarebbe solo una telefonata. Ma c'era una situazione peggiore che dovresti controllare anche tu. Stavo usando iAd e ogni volta che veniva presentato un annuncio che aveva un suono (come quello di annunci di giochi di guerra), anche questo avrebbe interrotto playSoundFileNamed: dal lavoro fino al rilancio dell'app. L'unica cosa che potevo fare era rimuovere le pubblicità dal mio gioco. Non potevo rischiare che l'esperienza dell'utente di avere tutti gli effetti sonori del gioco fallire se si fosse verificato un annuncio con audio. E dovevo solo sperare che gli utenti non ricevessero una chiamata. – Brad

risposta

2

Lo SKAction playSoundFileNamed è buggato in relazione all'app che passa tra sfondo e conoscenze acquisite. Questo è il motivo per cui stai riscontrando questo problema. Non sono sicuro se questo problema è stato corretto in iOS 9.

Per quanto riguarda una soluzione alternativa, hai dichiarato che non sei interessato ma ne includerò uno per il completamento. Usa AVAudioPlayer invece di SKAction. AVAP ha la capacità di fermarsi e iniziare (usando i suoi delegati) in base allo stato della tua app.

+1

Sì, playSoundFileNamed funziona con errori e probabilmente al momento di parlare non possiamo fare nulla per cambiarlo. Immagino di poter riempire un radar di questo. – Whirlwind

+0

Appena testato anche su iOS9. Non funziona. – Whirlwind

0

Questo potrebbe essere un problema con audio misto. Ho scoperto che l'attivazione dell'audio misto non interrompe più il motore audio di SpriteKit durante un'interruzione, la riproduzione di un video pubblicitario o lo sfondo di app.

try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)