기술/beginning games2011. 5. 31. 20:12
download download
public interface Audio {
public Music newMusic(String filename); 
public Sound newSound(String filename); 
}

 

public interface Music {
public void play(); 
public void stop(); 
public void pause();
public void setLooping(boolean looping); 
public void setVolume(float volume); 
public boolean isPlaying(); 
public boolean isStopped(); 
public boolean isLooping(); 
public void dispose(); 
}


 public interface Sound {
public void play(float volume);
public void dispose(); 
}

소리 관련 인터페이스 생성

 public class AndroidMusic implements Music, OnCompletionListener{
MediaPlayer mediaPlayer;
boolean isPrepared = false;
public AndroidMusic(AssetFileDescriptor assetDescriptor){
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(),
assetDescriptor.getStartOffset(),
assetDescriptor.getLength());
mediaPlayer.prepare();
isPrepared = true;
mediaPlayer.setOnCompletionListener(this);
} catch (Exception e){
throw new RuntimeException("Couldn't load music");
}
}

@Override
public void onCompletion(MediaPlayer arg0) {
synchronized(this){
isPrepared = false;
}
}

@Override
public void play() {
if(mediaPlayer.isPlaying()) return;
try{
synchronized(this){
if(!isPrepared)
mediaPlayer.prepare();
mediaPlayer.start();
}
} catch (IllegalStateException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void stop() {
mediaPlayer.stop();
synchronized(this){
isPrepared = false;
}
}

@Override
public void pause() {
if(mediaPlayer.isPlaying()) mediaPlayer.pause();
}

@Override
public void setLooping(boolean looping) {
mediaPlayer.setLooping(looping);
}

@Override
public void setVolume(float volume) {
mediaPlayer.setVolume(volume, volume);
}

@Override
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}

@Override
public boolean isStopped() {
return !isPrepared;
}

@Override
public boolean isLooping() {
return mediaPlayer.isLooping();
}

@Override
public void dispose() {
if(mediaPlayer.isPlaying())
mediaPlayer.stop();
mediaPlayer.release();
}
}


public class AndroidSound implements Sound{
int soundId;
SoundPool soundPool;
public AndroidSound(SoundPool soundPool, int soundId){
this.soundId = soundId;
this.soundPool = soundPool;
}
@Override
public void play(float volume) {
soundPool.play(soundId, volume, volume, 0, 0, 1);
}

@Override
public void dispose() {
soundPool.unload(soundId);
}
download download download
Posted by yachtie_leo