2016-04-15 20 views
0

録音済みのオーディオを再生するにはMediaPlayerを使用し、再生の進行状況を表示するにはSeekBarを使用しています。私の問題は次のとおりです。私は時間位置にジャンプするSeekBarをクリックすると、次の例が起こると私はprogessを見たいと思ったとき、私はログに表示:MediaPlayer getProgess - 間違った値

でgetProgress(ミリ秒):10000
でgetProgress( MS):9956
でgetProgress(ミリ秒):10000

だから私は、録音した音声の10秒にジャンプします。 MediaPlayerは10秒目にジャンプした後に見えますが、少し後ろにジャンプします。

私はできる限りすべてを試しました。他のレコーダーのオーディオファイルを再生しようとしましたが、同じことが起こりました。ビットレートとサンプリングレートで試してみましたが、同じことが起こりました。

私は誰かがこれに対する解決策を知りたがります。ありがとうございました。

編集:

コード:

シークバー:

progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int i, boolean b) { 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
      LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver); 
      // handler2.removeCallbacks(updateTimeTask); 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      if (PlayerForegroundService.player != null) { 
      // handler2.removeCallbacks(updateTimeTask); 
       PlayerForegroundService.player.seekTo(seekBar.getProgress()); 
       // handler2.post(updateTimeTask); 
       LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter(Constants.ACTION.PLAYER_UPDATE_UI)); 
      } 
     } 
    }); 
} 

getProgess():

public int getProgress(){ 
    if (player != null) { 
     Log.i(Constants.DEFAULTS.LOG_TAG, ""+player.getCurrentPosition()); 
     return player.getCurrentPosition(); 
    } 
    else 
     return 0; 
}  

でgetProgressが呼び出されるコード:

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 

    receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, final Intent intent) { 
      actPosition.setText(intent.getStringExtra("formattedtimeplay")); 
      progressBar.setProgress(PlayerForegroundService.player.getProgress()); 
      if (intent.getBooleanExtra("pausedplay", false)) 
       playButton.setImageResource(R.drawable.playfilled); 
     } 
    }; 
    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, new IntentFilter(Constants.ACTION.PLAYER_UPDATE_UI)); 
    super.onCreate(savedInstanceState); 
}  
+0

コードをご記入ください。 –

+0

この進捗状況はどこに記録されますか?私は正確な値を取得すると思います、onSeekCompleteListenerのonSeekComplete()でチェックしてください... – Opiatefuchs

+0

あなたの 'MediaPlayer.OnSeekCompleteListener'はどこですか? – pskink

答えて

0

私はこの問題を解決したようです。以前は、SeekBarの最大値を秒単位で設定していました。しかし、私はミリ秒単位で最大値を設定し、seekToの値をミリ秒単位で設定すると、うまく動作します。

関連する問題