Jetzt kostenlos registrieren: Mitglieder surfen ohne Werbung!

Mehrere Sounds gleichzeitig

  • 8 Antworten
  • Neuester Beitrag
Diskutiere Mehrere Sounds gleichzeitig im Android App Entwicklung im Bereich Betriebssysteme & Apps.
M

manu

Erfahrenes Mitglied
Ich komme schon wieder an einem Problem nicht weiter.

Wie schaffe ich es, dass mehrere Sounds aus einer Activity gleichzeitig abgespielt werden (muss nicht synchron sein).

Mit dem Mediaplayer klappt das nicht so recht.

Und SoundPool ist kaum zu gebrauchen. Da funktioniert zu wenig.


Hat einer eine IDee für mich?




Gruß Manu
 
M

Markus

Gewerbliches Mitglied
Wo ist das Problem mit SoundPool? Ich nutze es für ein Spiel - klappt soweit ganz gut.
 
M

manu

Erfahrenes Mitglied
Könntest du mir ein wenig Beispielcode posten.

Ich habe es jetzt mit zwei MediaPlayern gemacht. Ist halt nicht das Gelbe vom Ei.
 
M

Markus

Gewerbliches Mitglied
Zum einfacheren Umgang mit dem SoundPool hab ich mir folgende Klasse geschrieben:

Code:
package de.greenrobot.game;

import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;

public class Sounds {
    private final int[] resourceIds;
    private final int[] soundPoolIds;

    private SoundPool soundPool;
    private AudioManager audioManager;
    private boolean soundsOn;

    public Sounds(int[] soundResourceIds) {
        this.resourceIds = soundResourceIds;
        soundPoolIds = new int[soundResourceIds.length];
        soundsOn = true;
    }

    public void init(Context context) {
        soundPool = new SoundPool(200, AudioManager.STREAM_MUSIC, 100);
        audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        for (int i = 0; i < resourceIds.length; i++) {
            soundPoolIds[i] = soundPool.load(context, resourceIds[i], 100);
        }
    }

    public void release() {
        audioManager = null;
        soundPool.release();
        soundPool = null;
    }

    public void playSound(int sound) {
        if (soundPool != null && soundsOn) {
            for (int i = 0; i < resourceIds.length; i++) {
                if (sound == resourceIds[i]) {
                    int streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
                    soundPool.play(soundPoolIds[i], streamVolume, streamVolume, 1, 0, 1f);
                    break;
                }
            }
        }
    }

    public boolean isSoundsOn() {
        return soundsOn;
    }

    public void setSoundsOn(boolean soundsOn) {
        this.soundsOn = soundsOn;
    }

}
 
M

manu

Erfahrenes Mitglied
Ich werde mit dem Soundpool noch wahnsinnig.
Habe nun alles bei mir eingebaut. Ich bekomme aber leider keinen Ton.
Hier mal der Quellcode:

Code:
private SoundPool soundPool;
private HashMap<Integer, Integer> soundPoolMap; 
private int longsound,shortsound;
private int streamVolume;

.
.
.

AudioManager mgr = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
initSounds();

.
.
.
playSound(1);
.
.
.

private void initSounds() {
        soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100);
        soundPoolMap = new HashMap<Integer, Integer>();
        soundPoolMap.put(1, soundPool.load(myApp.this, R.raw.shaverlong, 1));
        soundPoolMap.put(2, soundPool.load(myApp.this, R.raw.shaver5, 2));
   } 
    
    public void playSound(int sound) {
        if(sound==1)
            longsound=soundPool.play(soundPoolMap.get(sound), streamVolume, streamVolume, 1, -1, 1f);
        if(sound==2)
            shortsound=soundPool.play(soundPoolMap.get(sound), streamVolume, streamVolume, 1, -1, 1f);
        if(longsound==0)
            Toast.makeText(electricshaver.this, "Ton wurde nicht gestartet", Toast.LENGTH_SHORT).show();
        if(shortsound==0)
            Toast.makeText(electricshaver.this, "Ton wurde nicht gestartet", Toast.LENGTH_SHORT).show();
   } 
    
   public void stopSound(int sound)
   {
       if(sound==1)
           soundPool.stop(longsound);
       if(sound==2)
           soundPool.stop(shortsound);
   }
Hat jemand eine Idde, warum der Sound nicht gestartet wird?



Gruß Manu

P.S.: Die Variablen longsound und shortsound sind immer 0
 
M

Markus

Gewerbliches Mitglied
manu schrieb:
Hat jemand eine Idde, warum der Sound nicht gestartet wird?
SoundPool unterstützt nicht alle Formate. Z.B. ein Stereo MP3 hat er bei mir nicht abgespielt. Nach Umwandlung zu Mono und OGG ging's.
 
M

manu

Erfahrenes Mitglied
Danke, für die sehr schnelle Antwort.
Ich habe beide Dateien in OGG umgewandelt. Zusätzlich habe ich die Bitrate auf 24kbps gestellt. Die Sounds liegen jetzt in Mono vor.

Trotzdem wird der Sound nicht gestartet.
 
M

Markus

Gewerbliches Mitglied
Dein Code sieht OK aus und sehe keine relevanten Unterschiede zu meinem. Gibt's irgendeine Log-Ausgabe? streamVolumne ist >0 ? So langsam gehen mir die Ideen aus...
 
M

manu

Erfahrenes Mitglied
Ich habe für das Debugging die beiden Toasts eingebaut. Diese bestätigen, dass die Rückgabe 0 ist.

Schade, dass der SoundPool trotz Android 1.5 nicht läuft. Muss ich doch wieder den MediaPlayer verwenden.