1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Mehrere Sounds gleichzeitig

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von manu, 15.04.2009.

  1. manu, 15.04.2009 #1
    manu

    manu Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    329
    Erhaltene Danke:
    25
    Registriert seit:
    29.03.2009
    Phone:
    Galaxy Nexus
    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

    Beiträge:
    76
    Erhaltene Danke:
    8
    Registriert seit:
    19.01.2009
    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

    Beiträge:
    329
    Erhaltene Danke:
    25
    Registriert seit:
    29.03.2009
    Phone:
    Galaxy Nexus
    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

    Beiträge:
    76
    Erhaltene Danke:
    8
    Registriert seit:
    19.01.2009
    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

    Beiträge:
    329
    Erhaltene Danke:
    25
    Registriert seit:
    29.03.2009
    Phone:
    Galaxy Nexus
    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

    Beiträge:
    76
    Erhaltene Danke:
    8
    Registriert seit:
    19.01.2009
    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

    Beiträge:
    329
    Erhaltene Danke:
    25
    Registriert seit:
    29.03.2009
    Phone:
    Galaxy Nexus
    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

    Beiträge:
    76
    Erhaltene Danke:
    8
    Registriert seit:
    19.01.2009
    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

    Beiträge:
    329
    Erhaltene Danke:
    25
    Registriert seit:
    29.03.2009
    Phone:
    Galaxy Nexus
    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.
     

Diese Seite empfehlen