2017-06-19 7 views
0

私のアプリケーションを開発していますが、問題が発生しました。AndroidでMediaplayerで安定したサウンド再生

私のアプリを起動するとき、データベースから情報を取得します。それから、データベースからの情報に従って画面上にノートを描画し、ハイハット、スネア、キックノートを描画します。

次に、rx javaを使用してhighLightNotes()というメソッドを呼び出します。

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

次のステップは、それが黒のノートを探しているということで、ノートが黒であるときには、このメソッドを呼び出します。

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

snarePlayerがメディアプレーヤです。

私の最初の問題は、ノートを聞くには時間がかかりすぎることです。リズムが不安定になる場合があります

2番目の問題は、明らかにrxjava noobのようなものです。私はリズムを最初にクリックして、それを始めるのに数秒かかりますし、本当に早く再生したのでしょうか?私は安定している。

私はそれに取り組むために、より多くの情報を提供してください。

答えて

1

初めてスレッドを新規作成しています。あなたが新しいスレッドで購読するように言っている場所を見てください。

このようなタイミングを厳密に制御する必要がある場合は、RxJavaを使用することはできません。巨大なコードベースがスレッド間でスワップすることは望ましくありません。あなたは痛みを求めているだけです。

+0

この場合、どのような使用をお勧めしますか? – trOnk12

+0

私は1つのスレッドをお勧めしたいと思いますが、あなたはメインスレッド上でUIアップデートを行うだけです。必要に応じてスリープを使用してスレッドを遅延させます。しかし、Androidは一般的にオーディオ待ち時間の問題を抱えていることが知られているため、すべてを動作させることは簡単ではありません。 https://developer.android.com/ndk/guides/audio/audio-latency.html –

+0

ここでは、スレッドとタイマーを使用するだけでrxjavaを使用するのではなく、あなたはより具体的にabitすることができますか:P – trOnk12

関連する問題