Mediaplayer loop funktioniert nicht (immer???)

H

Heribert500

Ambitioniertes Mitglied
1
Nochmals Hallo,

das Looping mit dem Mediapplayer funktioniert nicht immer,
bei kurzen 2-3 sek. langen sound ja, bei längeren 2min leider nicht

verwende aktuell diesen Code
Code:
m = MediaPlayer.create(getApplicationContext(), R.raw.snd1);
        m.setLooping(true);
        m.setVolume(10, 10);
        m.start();

woran kann das liegen

danke

h500
 
Wird eine IllegalStateException geworfen?

setVolume(left,right) ist ebenfalls zwischen 0 und 1 zu setzen wo 1=100% und 0=0% lautstärke(Achtung die Skala ist natürlich logarithmisch).

Ich weiß leider nicht wo man den native Soruce Code zu setVolume(float float) findet. Im Source code von Android wird da einfach "_setVolume(float,float)" aufgerufen den kann ich bei Grepcode aber leider nicht finden deswegen weiß ich nicht was da passiert genau, aber benutze setVolume() einfach mit 1 am besten, falls du volle Lautstärke haben möchtest.

Auch eignet sich da einfach die Methode setVolume(1), wenn du eh beide Kanäle gleich laut haben möchtest...

Also bei mir klappt alles wunderbar mit folgendem Code (Source ist ein 5 Minuten langes Musikstück):

Thread zum laden und starten:
Code:
        new Thread()
        {
            public void run()
            {
                boolean created=false;
                try
                {
                    mediaPlayer=MediaPlayer.create(pAct, R.raw.playmenumusic);
                    created=true;
                }
                catch(Throwable t)
                {
                    created=false;
                }
                finally
                {
                    if(created)
                    {
                        mediaPlayer.setLooping(true);
                        mediaPlayer.setVolume(1, 1);
                        startMediaPlayer();
                    }
                }
            }
        }.start();

startMediaPlayer():

Code:
public void startMediaPlayer()
    {
        new Thread()
        {
            public void run()
            {
                boolean retry=true;
                while(retry)
                {
                    try
                    {
                        mediaPlayer.start();
                        retry=false;
                    }
                    catch(IllegalStateException e)
                    {
                        retry=true;
                    }
                }
            }
        }.start();
    }
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Heribert500
Hallo Jaiel,danke für die Antwort

sorry wenn ich weiter Bohre, bin noch handfester Anfänger (hmmm).
Habe deinen code eingebaut, spielt aber auch hier nur 1 mal, kein looping.
Wie gesagt, das kurze Stück wird geloopt, das längere nicht.
-IllegalStateException , weis nicht zumindest ist im Log keine Fehlermeldung

merkwürdig

h500
[DOUBLEPOST=1444504905,1444502658][/DOUBLEPOST]so, hab ersteinmal die mp3 mehrfach aneiander gereiht - die Holzhammermethode
werde mal noch weiter googlen

h500
 
Bei meinem Code hat es jedenfalls geklappt auf KitKat und Lollipop.

Versuche mal das setLooping(true) nach mediaPlayer.start(); zu setzen. Habe das gerade auf SO gelesen aber bin mir nciht sicher. Sonst kann man aus dem vorliegenden Code von dir keine weiteren Rückschlüsse ziehen...

Ich kann auch leider den nativen source code von setLooping nirgends finden um nachzuvollziehen was da schief laufen kann(Wo kann man den native source code einsehen von Android?

Ansonsten:
PHP:
    try
    {
        mediaPlayer=MediaPlayer.create(pAct, R.raw.playmenumusic);
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
        {
            public void onCompletion(MediaPlayer mp)
            {
                //if(mp==mediaPlayer)
                startMediaPlayer();
            }
        });
        created=true;
    }

mit dem ersten try block ersetzen. Das wird den MEdiaplayer wieder starten wenn er fertig ist.

Der MEdiaplayer an sich ist relativ komplex mit seinen States(im Gegensatz zum SoundPool welches sich für deine kürzeren Sounds eignet). Für weitere Referenzen siehe meine Hauotquelle :MediaPlayer | Android Developers
 
Zuletzt bearbeitet:
Ich bin mir nicht sicher, aber ich glaube es gab da ein Problem mit der Reihenfolge.

Versuche es mal mit folgenden Code:

Code:
m = MediaPlayer.create(getApplicationContext(), R.raw.snd1);
m.setVolume(10, 10);
m.start();

m.setLooping(true);
 
Habe ich ihm auch geraten und wäre erstaunt dass das funktionieren würde ehrlich gesagt. Ich habe auf SO gelesen dass das angeblich klappen sollte. Bei mir klappts egal in welcher Reihenfolge.
 

Ähnliche Themen

SaniMatthias
Antworten
19
Aufrufe
990
swa00
swa00
O
Antworten
15
Aufrufe
2.996
ORHUX
O
K
Antworten
3
Aufrufe
1.174
Kapikalaani
K
Zurück
Oben Unten