MediaPlayer nur ein Sound wird korrekt abgespielt.

  • Antworten:5
Meister
  • Forum-Beiträge: 55

06.10.2018, 13:07:51 via Website

Hey, ich habe eine SPiel programmiert bei dem bei einem richtigen Klick ein Ton abgespielt werden soll und bei einem falschen klick, ein anderer Ton. Doch nur der richtige Ton wird korrekt abgespielt. Der falsche ton wird abgespielt, wenn ich, ohne das Spiel zu beenden, den Bildschirm sperre ^^

public void onClick(View view) {

    switch (view.getId()){
        case R.id.btnEins:
            if(a){
                punkte=punkte+zahla;
                zahla=zahla*4;
                stopPlaying();
                mp = MediaPlayer.create(this, R.raw.didng);
                mp.start();
            }
            else{
                punkte=0;
                zahla=1;
                stopPlaying();
                mp = MediaPlayer.create(this, R.raw.falsch);
                mp.start();
            }
            tvPunkte.setText(""+punkte);

            break;
        case R.id.btnZwei:
            if(b){
                punkte=punkte+zahla;
                zahla=zahla*4;
                stopPlaying();
                mp = MediaPlayer.create(this, R.raw.didng);
                mp.start();
            }
            else{
                punkte=0;
                zahla=1;
                stopPlaying();
                mp = MediaPlayer.create(this, R.raw.falsch);
                mp.start();
            }
            tvPunkte.setText(""+punkte);

            break;
        case R.id.btnDrei:
            if(c){
                punkte=punkte+zahla;
                zahla=zahla*4;
                stopPlaying();
                mp = MediaPlayer.create(this, R.raw.didng);
                mp.start();
            }
            else{
                punkte=0;
                zahla=1;
                stopPlaying();
                mp = MediaPlayer.create(this, R.raw.falsch);
                mp.start();
            }
            tvPunkte.setText(""+punkte);

            break;
        case R.id.btnSumme:
            if(d){
                punkteSp=punkteSp+punkte;
                punkte=0;
                tvPunkteSp.setText(""+punkteSp);
                tvPunkte.setText(""+punkte);
                stopPlaying();
                mp = MediaPlayer.create(this, R.raw.didng);
                mp.start();
            }
            else{
                punkteSp=punkteSp-punkte;
                punkte=0;
                tvPunkteSp.setText(""+punkteSp);
                tvPunkte.setText(""+punkte);
                stopPlaying();
                mp = MediaPlayer.create(this, R.raw.falsch);
                mp.start();

            }

            break;
        case R.id.btnSave:
            Intent intent = new Intent (this, Ende.class);
            intent.putExtra("Punkte", punkteSp);
            startActivity(intent);
            finish();
            break;
    }

}

private void stopPlaying() {
        if (mp != null) {
            mp.stop();
            mp.release();
            mp = null;
        }

}}

verstehe nur Bahnhof. Kann es sein, dass der MediaPlayer so nicht funktioniert?

Im Code sind übrigens vier buttons. Den Save Button könnt ihr ignorieren.

— geändert am 06.10.2018, 13:08:38

Kommentieren
swa00
  • Forum-Beiträge: 3.704

06.10.2018, 13:12:52 via Website

Kann es sein, dass der MediaPlayer so nicht funktioniert?

Richtig , der Mediaplayer funktioniert so bei Dir nicht .
Du musst Dir eine eigene Klasse dazu schreiben und ihn Asynchron betreiben.
Und in jedem Click übergibst du dieser Klasse das Resourcenfile

https://developer.android.com/guide/topics/media/mediaplayer#java

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Meister
Kommentieren
Gelöschter Account
  • Forum-Beiträge: 79

06.10.2018, 13:32:07 via Website

Hallo Meister,

schau dir auch mal die "SoundPool"-Klasse an. Die ist denke ich für solche Anwendungen besser geeignet. Mit dem MediaPlayer hatte ich auch schon öfter Probleme. ^^

Hilfreich?
Meister
Kommentieren
Meister
  • Forum-Beiträge: 55

06.10.2018, 14:29:21 via Website

habs nun so probiert und lustigerweise das selbe Problem und sogar weniger gut ^^ Der richtig Ton erklingt nur dann, wenn er lust hat ^^

Hilfreich?
Kommentieren
Meister
  • Forum-Beiträge: 55

06.10.2018, 14:30:03 via Website

wie kann ich die klasse denn asynchron betreiben?
@swa00

Edit:
Ach jungs, es hat doch geklappt mit dem code davor. Die Audio war fehlerhaft.

— geändert am 06.10.2018, 14:40:22

Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

06.10.2018, 15:28:28 via Website

wie kann ich die klasse denn asynchron betreiben?

Steht ein schönes Beispiel im Link, den ich dir gesendet habe , nur ein wenig scrollen :-)

Ach jungs, es hat doch geklappt mit dem code davor. Die Audio war fehlerhaft.

Dennoch - dein Klick ist ein UI-Thread , du blockierst Diesen , während du den Sound statisch abspielst.
Deshalb bitte asynchron

— geändert am 06.10.2018, 15:30:03

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Kommentieren