package com.lfk.justweengine.utils.music;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import java.io.IOException;
/**
* MusicPlayer
*
* @author liufengkai
* Created by liufengkai on 16/2/5.
*/
public class MusicPlayer implements Music, MediaPlayer.OnCompletionListener {
private MediaPlayer player;
// 准备好?
private boolean isPrepared;
// 是否循环
private boolean isLooping;
// 音量
private float volume;
public MusicPlayer(Context context, String fileName) {
player = new MediaPlayer();
// init
initMusicPlayer();
try {
// get file descriptor
AssetFileDescriptor descriptor = context.getAssets().openFd(fileName);
// setData
player.setDataSource(descriptor.getFileDescriptor(),
descriptor.getStartOffset(),
descriptor.getLength());
player.prepare();
isPrepared = true;
player.setOnCompletionListener(this);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("Couldn't load music");
}
}
private void initMusicPlayer() {
volume = 10;
isPrepared = false;
isLooping = false;
}
@Override
public void play() {
if (player.isPlaying())
return;
try {
synchronized (this) {
if (isPrepared) {
player.prepare();
}
player.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void stop() {
player.stop();
synchronized (this) {
isPrepared = false;
}
}
@Override
public void pause() {
if (player.isPlaying())
player.pause();
}
@Override
public void setLooping(boolean isLooping) {
this.isLooping = isLooping;
if (player != null)
player.setLooping(isLooping);
}
@Override
public void setVolume(float volume) {
this.volume = volume;
if (player != null)
player.setVolume(volume, volume);
}
@Override
public float getVolume() {
return volume;
}
@Override
public boolean isPlaying() {
return player.isPlaying();
}
@Override
public boolean isLooping() {
return isLooping;
}
@Override
public void dispose() {
if (player.isPlaying()) {
player.stop();
}
player.release();
}
@Override
public void onCompletion(MediaPlayer mp) {
synchronized (this) {
isPrepared = false;
}
}
}