2012-08-15 4 views
0

J'ai donc essayé de faire une application simple effet sonore pour Android. Voici le code correspondant:Android MediaPlayer ne se prépare pas. Erreur (1, -4)

public static final String LOG_TAG = "BCA"; 

public MediaPlayer mp; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
     Log.v(LOG_TAG, "creating"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_list); 

    mp = new MediaPlayer(); 
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     Log.v(LOG_TAG, "set stream type"); 
    playSound(); 
} 

public void playSound() 
{ 
    try { 
     mp.setDataSource("R.raw.sound1"); 
      Log.v(LOG_TAG, "set data source"); 
     mp.setOnPreparedListener(this); 
     mp.setOnErrorListener(this); 
     mp.prepareAsync(); 
      Log.v(LOG_TAG, "preparing"); 
    } 
    catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } 
    catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public void onPrepared(MediaPlayer mediaPlayer) 
{ 
       Log.v(LOG_TAG, "finished preparing; starting"); 
    mp.start(); 
     Log.v(LOG_TAG, "started music"); 
} 

public boolean onError(MediaPlayer mp, int e, int f) 
{ 
     Log.v(LOG_TAG, "There was an error"); 
     Log.v(LOG_TAG, mp + " " + e + " " + f); 
    mp.reset(); 
    return true; 
} 

Fondamentalement, il obtient à l'ensemble balise « set source de données » mais ne finit jamais préparer. le code d'erreur est (1, 4) le 1 étant apparemment une erreur inconnue. Je l'ai utilisé plusieurs fichiers sonores, l'un dont je connais les œuvres que le joueur fonctionne quand juste en utilisant le mp.create (etc ...)

Je ne sais pas ce qui se passe ici

Merci d'avance J'ai donc suivi l'exemple du lien qu'Alexis Cartier a donné et maintenant il n'y a pas d'erreur. Cependant, FileInputStream ne finit jamais. Le programme semble juste caler. Voici le nouveau code:

public void playMusic() 
{ 
    File file = new File("R.raw.music1"); 
     Log.v(LOG_TAG, "set file"); 
    try { 
      Log.v(LOG_TAG, "in try block"); 
     FileInputStream is = new FileInputStream(file); 
      Log.v(LOG_TAG, "set file input stream"); 
     mp.setDataSource(is.getFD()); 
      Log.v(LOG_TAG, "set data source"); 
     mp.setOnPreparedListener(this); 
     mp.setOnErrorListener(this); 
      Log.v(LOG_TAG, "set on prepared/error listeners"); 
     mp.prepareAsync(); 
      Log.v(LOG_TAG, "preparing"); 
    } 

Répondre

0

Voir la réponse de cette question de modifier votre code: MediaPlayer.setDataSource causes IOException for valid file

Mais vous ne pouvez pas faire mp.setDataSource("R.raw.sound1");

+0

Ok merci! C'est logique. Je semble avoir un autre problème maintenant. Aucune erreur, mais le programme ne finit jamais de définir le FileInputStream. Voici le nouveau code: – user1600704

+0

Mais quel type de son voulez-vous jouer? Si son court-circuit sonne, il vaut mieux utiliser la classe SoundPool: http://developer.android.com/reference/android/media/SoundPool.html –

+0

Certains seront plus longs ... jusqu'à environ 20-30 sec. Je peux obtenir un message de log avant que la ligne 'FileInputStream is = new FileInputStream (file);' mais elle ne finit jamais. Le fichier est juste le fichier R.raw.music1 – user1600704

Questions connexes