2011-12-05 19 views
12

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)

+0

Forse è necessario implementare SoundPool.OnLoadCompleteListener? – Codeman

+0

per chiamare release() per ciascuno degli AudioTracks? – Codeman

+0

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

risposta

1

Un paio di pensieri qui. Uno: il primo parametro del costruttore SoundPool non è il numero di suoni che vuoi caricare, è il numero massimo di stream simultanei che stai riproducendo. In secondo luogo, SoundPool ha una memoria limitata per i suoni, circa 1 MB. Quindi non sarei affatto sorpreso se colpissi qualche limite non documentato al numero di tracce che puoi caricare in una volta. Notare che 80 suoni per 55k per suono sono decisamente superiori a 1 MB. E quel limite è per dopo che gli mp3 sono stati decompressi in dati audio all'interno di SoundPool.

4

vedere this (in android group)

Per l'audio, c'è un limite rigido di 32 oggetti AudioTrack attivi per dispositivo (non per app: è necessario condividere quelle 32 con resto del sistema),

Problemi correlati