Sto utilizzando uno SoundPool per riprodurre clip audio nella mia app. Tutto va bene, ma ho bisogno di sapere quando la riproduzione della clip è finita.Qual è il modo migliore per ottenere una durata del file audio in Android?
Al momento lo seguo nella mia app ottenendo la durata di ogni clip utilizzando un'istanza MediaPlayer. Funziona bene ma sembra inutile caricare ogni file due volte, solo per ottenere la durata. Potrei calcolare approssimativamente la durata conoscendo la lunghezza del file (disponibile da AssetFileDescriptor) ma dovrei comunque conoscere la frequenza di campionamento e il numero di canali.
Vedo due possibili soluzioni a questo problema:
- Capire quando un clip è finito di giocare (non sembra essere possibile con Soundclip).
- Avere una classe che può caricare solo l'intestazione di un file audio e darmi la frequenza di campionamento/numero di canali (e, idealmente, il conteggio dei campioni per ottenere la durata esatta).
Qualche suggerimento?
Grazie, Max
Il codice che sto utilizzando in questo momento (funziona bene, ma è piuttosto pesante per lo scopo):
String[] fileNames = ...
MediaPlayer mp = new MediaPlayer();
for (String fileName : fileNames) {
AssetFileDescriptor d = context.getAssets().openFd(fileName);
mp.reset();
mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
mp.prepare();
int duration = mp.getDuration();
// ...
}
Una nota a parte, la questione è già stata asked ma non ha ottenuto risposte.
avete considerato un 'onCompletitionListener'? https://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html#onCompletion%28android.media.MediaPlayer%29 – sschrass
@SatelliteSD semplicemente non funziona (non viene mai chiamato) su nessuno dei dispositivi Io ho. Anche se viene chiamato su alcune versioni del sistema operativo/su alcuni dispositivi, è inaffidabile e quindi inutile. – Gilead
hai doppiato il comando che 'setOnCompletitionListner' viene chiamato dopo' .start() '? – sschrass