Autore Topic: Errore legato a riproduzione di suoni  (Letto 774 volte)

Offline Givabon

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Errore legato a riproduzione di suoni
« il: 26 Marzo 2012, 19:27:19 CEST »
0
Salve a tutti, sono nuovo e novizio di android. Per cominciare sto realizzando una semplice app che ripropone il famoso giochino dell'impiccato. In quest'ottica stavo cercando di riprodurre piccoli mp3 in concomitanza di una lettera assente/presente o di una vittoria/sconfitta.
In realtà ci sono riuscito bene, ma ogni tanto la app crasha e dal logcat mi sembra di capire che il problema è legato alla riproduzione dei suoni (forse in particolare dal settaggio del volume).
In basso il LOGCAT... come potete vedere oltre a darmi dei warning legati a mediaplayer che non capisco, ogni tanto va in crash quando richiamo la funzione di riproduzione suoni. In particolare, se leggo bene, le righe imputate sono la 210 e la 211.
Sotto il logcat c'è il codice.

Codice: [Seleziona]
03-26 18:42:55.919: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:42:55.939: I/MediaPlayer(15789): Info (1,44)
03-26 18:42:56.214: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:42:56.249: I/MediaPlayer(15789): Info (1,44)
03-26 18:42:56.714: D/szipinf(15789): Initializing inflate state
03-26 18:42:56.739: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:42:56.749: I/MediaPlayer(15789): Info (1,44)
03-26 18:42:57.744: D/szipinf(15789): Initializing inflate state
03-26 18:42:57.824: D/skia(15789): purging 195K from font cache [23 entries]
03-26 18:42:58.184: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:42:58.209: I/MediaPlayer(15789): Info (1,44)
03-26 18:42:58.704: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:42:58.729: I/MediaPlayer(15789): Info (1,44)
03-26 18:42:59.479: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:42:59.499: I/MediaPlayer(15789): Info (1,44)
03-26 18:42:59.989: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:43:00.044: I/MediaPlayer(15789): Info (1,44)
03-26 18:43:00.374: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:43:00.439: I/MediaPlayer(15789): Info (1,44)
03-26 18:43:00.769: W/MediaPlayer(15789): info/warning (1, 44)
03-26 18:43:00.844: I/MediaPlayer(15789): Info (1,44)
03-26 18:43:01.244: E/MediaPlayer(15789): Unable to to create media player
03-26 18:43:01.254: D/MediaPlayer(15789): create failed:
03-26 18:43:01.254: D/MediaPlayer(15789): java.io.IOException: setDataSourceFD failed.: status=0x80000000
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.media.MediaPlayer.setDataSource(Native Method)
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.media.MediaPlayer.create(MediaPlayer.java:695)
03-26 18:43:01.254: D/MediaPlayer(15789):         at APPeal.Impiccato.Gioca.playAudio(Gioca.java:210)
03-26 18:43:01.254: D/MediaPlayer(15789):         at APPeal.Impiccato.Gioca.cliccato(Gioca.java:138)
03-26 18:43:01.254: D/MediaPlayer(15789):         at java.lang.reflect.Method.invokeNative(Native Method)
03-26 18:43:01.254: D/MediaPlayer(15789):         at java.lang.reflect.Method.invoke(Method.java:507)
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.view.View$1.onClick(View.java:2149)
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.view.View.performClick(View.java:2538)
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.view.View$PerformClick.run(View.java:9152)
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.os.Handler.handleCallback(Handler.java:587)
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.os.Looper.loop(Looper.java:130)
03-26 18:43:01.254: D/MediaPlayer(15789):         at android.app.ActivityThread.main(ActivityThread.java:3691)
03-26 18:43:01.254: D/MediaPlayer(15789):         at java.lang.reflect.Method.invokeNative(Native Method)
03-26 18:43:01.254: D/MediaPlayer(15789):         at java.lang.reflect.Method.invoke(Method.java:507)
03-26 18:43:01.254: D/MediaPlayer(15789):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
03-26 18:43:01.254: D/MediaPlayer(15789):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
03-26 18:43:01.254: D/MediaPlayer(15789):         at dalvik.system.NativeStart.main(Native Method)
03-26 18:43:01.259: D/AndroidRuntime(15789): Shutting down VM
03-26 18:43:01.259: W/dalvikvm(15789): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
03-26 18:43:01.274: E/AndroidRuntime(15789): FATAL EXCEPTION: main
03-26 18:43:01.274: E/AndroidRuntime(15789): java.lang.IllegalStateException: Could not execute method of the activity
03-26 18:43:01.274: E/AndroidRuntime(15789):         at android.view.View$1.onClick(View.java:2154)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at android.view.View.performClick(View.java:2538)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at android.view.View$PerformClick.run(View.java:9152)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at android.os.Handler.handleCallback(Handler.java:587)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at android.os.Looper.loop(Looper.java:130)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at android.app.ActivityThread.main(ActivityThread.java:3691)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at java.lang.reflect.Method.invokeNative(Native Method)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at java.lang.reflect.Method.invoke(Method.java:507)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at dalvik.system.NativeStart.main(Native Method)
03-26 18:43:01.274: E/AndroidRuntime(15789): Caused by: java.lang.reflect.InvocationTargetException
03-26 18:43:01.274: E/AndroidRuntime(15789):         at java.lang.reflect.Method.invokeNative(Native Method)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at java.lang.reflect.Method.invoke(Method.java:507)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at android.view.View$1.onClick(View.java:2149)
03-26 18:43:01.274: E/AndroidRuntime(15789):         ... 11 more
03-26 18:43:01.274: E/AndroidRuntime(15789): Caused by: java.lang.NullPointerException
03-26 18:43:01.274: E/AndroidRuntime(15789):         at APPeal.Impiccato.Gioca.playAudio(Gioca.java:211)
03-26 18:43:01.274: E/AndroidRuntime(15789):         at APPeal.Impiccato.Gioca.cliccato(Gioca.java:138)
03-26 18:43:01.274: E/AndroidRuntime(15789):         ... 14 more
03-26 18:44:14.589: I/Process(15789): Sending signal. PID: 15789 SIG: 9

Questa è la funzione che riproduce l'audio (il più semplice possibile). notare la 210 e la 211

       
Codice (Java): [Seleziona]
private void playAudio(int id) {
               
                        mMediaPlayer = MediaPlayer.create(this, id); //riga 210
                        mMediaPlayer.setVolume(f, f);  //riga 211
                        mMediaPlayer.start();

        }

Questa funzione è richiamata così:
Codice (Java): [Seleziona]
playAudio(R.raw.sbagliato);
I crash avvengono solo sporadicamente, però sono comunque troppo numerosi.
Sapreste dirmi come risolvere il problema? Vi servono altre info?
Grazie a tutti!!

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:Errore legato a riproduzione di suoni
« Risposta #1 il: 27 Marzo 2012, 08:41:38 CEST »
0
Prova ad utilizzare SoundPool invece di MediaPlayer. Anch'io feci un'applicazione che riproduceva un semplice beep alla pressione di un bottone e con MediaPlayer crashava solitamente dopo 7 volte che ci cliccavo mentre con SoundPool non ebbi problemi.

Offline Givabon

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Errore legato a riproduzione di suoni
« Risposta #2 il: 27 Marzo 2012, 11:12:31 CEST »
0
Ho cercato un po di info su soundpool, ma da quel che leggo anche quella classe non è esente da bug...
comunque proverò a fare un tentativo.

Mi chiedevo anche (da novello che sono) come dovrei usare il costrutto try catch per evitare l'ostacolo e scongiurare eventuali crash dell'applicazione. C'ho provato ma senza successo. Potete suggerirmi qualche riga di codice?

Offline Givabon

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Errore legato a riproduzione di suoni
« Risposta #3 il: 30 Marzo 2012, 09:28:38 CEST »
0
Alla fine ho optato per l'utilizzo di soundpool come mi hai suggerito, e al momento mi sembra funzioni meglio di mediaplayer! quindi bene così...
 
Non metto Risolto perchè in realtà non si è capito cosa impedisse la riproduzione dei suoni con mediaplayer.

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:Errore legato a riproduzione di suoni
« Risposta #4 il: 30 Marzo 2012, 10:45:08 CEST »
0
Mediaplayer è usato per la riproduzione di file audio più lunghi o di grandi dimensioni, per creare ad esempio un player musicale mentre soundpool è utilizzato per piccole clip audio e quindi più adatto per effetti sonori nelle applicazioni o nei giochi; pertanto al di là del topic messo come risolto o non risolto, la motivazione del perchè Mediaplayer dia dei problemi non la conosco di preciso, sarà un problema di come gestisce i file in memoria ma ma tutto si riconduce ad un utilizzo sbagliato della funzione, è come voler schiacciare una mosca con uno schiacciasassi invece di usare lo schiacciamosche che è specifico allo scopo (non so se ho reso l'idea).
Poi non voglio peccare di presunzione perchè anch'io sono nuovo del mondo Android e conoscevo in parte questo argomento del player perchè c'ho un po' sbattuto la testa per un'applicazione che ho fatto di prova, però il concetto di strumento giusto per l'utilizzo giusto è sempre consigliato per evitare imprevisti effetti collaterali che apparentemente potrebbero sembrare assenti.