Sounds abspielen, evtl. auch mehrere gleichzeitig

  • 3 Antworten
  • Letztes Antwortdatum
P

Pommes9485

Fortgeschrittenes Mitglied
6
Guten Tag,

ich habe folgendes Problem:
Ich muss einen Sound mehrmals gleichzeitig abspielen und so oft der Benutzer es will.

Also jedesmal beim klicken wird der Sound gestartet, soll aber Parallel laufen und nicht jedesmal neustarten.

Mit dem Mediaplayer müsste ich für jeden Klick eine neue Instanz erstellen, was extrem speicherfressend wäre, der Soundpool ist da nicht anders, so wie ich es sehe.

Oder habe ich eine Methode übersehen?
 
Du kannst doch mehrere MediaPlayer Objekter erstellen, die alle die selbe Resource haben, dann hast du den Sound nur einmal in den Resourcen aber kannst ihn unterschiedlich starten :)

Gesendet von meinem GT-P5100 mit der Android-Hilfe.de App
 
Aber läd denn nicht jede Instanz den Sound neu aus den Ressourcen? Da der Sound 264 KB groß ist, wäre das 1 MB Ram bei 4 gleichzeitigen Abspielvorgängen..oder?

Außerdem habe ich das ganze auch noch mal 8, da ich 8 verschiedene Sounds habe, welche wiederholt werden könnten. Oder gibt es noch eine Art Zwischenspeicher, sodass alle Instanzen auf die gleiche geladene Ressource zugreifen?

EDIT:
Der Soundpool hat sich doch als nützlich erwiesen ;)
 
Zuletzt bearbeitet:
Wenn es sich um relativ kurze Sounds handelt kann ich dir SoundPool ans Herz legen....

Code:
public class bla [....]

SoundPool soundpool;
int sound_1;
int sound_2;
int sound_3;
int sound_4; 
int sound_5;

@Override
protected void onCreate[...] {
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
soundpool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

// Soundreferenzen

sound_1 = soundpool.load(this, R.raw.sound_eins, 1);
sound_2 = soundpool.load(this, R.raw.sound_zwei, 1);
sound_3 = soundpool.load(this, R.raw.sound_drei, 1);
sound_4 = soundpool.load(this, R.raw.sound_vier, 1);
sound_5 = soundpool.load(this, R.raw.sound_fuenf, 1);
}

// beispielfunktion "playsound"

public void playSound(int id) {
		
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
			float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
			float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
			float volume = actualVolume / maxVolume;

if(id == 1) {
			soundpool.play(sound_eins, volume, volume, 1, 0, 1f);
		}

// [...]

if(id == 5) {
			soundpool.play(sound_fuenf, volume, volume, 1, 0, 1f);
}

So sollte es funkionieren
 
Zurück
Oben Unten