録音済みのオーディオを再生するには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);
}
コードをご記入ください。 –
この進捗状況はどこに記録されますか?私は正確な値を取得すると思います、onSeekCompleteListenerのonSeekComplete()でチェックしてください... – Opiatefuchs
あなたの 'MediaPlayer.OnSeekCompleteListener'はどこですか? – pskink