2015-07-02 3 views
2

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

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. Любые предложения будут с благодарностью. Спасибо :)

ответ

0

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

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

+0

Спасибо, я буду смотреть в эту – user2028508

+0

Так MediaPlayer не заикаться, если я вынимать CountDownTimer. Кроме того, я реализовал произвольный тон, и я получаю согласованное примечание, но его продолжительность - целое число, поэтому я не могу воспроизвести заметку менее секунды. Есть идеи? – user2028508

+0

Я сейчас не на своем компьютере, но считаю, что 'duration' используется только совместно с' sampleRate', чтобы определить 'numSamples', чтобы вы могли легко настроить этот расчет. Может быть, просто сделайте 'duration' float, а затем нарисуйте' numSamples' обратно в int? – mpkuth