Android MediaPlayer Error

XVirus

XVirus

Neues Mitglied
2
Hi,
Ich habe einen Mediaplayer erstellt. Wenn man auf einen Button klickt kommt ein Sound. Beim Testen habe ich den Button 30 mal geklickt und habe immer einen Sound gehört. Aber nach 30 mal gibt es beim Klicken keinen Sound mehr :confused2:
Auf LogCat kriege ich während der Sound noch spielt folgende Fehlermeldung:
Code:
 E/MediaPlayer-JNI(12194): QCMediaPlayer mediaplayer NOT present
 E/MediaPlayer(12194): Should have subtitle controller already set
 E/MediaPlayer(12194): Should have subtitle controller already set

Wenn der Sound nach ~30 Klicks nicht mehr spiel kriege ich immer diese Fehlermeldung:
Code:
 E/MediaPlayer-JNI(12194): QCMediaPlayer mediaplayer NOT present
E/MediaPlayer(12194): Should have subtitle controller already set
E/MediaPlayer(12194): Should have subtitle controller already set
E/MediaPlayer(12194): error (1, -19)
E/MediaPlayer(12194): Error (1,-19)

Hier ist der ganze Code:
Code:
public class MainActivity  extends Activity implements OnClickListener {

    private ImageButton Button_next;
    private TextView Counter;

    int i = 1;
   
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Counter = (TextView)findViewById(R.id.textView1);
        Button_next = (ImageButton)findViewById(R.id.button_next);   
        Button_next.setOnClickListener(this);
       
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {

        if(v == Button_next){
           

            Counter.setText(Integer.toString(i));
            i++;
            MediaPlayer mediaplayer = MediaPlayer.create(MainActivity.this, R.raw.sound;
            mediaplayer.start();
           

           
           
           
           
        }
    }
}


    }

Ich hoffe ihr könnt mir helfen. Im Internet habe ich nirgendwo was dazu gefunden(was mir geholfen hat).
 
Hallo ich würde dir empfehlen deinen Code ncohmal umzuschreiben.

Zum Beispiel anstatt das ganze Activity object als Listener zu missbrauchen, den Button sofort als Listener setzen und die Implementierung an Ort und stelle zu machen
PHP:
button.setOnClicklistener(new OnClickListener()
{
   @override
    public void onClick(){
.......
    }
}

dann erübrigt sich die if abfrage....schonmal ein paar cpu clocks weniger.

für Kurze Sound würde ich den MediaPlayer ebenfalls nciht missbrauchen dafür hast du den Soundpool zur Verfügung.
Einfach anzuwenden:

Falls du interesse hast kann ich dir ein Code Beispiel geben.

Falls du beim Mediaplaywer bleibst rate ich dir den Souind im SPeicher zu haben und ncit immer wieder neu erstellen.

Aber Mediaplayer hat so viele states die einem Probleme bereiten können da ist soundpool etzwas freundlicher aufgebaut du bracuhst keine try catches zu evrwenden sogar und du sparst Speicherplatz da die Sound gestreamt werden!

Sorry mein Handy spinnt manchmal mit den Autokorrekturen
 
  • Danke
Reaktionen: XVirus
Vielen Dank! Mit SoundPool funktioniert es fast. Allerdings nachdem der Sound gespielt wurde und ich den Button nochmals klicke wird nichts abgespielt. Vermutlich weil der Sound nicht gestoppt wurde. Ich möchte also dass nachdem der Sound zuende gespielt wurde dass er gestoppt wird. Hier ist der Code:
Code:
@Override
            public void onClick(View v) {
                if(v == Button_next){

                 
                    PCounter.setText(Integer.toString(i));
                    i++;
                    playSound(v);

            }
            }
            });

Ich habe es schon mit
Code:
                    if(soundID != 0) {
                        soundPool.stop(soundID);
                            }
versucht aber das ging nicht. Mit
Code:
soundPool.stop(soundID);
direkt nach dem playSound wird der Sound abgebrochen und nicht richtig abgespielt...
Die playsound stelle ist hier:
Code:
            public void playSound(View v) {
      
   
     
                if (loaded && !plays) {
      
                    soundPool.play(soundID, volume, volume, 1, 0, 1f);
    
                    counter = counter++;
      
                    Toast.makeText(this, "Played sound", Toast.LENGTH_SHORT).show();
     
                    plays = true;
    
                }
Ich hoffe man kann mir da helfen
 
du brauchst nciht den sound abzubrechen. spiel ihn einfach mit play da kann ncihts schief gehen. Das Soundpool object hat ja eine gewisse anzahl an streams die es simultan abspielen kann der spielt dein sound immer da die stream nunmal unabhängig voneinander laufen. ist er voll wird der stream mit der niedrigsten priorität gestoppt ganz einfach. Ich gebe meinen soundpool immer 10-20 streams mit die er abspielen kann das reicht vollkommen

Ausserdem vermute ich dass du plays nicht mehr auf false setzt.

lösch die plays variable und call einfach die play() methode ohne die !plays abfrage...


Und wenn du schon eine playMethode mit der signatur(View) hast dann könntest du ja deine eigene Klasse implementieren die von View erbt und der du dann eine Sound ID gibst dann kannst du mit v.soundID die entsprechenden Sounds abspielen zu jedem ButtonObjekt. aber wie gesagt besser wäre es nciht die Activity als einen Listener zu setzen imho.
 
  • Danke
Reaktionen: XVirus
Vielen Dank! Es funktioniert nun
 
you're welcome :)
 

Ähnliche Themen

M
Antworten
4
Aufrufe
1.168
swa00
swa00
5
Antworten
0
Aufrufe
1.142
586920
5
B
Antworten
4
Aufrufe
472
bb321
B
Zurück
Oben Unten