Android Media Player тормозит с CountDownTimer

Я пытаюсь сделать приложение, чтобы научить кого-то считать музыку. Медиаплеер инициализируется 30-секундным звуковым клипом постоянной ноты А. Я использую таймер обратного отсчета, чтобы сообщить своему медиаплееру, когда нужно приостановить воспроизведение. Приведенный ниже код вызывает заикание первой и последней секунды звука.

MediaPlayer myMediaPlayer = MediaPlayer.create(MusicCounting.this, R.raw.a_note);
CountDownTimer time = new CountDownTimer(4000,500) {
    @Override
    public void onTick(long millisUntilFinished) {
        if(myMediaPlayer.isPlaying()) {
            myMediaPlayer.pause();
        } else {
            myMediaPlayer.start();
        }
    }

    @Override
    public void onFinish() {
        myMediaPlayer.pause();
        myMediaPlayer.seekTo(0);
    }
};

time.start();

Этот код предназначен для четвертных нот, и мой код восьмых нот выглядит идентично, за исключением того, что второй параметр таймера обратного отсчета равен 250. Любые предложения будут очень признательны. Спасибо :)


person user2028508    schedule 02.07.2015    source источник


Ответы (1)


Есть много сообщений о заикании Android MediaPlayer с различными способами, чтобы попытаться это исправить. Кажется, это лучший связанный вопрос:

Однако AudioTrack может быть лучше для вашей конкретной ситуации, играть определенные ноты. Видеть:

person mpkuth    schedule 02.07.2015
comment
Спасибо, я посмотрю на это - person user2028508; 02.07.2015
comment
Таким образом, MediaPlayer не заикается, если я вынимаю CountDownTimer. Кроме того, я реализовал произвольный тон и получил последовательную ноту, но ее продолжительность является целым числом, поэтому я не могу воспроизвести ноту менее секунды. Любые идеи? - person user2028508; 02.07.2015
comment
Я сейчас не за своим компьютером, но я считаю, что duration используется только в сочетании с sampleRate для определения numSamples, поэтому вы сможете довольно легко настроить этот расчет. Может быть, просто сделать duration числом с плавающей запятой, а затем преобразовать numSamples обратно в целое число? - person mpkuth; 02.07.2015
comment
Вы правы с некоторыми вознями я уменьшил его продолжительность. Спасибо за помощь. - person user2028508; 02.07.2015