2012-11-23 23 views
19

Ho bisogno di riprodurre più file audio, con durata diversa, da 5 a 30 secondi. E voglio impostare il volume indipendentemente per il canale destro/sinistro e anche per applicare effetti, come il riverbero o la distorsione. Quindi, quale API dovrei usare?AudioTrack, SoundPool o MediaPlayer Quale dovrei usare?

Inoltre, non riesco a trovare troppo doc sull'API AudioTrack. Sai dove posso trovare esempi? Thx.

risposta

2

MediaPlayer non supporta l'impostazione del volume per i canali multipli.

Penso che SoundPool sia l'unica cosa adatta alle tue esigenze qui.

EDIT: Yup, è necessario un Soundpool, leggere questo: http://www.wiseandroid.com/post/2010/07/13/Intro-to-the-three-Android-Audio-APIs.aspx

+0

Ok, grazie proverò con soundpool. – Fede

+0

MediaPlayer supporta il volume di impostazione per i canali destro/sinistro separatamente. Questo è un buon esempio qui: https: //www.codota.com/android/methods/android.media.MediaPlayer/setVolume in più puoi fare riferimento alla documentazione qui: https://developer.android.com/ di riferimento/android/media/MediaPlayer.html # setVolume (float, float) –

39

piscina suono è in realtà mixer audio. Può riprodurre brevi clip solo se sono codificati come ogg o mp3 o non sono compressi. Il pool audio li archivia sempre nella memoria non compressa e devi sapere che il limite è 1 MB. Se la tua clip è troppo grande in memoria, il pool audio si bloccherà e troverai il seguente errore: "AudioFlinger non è stato in grado di creare lo stato: -12" Il lettore multimediale riproduce lo stream e lo decodifica in tempo reale. Quindi può riprodurre clip molto più lunghi, ma richiede potenza del processore per questo.

Quindi il lettore multimediale è migliore per la musica di sottofondo, mentre il pool audio è meglio per gli effetti audio brevi (clic, esplosioni, loop audio). Inoltre, la piscina sonora può riprodurre più clip contemporaneamente e ha il controllo del volume e della velocità. Inoltre può giocare a loop.

Una nota: non è possibile riprodurre la musica dal pool di suoni se la clip non è completamente caricata e decodificata. Quindi devi usare OnLoadCompleteListener (Android 10 o successivo) per controllarlo. Se si tenta di riprodurre il suono prima che sia decodificato, il pool audio sarà disattivato.

Il lettore multimediale non soffre di questi problemi.

4

Oltre a ciò che suggerivano le altre risposte, una differenza tra MediaPlayer e SoundPool è che in MediaPlayer non è possibile riprodurre una clip audio quando è già in esecuzione (questa funzione potrebbe essere utile soprattutto nei giochi). MediaPlayer ha bisogno che la clip finisca completamente prima che possa essere riprodotta di nuovo. Penso che le informazioni siano fornite nel sito web ufficiale.

Tuttavia, SoundPool non ha questo problema e ho notato che SoundPool riproduce l'audio proprio quando viene chiamato (a volte ho notato un leggero ritardo quando ho usato MediaPlayer).

Penso che sia (parte) il motivo per cui le persone dicono che SoundPool è migliore per suoni brevi come nei giochi. Spero che questo aiuti :)

Problemi correlati