|
Auditory Content in J2ME
An Introduction |
|
Prof. David Bernstein |
| Computer Science Department |
| bernstdh@jmu.edu |
Player
Player
MIDIControl and/or
a TempoControl
package auditory;
import java.io.*;
import java.util.*;
import javax.microedition.media.*;
/**
* AudioPlayer objects can be used to play audio files
*
* @author Prof. David Bernstein, James Madison University
* @version 1.0
*/
public class AudioPlayer implements PlayerListener
{
private boolean stopAll;
private Enumeration currentPlayList;
private InputStream inputStream;
private Player player;
/**
* Default Constructor
*/
public AudioPlayer()
{
stopAll = false;
}
/**
* Play a collection of sound files sequentially
*
* @param names The name of the files/resources
*/
public void play(Enumeration names)
{
currentPlayList = names;
playNext();
}
/**
* Play a sound file
*
* @param name The name of the audio file/resource
* @return false if the sound does not play.
*/
public boolean play(String name)
{
boolean played;
played = false;
stopAll = false;
try
{
inputStream = getClass().getResourceAsStream("/"+name);
if ((inputStream != null) && (inputStream.available() > 0))
{
// Interrupt any active sounds
if (player != null)
{
if (player.getState() == Player.STARTED)
{
player.stop();
inputStream.close();
}
}
player = Manager.createPlayer(inputStream, "audio/X-wav");
player.addPlayerListener(this);
player.start();
played = true;
}
}
catch (MediaException me)
{
played = false;
}
catch (IOException ioe)
{
played = false;
}
return played;
}
/**
* Play the next file in the playlist
*/
private void playNext()
{
if (currentPlayList.hasMoreElements())
{
String toPlay = (String)currentPlayList.nextElement();
play(toPlay);
}
}
/**
* Handle playerUpdate events (required by PlayerListener)
*/
public void playerUpdate(Player player, String event, Object eventData)
{
if (event == PlayerListener.END_OF_MEDIA)
{
stop(); // This will generate a STOPPED event
}
else if (event == PlayerListener.STOPPED)
{
if (!stopAll) playNext();
}
}
/**
* Stop the current audio file
*/
public void stop()
{
try
{
if (player != null) player.stop();
if (inputStream != null) inputStream.close();
}
catch (Exception e)
{
// Ignore
}
}
}