1. Tom299, 03.01.2012 #1
    Tom299

    Tom299 Threadstarter Android-Experte

    Hi,

    in meiner App hab ich ein paar Soundeffekte vorgesehen, die z.B. beim drücken eines Buttons oder Menüs etc. abgespielt werden sollen.

    Jetzt habe ich hier Media Playback | Android Developers gelesen, daß der Media Player die bevorzugte Klasse für das Abspielen von Sounds ist (This class is the primary API for playing sound and video).

    Mein Problem ist nun, daß ich nicht weiß, wie ich mehrere Sounds in den MediaPlayer reinbekomme:

    Code:
            final MediaPlayer mediaPlayerHit;
            mediaPlayerHit = MediaPlayer.create(FindItCloneActivity.this, R.raw.collision8bit);
            mediaPlayerHit.setLooping(false);
            
            final MediaPlayer mediaPlayerFailure;
            mediaPlayerFailure = MediaPlayer.create(FindItCloneActivity.this, R.raw.robot_noise);
            mediaPlayerFailure.setLooping(false);
    
    Bei .create kann man ja nur 1 resource angeben, bei meinen Tests mußte ich also für 2 Sounds 2 MediaPlayer benutzen, was mir doch etwas spanisch vorkommt. Ich finde in der API aber irgendwie nichts, wie ich mehrere Sounds hinzufügen könnte? Oder ist das gar nicht möglich?

    Zur Zeit benutze ich daher die SoundPool-Klasse:
    Code:
    private SoundPool soundPool;
    .
    .
    .
    		soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
    		soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
    			@Override
    			public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
    				loaded = true;
    			}
    		});
    		
    		soundHit = soundPool.load(this, R.raw.bottle, 1);
    		soundFail = soundPool.load(this, R.raw.beep, 1);
    
    .
    .
    .
        private void playSound(int soundID) {
    		if (loaded) {
    			soundPool.play(soundID, volume, volume, 1, 0, 1f);
    		}    	
        }
    
    Das funktioniert auch soweit einwandfrei, aber wenn der MediaPlayer der bevorzugte Player ist, würd ich den schon gerne verwenden. Kann mir jemand weiterhelfen oder sollte ich einfach beim SoundPool bleiben?


    Grüße,
    Tom
     
  2. funcoder, 03.01.2012 #2
    funcoder

    funcoder Erfahrener Benutzer

    Wenn es dir primär um kurze Soundeffekte geht solltest du beim Soundpool bleiben. Die Sound-Files werden dabei im Speicher gehalten, was gerade dem häufigen abspielen von kurzen Sounds ( < 10 sek) entgegen kommt.

    Der MediaPlayer ist vorzugweise für große Dateien/Streams gedacht. Dieser hält die Files nicht im Speicher sondern streamt diese jeweils zur Laufzeit.
    Das hat den Vorteil das es egal wie groß die Datei ist es eigentlich niemals zu einer OutOfMemory-Exception kommen kann. Das allerdings auf Kosten einer höheren CPU-Belastung beim abspielen der Datei.

    In deinem Fall würde ich also, sofern es dir um Menü/Button Sounds geht beim Soundpool bleiben.
     
    Tom299 gefällt das.
  3. Tom299, 03.01.2012 #3
    Tom299

    Tom299 Threadstarter Android-Experte

    Danke für die Info, vielleicht häng ich ja auch zu sehr an der Vorstellung, daß der Windows Media Player eine Playlist bietet und man die Lieder wechseln kann und die Klasse hier heißt nun auch mal Media Player ;-)

    Aber ja, meine Sounds sind sehr kurz, <=1s, also eher kurze Effekte, von daher bleib ich dann beim SoundPool.

    Wie wäre es aber, wenn ich z.B. eine Hintergrundmusik laufen lassen möchte und trotzdem die kurzen Effektsounds benutzen will. Nehm ich dann den Mediaplayer für die Hintergrundmusik und SoundPool für die Effekte oder kann ich da auch komplett beim SoundPool bleiben und gleichzeitig den MusikStream + die Sounds abspielen?
     
  4. funcoder, 03.01.2012 #4
    funcoder

    funcoder Erfahrener Benutzer

    Yep, ich machs genauso. :)
    Für die Vielzahl an kurzen Sounds nehme ich den Soundpool aber parallel dazu für die Hintergrundmusik nehme ich eine MediaPlayer-Instanz.
    Das funktioniert auch gut und dadurch das nur ein MediaPlayer-Objekt im Einsatz ist, beeinträchtigt diese Kombination die Performance kaum.

    Je nachdem wie stark deine App den Heap beansprucht könntest du auch versuchen die Hintergrundmusik über den SoundPool zu regeln.
    Der SoundPool bietet ja auch die Möglichkeit eine Endlosschleife zu legen.
     
  5. Tom299, 03.01.2012 #5
    Tom299

    Tom299 Threadstarter Android-Experte

    Alles klar, dann werd ich zuerst mal den Mix aus MediaPlayer für Hintergrundmusik und SoundPool nur für die Soundeffekte implementieren :)
     
Die Seite wird geladen...
Similar Threads - MediaPlayer Mehrere Sounds Forum Datum
[OFFEN] Wie kann ich mehrere Marker in eine MapView laden Android App Entwicklung 25.03.2017
Auswahl mehrerer RadioButton in einem TextView ausgeben Android App Entwicklung 23.02.2017
AI2: mit Listpicker- Auswahl mehrere Labels aus verschiedenen Index- Listen füllen. Android App Entwicklung 09.12.2016

Users found this page by searching for:

  1. android mehrere sounds