2010-11-12 11 views
16

Mam małe (200kb) mp3 w folderze res/raw mojej aplikacji dla systemu Android. Próbuję uruchomić go w emulatorze z Eclipse. Jest rozpoznawany jako zasób w pliku R, ale kiedy próbuję przygotować/uruchomić, moja aktywność się zawiesza! Czy coś jeszcze musiałem zmienić, być może w manifeście?Jak odtwarzać pliki mp3 w folderze res/raw w mojej aplikacji na Androida?

 
MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.mysoundfile); 

try { 
mPlayer.prepare(); 
mPlayer.start(); 
} catch (IOException e) { 
// handle this later 
} 
+0

Tutaj umieść wyjście logcat, w przeciwnym razie nie rozpoznajemy błędu. –

Odpowiedz

54

Po rozpoczęciu działania, tj. Na onCreate, należy wpisać następujący kod.

public void onCreate(Bundle savedInstanceState) { 


     super.onCreate(savedInstanceState);   
     setContentView(R.layout.main); 

     MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.mysoundfile); 
     mPlayer.start(); 

    } 

Po zatrzymaniu czynności, tj. W ondestroy, należy wpisać następujący kod.

public void onDestroy() { 

    mPlayer.stop(); 
    super.onDestroy(); 

} 

Nadzieja to pomaga :)

+0

Możesz również sprawdzić tę stronę internetową w celu uzyskania bardziej szczegółowego samouczka http://marakana.com/forums/android/examples/59.html –

+0

udało się! haha najwyraźniej nie potrzebowałem mPlayer.prepare(), dziękuję :) – damonkashu

+0

:) nie ma problemu bro –

5

Będziesz prawdopodobnie wolą używać klasy SoundPool. Zmniejsza opóźnienia, gdy przychodzi czas na odtwarzanie dźwięku, i oferuje inne elementy, takie jak możliwość nadawania priorytetu dźwiękom, gdy jest ich zbyt wiele do grania na raz.

Od docs:

SoundPool to zbiór próbek, które można załadować do pamięci z zasobu wewnątrz APK lub z pliku w systemie plików. Biblioteka SoundPool wykorzystuje usługę MediaPlayer do dekodowania dźwięku do nieprzetworzonego 16-bitowego strumienia PCM mono lub stereo. Umożliwia to wysyłanie aplikacji ze skompresowanymi strumieniami bez konieczności obciążania procesora i opóźnienia dekompresji podczas odtwarzania.

Na przykład:

/** 
* How many sounds can be played at once. 
*/ 
private static final int MAX_SOUND_POOL_STREAMS = 4; 

/** 
* Modify this as part of your own priority scheme. Higher numbers mean higher 
* priority. If you don't care, it's okay to use the same priority for every 
* sound. 
*/ 
private static final int NORMAL_PRIORITY = 10; 

private int mySoundId; 

@Override 
public void setupContent() { 
    this.soundPool = new SoundPool(MAX_SOUND_POOL_STREAMS, 
      AudioManager.STREAM_MUSIC, 100); 
    this.mySoundId = this.soundPool.load(this.getApplicationContext(), 
      R.raw.mySound, 1); 
} 

@Override 
private void playMySound() { 
    this.soundPool.play(this.mySoundId, 1, 1, NORMAL_PRIORITY, 0, 1); 
} 
1

jest to metoda statyczna używam w moich projektach. dodam go do mojej klasy Utils:

public static void playSound(final Context context, final SoundType type) 
    { 

      new Thread(new Runnable() 
      { 

       @Override 
       public void run() 
       { 
        MediaPlayer mediaPlayer = new MediaPlayer(); 
        int resId = -1; 
        switch (type) 
        { 
        case INCOMING_NOTIFICATION: 
         resId=R.raw.noti_sound; 
         break; 
        case SEND_BETTING_SLIP: 
         resId=R.raw.slip_sent; 
         break; 
        case TRIVIA_RIGHT_ANSWER: 
         resId=R.raw.game_bonus; 
         break; 
        case TRIVIA_WRONG_ANSWER: 
         resId=R.raw.whistle_referee_trivia_bad_answer; 
         break; 
        } 

        if (resId != -1) 
        { 
         mediaPlayer = MediaPlayer.create(context, resId); 
         mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
         mediaPlayer.setLooping(false); 
         mediaPlayer.start(); 

         while (mediaPlayer.isPlaying() == true) 
         { 
         } 
        } 
       } 
      }).start(); 

     } 
} 

teraz defind Enum (SoundType) i umieszczone pliki mp3 w folderze surowego pod folderze res.

Powiązane problemy