package com.limegroup.gnutella.gui.mp3;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* This abstract class outlines the basic functionality of an audio
* player component. It supplies the ability for subclasses to
* register listeners and fire events for audio playback.
*/
abstract class AbstractAudioPlayer implements AudioPlayer {
/**
* <tt>List</tt> of listeners for audio player events.
*/
private List _listeners;
public abstract int getStatus();
public abstract void unpause();
public abstract void pause();
public abstract void stop();
public abstract boolean play(File file) throws IOException;
public abstract int getFrameSeek();
public abstract void refresh();
/**
* Adds a new <tt>AudioPlayerListener</tt> to the list of registered
* listeners for AudioPlayer events.
*
* @param listener the new <tt>AudioPlayerListener</tt>
*/
public void addAudioPlayerListener(AudioPlayerListener listener) {
if(_listeners == null) _listeners = new ArrayList();
_listeners.add(listener);
}
/**
* Notifies all registered <tt>AudioPlayerListener</tt> classes that
* the position of the audio playback has been updated.
*
* @param pos the new position of the audio player playback
*/
protected void fireAudioPositionUpdated(int pos) {
for(int i=0; i<_listeners.size(); i++) {
((AudioPlayerListener)_listeners.get(i)).updateAudioPosition(pos);
}
}
/**
* Notifies all registered <tt>AudioPlayerListener</tt> classes that
* the number of frames should be set for playback.
*
* @param numberOfFrames the number of frames in the new audio file about
* to be played
*/
protected void fireSeekSetupRequired(int numberOfFrames) {
for(int i=0; i<_listeners.size(); i++) {
((AudioPlayerListener)_listeners.get(i)).setUpSeek(numberOfFrames);
}
}
/**
* Notifies all registered <tt>AudioPlayerListener</tt> classes that
* the playback of the current audio file has completed.
*/
protected void firePlayComplete() {
for(int i=0; i<_listeners.size(); i++) {
((AudioPlayerListener)_listeners.get(i)).playComplete();
}
}
}