Beiträge von Gravity88m

    Hallo an Euch da draußen.


    Nun ich habe vor einigen Tagen mal mit der Entwicklung einer simplen Android App begonnen.
    Zuvor habe ich schon einiges in Java für den PC gemacht. Basics sind also da.


    Also es geht um ein Soundboard. Ich habe mich quer durchs Internet gewühlt aber leider keine ausreichende Hilfe gefunden.
    Es geht also um folgendes.
    Um zu verhindern, dass mit jedem sound ein neues Objekt vom Typ MediaPlayer generiert wird muss ich den MediaPlayer ja als Klassenobjekt erstellen mit


    MediaPlayer mp = new MediaPlayer();


    So nun hab ich verschiedene Buttons. Jeder Button hat seinen eigenen Listener.
    In diesem Listener muss ich dem Mediaplayer ja eine Datei zuordnen.


    Hier schonmal meine erste zwischenfrage.
    Soll ich die Soundfiles auf der SD Karte ablegen oder in den Raw Ordner packen. Wo genau ist der Unterschied?


    Ich nutze mal den Raw Ordner.


    So nun öffne ich mein erstes Soundfile mit
    mp = MediaPlayer.create(getBaseContext(),fileToPlay);


    *fileToPlay ist ein Uri Objekt mit ner Adresse der Form: Uri.parse("android.resource://<package>/raw/soundfile");


    mit mp.play() starte ich den Abspielvorgang.


    Soweit klappt alles.
    Nun muss ich die Ressource ja freigeben, weil ich sonst nach 4-6 Aufrufen keinen Sound mehr höre.


    mp.setOnCompletionListener(new OnCompletionListener()
    {
    @Override
    public void onCompletion(MediaPlayer mp)
    {
    mp.release();
    }


    So das funktioniert soweit. Aber nun kann ich 10 Sounds gleichzeitig starten. Ich möchte aber das eventuell laufende Sounds gestoppt werden.
    Also müsste zuerst ein mp.stop() aufgerufen werden. Dann allerdings bekomme ich beim zweiten Aufruf eine Exception, weil mp ja durch release nicht mehr existent ist.


    Wie bekomme ich das Problem gelöst?
    Ich hab schon viel von FileDescriptor und AssetFileDescriptor in diesem Zusammenhang gefunden, aber ich verstehe die Logik dieser Methoden nicht so recht.
    Hat jemand ne Idee?
    Hier nochmal der Code: