У меня есть несколько mp3-файлов, которые я использую для Android MediaPlayer для воспроизведения с определенных смещений.точность Android MediaPlayer seekTo
Использование seekTo(), кажется, останавливается в правильном месте. player.getCurrrentPosition() возвращает правильное смещение, но в некоторых случаях реальная позиция выключена на целых 200 мс. Файлы записываются примерно на 3 минуты, и в конце появляются неправильные смещения. Из некоторых файлов.
У меня такой же эффект, как и при использовании устройства Android 4.0.3 или 4.3 эмулятора.
У кого-нибудь есть опыт работы с "finetuning" MediaPlayer смещения? Любой опыт, почему MediaPlayer может не работать корректно с некоторыми файлами? Все они CBR, стерео, у некоторых есть частота дискретизации 22050, около 44100, разные битрейты.
Я устанавливаю смещения из другой программы и сохраняю их в mp3-тегах, а затем в случае сомнений проверяя вручную, используя Audacity. Audacity согласен с моей оценкой правильного смещения, MediaPlayer, похоже, не согласен.
Я знаю, что я мог бы использовать AudioTrack с сырыми звуковыми файлами и иметь больший контроль, однако это может быть непрактичным, поскольку есть много mp3 файлов, так что использование сырых звуковых данных будут делать довольно большое приложение или много большого Дата файлы.
Код ничего фантазии:
player.seekTo(start);
player.start();
CountDownTimer timer = new CountDownTimer(length, 100) {
@Override
public void onTick(long millisUntilFinished) {
if (player!=null) setInt(R.id.nLocation, player.getCurrentPosition());
}
@Override
public void onFinish() {
if (player!=null) {
if (player.isPlaying()) {
player.pause();
}
setInt(R.id.nLocation, player.getCurrentPosition());
player.stop();
player.release();
player = null;
}
}
};
timer.start();