2012-01-03 3 views
1

Я пытаюсь сыграть в цикл Ogg-файла, я пробовал включить setLooping(true), но это не имело никакого эффекта, поэтому я пробовал onCompletionListener, и это тоже не работает, может кто-то уточнить, что я делаю неправильно?android MediaPlayer Looping

musicPlayer = MediaPlayer.create(mContext, R.raw.overworld); 
musicPlayer.setVolume(musicVolume, musicVolume); 
// musicPlayer.setLooping(true); 

musicPlayer.setOnCompletionListener(new OnCompletionListener() { 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     musicPlayer.stop(); 
     musicPlayer.seekTo(0); 
     musicPlayer.start(); 
     Log.d("Sound Manager", "Song Completed"); 
    } 
}); 

Ниже моя функция игры,

public void playSong(int id) { 
    try { 
     stopSong(); 
     musicPlayer = MediaPlayer.create(mContext, id);            
     musicPlayer.start(); 
    } catch(Exception e) { 
     // Ignored 
    } 
} 

ответ

1

Известно, что MediaPlayer имеет проблемы с Ogg файлов. Вы можете предпочесть переключение на другой формат файла.

Другое дело, я бы попытался с помощью setLooping (boolean), поскольку он, скорее всего, использует ту же схему и ее гораздо более четко.

Вызов seekTo(), если объект MediaPlayer остановлен, приводит к тому, что MediaPlayer находится в недопустимом состоянии. Вместо этого вы можете позвонить pause(), но я бы не назвал ни один из этих методов, почему бы просто не искать? Я думаю, если вы удалите musicPlayer.stop(), это сработает.

+0

его песня не SFX и Mp3 того же файла 3mb, тогда как в формате Ogg это 600kb – GideonKain

+0

@GideonKain Я отредактировал мой вопрос :) – poitroae

+0

Без изменений ... Log.d никогда не появляется в LogCat, слушатель даже не стреляет? – GideonKain

0
remove .... 
    musicPlayer.stop(); 
from 
    onCompletion(MediaPlayer mp) 
0

onCompletionListener() не вызывается, если ваш MediaPlayer установлен на зацикливание, НО если вы не имеете его установить на зацикливание, вы всегда можете просто использовать завершающий слушатель как так

@Override 
public void onCompletion(MediaPlayer mp) { 
    if(!mp.isPlaying()) { 
     mp.start(); 
    } 
    mp.seekTo(0); 
} 

Вы также не следует называть stop(), потому что это полностью прекращает воспроизведение, и нет смысла искать в видео/песне, которую вы не играете.