1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. manu, 15.04.2009 #1
    manu

    manu Threadstarter Fortgeschrittenes 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
     
  2. Markus, 18.04.2009 #2
    Markus

    Markus Gewerbliches Mitglied

    Wo ist das Problem mit SoundPool? Ich nutze es für ein Spiel - klappt soweit ganz gut.
     
  3. manu, 18.04.2009 #3
    manu

    manu Threadstarter Fortgeschrittenes Mitglied

    Könntest du mir ein wenig Beispielcode posten.

    Ich habe es jetzt mit zwei MediaPlayern gemacht. Ist halt nicht das Gelbe vom Ei.
     
  4. Markus, 19.04.2009 #4
    Markus

    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;
        }
    
    }
    
     
  5. manu, 06.05.2009 #5
    manu

    manu Threadstarter Fortgeschrittenes 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
     
  6. Markus, 06.05.2009 #6
    Markus

    Markus Gewerbliches Mitglied

    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.
     
  7. manu, 06.05.2009 #7
    manu

    manu Threadstarter Fortgeschrittenes 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.
     
  8. Markus, 06.05.2009 #8
    Markus

    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...
     
  9. manu, 06.05.2009 #9
    manu

    manu Threadstarter Fortgeschrittenes 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.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Activity als Dialog - RecyclerView funktioniert nicht mehr Android App Entwicklung 14.08.2017
[GESCHLOSSEN] Random ListItem ausgeben funktioniert nicht mehr Android App Entwicklung 13.08.2017
[OFFEN] SVN Commit in Android Studio funktioniert nicht mehr Android App Entwicklung 07.08.2017
[ERLEDIGT] Mehrere Verzeichnisse abfragen Android App Entwicklung 02.07.2017
[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
Permission Abfrage funktioniert nicht mehr Android App Entwicklung 15.01.2017
AI2: mit Listpicker- Auswahl mehrere Labels aus verschiedenen Index- Listen füllen. Android App Entwicklung 09.12.2016
Du betrachtest das Thema "Mehrere Sounds gleichzeitig" im Forum "Android App Entwicklung",