2017-06-19 1 views
0

Ich entwickle meine Anwendung, aber ich stieß auf ein Problem.Stabiler Sound in Android mit Mediaplayer

Beim Starten meiner App ruft es Informationen aus der Datenbank ab. Dann zeichnet es Notizen auf dem Bildschirm entsprechend den Informationen aus der Datenbank, es zeichnet HiHat, Snare und Kick-Noten, wenn es gespielt werden soll, ist die Note schwarz, wenn sie nicht grau ist.

Der nächste Schritt besteht darin, dass im rx Java mit einer Methode namens highLightNotes() aufzurufen.

Observable.interval(400, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Long>() { @Override 
     public void onNext(@NonNull Long aLong) { 
      highLightNotes(aLong); 
     } 

der nächste Schritt ist, dass es für Schwarz-Notizen sucht, und wenn die Note es ruft diese Methode schwarz ist:

public void playSnare(){ 
    snarePlayer.seekTo(0); 
    snarePlayer.start(); 
} 

snarePlayer ist ein Mediaplayer.

Mein erstes Problem hier ist, dass es zu viel Zeit braucht, um die Note zu hören. Das Rhytmus wird unruhig, da es manchmal mehr Zeit braucht, um manchmal weniger durchzukommen. Das zweite Problem ist, dass ich irgendwie in der Art von Rxjava noob bin und ich frage mich warum, wenn man zum ersten Mal klickt, um den Rhythmus zu spielen, dauert es ein paar Sekunden, um es zu starten und dann wird es wirklich schnell und danach gespielt dass ich ruhig werde.

Bitte geben Sie mir einige weitere Informationen, um weiter daran zu arbeiten, ich bin fest.

Antwort

1

Sie starten beim ersten Mal einen neuen Thread. Siehst du, wo du sagst, dass du einen neuen Thread abonnieren möchtest?

Wenn Sie eine strenge Kontrolle über Timing wie diese benötigen, ist RxJava nicht der Weg zu gehen. Sie wollen nicht, dass eine riesige Codebasis Sie zwischen Threads wechselt. Du fragst nur nach Schmerz.

+0

Was schlagen Sie vor, in diesem Fall zu verwenden? – trOnk12

+0

Ich würde einen einzelnen Thread empfehlen, und nur die UI-Updates (die Sie müssen) auf dem Hauptthread. Verzögern Sie den Thread nach Bedarf mit dem Ruhezustand. Aber Android ist im Allgemeinen dafür bekannt, Probleme mit der Audiolatenz zu haben. Es wird nicht einfach sein, alles zum Laufen zu bringen. Vielleicht möchten Sie beginnen, hier zu lesen https://developer.android.com/ndk/guides/audio/audio-latency.html –

+0

Also anstelle von rxjava nur mit Thread und Timer? Bitte können Sie etwas konkreter sein: P – trOnk12