Ho problemi con la classe Soundpool. Qui si va:Errore SoundPool: non sono disponibili più nomi di traccia
nel mio gioco app (musica app btw) Ho bisogno di riprodurre almeno 32 suoni brevi, allo stesso tempo, così mi dichiaro la mia soundpool così:
private SoundPool sp;
sp = new SoundPool(128, AudioManager.STREAM_MUSIC, 0);
Dopo di che carico I tutti i suoni MP3 necessari, circa 80 suoni da 55 KB ciascuno. Non ho problemi a caricare tutti i suoni, ma è lento! Beh, non è il problema. Il vero problema è quando gioco circa 20 suoni, allo stesso tempo, c'è un errore nel mio ceppo:
ERROR/AudioFlinger(59): no more track names available
ERROR/AudioTrack(26349): AudioFlinger could not create track, status: -12
ERROR/SoundPool(26349): Error creating AudioTrack
Dopo che ogni suono che provo a giocare tiri lo stesso errore, e nessun suono può essere giocato. Neanche i suoni di un'altra attività/soundpool. Non ho idea di cosa sta succedendo o come risolverlo! Dovrei cambiare il formato dei file audio? Devo liberare memoria o qualcosa dopo aver riprodotto un suono?
(sto testando su un Galaxy S I9000 di Samsung, 2.3.3 del sistema operativo. L'applicazione è 2.1)
Forse è necessario implementare SoundPool.OnLoadCompleteListener? – Codeman
per chiamare release() per ciascuno degli AudioTracks? – Codeman
Assicurati che la modalità loop non sia abilitata, nessuna traccia sia impostata per mettere in pausa e ogni mp3 è davvero così breve come pensi (nessun silenzio alla fine). Poiché è disponibile una quantità limitata di tracce audio, è necessario mantenere bassa la quantità di tracce audio in esecuzione. Forse ci sono meno di 32 tracce disponibili, quindi non puoi suonare tanti suoni allo stesso tempo. Inoltre alcune implementazioni sono buggy e potrebbero bloccarsi su alcune tracce (magari dipendenti da un file mp3 o qualcosa di brutto), quindi le tracce disponibili vengono utilizzate abbastanza velocemente. Se l'applicazione si blocca, a volte le tracce non vengono liberate, quindi nessun suono. – dronus