/*
* File : JMFAudioPlayer.java
* Created : 25-may-2002 19:27
* By : fbusquets
*
* JClic - Authoring and playing system for educational activities
*
* Copyright (C) 2000 - 2005 Francesc Busquets & Departament
* d'Educacio de la Generalitat de Catalunya
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details (see the LICENSE file).
*/
package edu.xtec.jclic.media;
import edu.xtec.jclic.bags.MediaBag;
import edu.xtec.util.ExtendedByteArrayInputStream;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 1.0
*/
public class JMFAudioPlayer implements AudioPlayer{
protected javax.media.Player player;
public static final javax.media.Time zeroTime=new javax.media.Time(0L);
/** Creates new JMFAudioPlayer */
public JMFAudioPlayer() {
player=null;
}
public boolean setDataSource(Object source) throws Exception{
close();
if(source instanceof ExtendedByteArrayInputStream){
player=javax.media.Manager.createPlayer(new ByteDataSource((ExtendedByteArrayInputStream)source));
}
else if(source instanceof String){
javax.media.MediaLocator ml=new javax.media.MediaLocator((String)source);
javax.media.protocol.DataSource dataSource=javax.media.Manager.createDataSource(ml);
player=javax.media.Manager.createPlayer(dataSource);
}
return player!=null;
}
public void realize(String fileName, MediaBag mediaBag) throws Exception{
if(fileName!=null)
setDataSource(mediaBag.getMediaDataSource(fileName));
if(player!=null)
player.realize();
}
public void close(){
if(player!=null){
player.close();
player=null;
}
}
public void play(){
try{
stop();
player.setMediaTime(zeroTime);
player.start();
} catch(Exception ex){
System.err.println("Error playing system sound:\n"+ex);
}
}
public void stop(){
if(player!=null && player.getState()>=javax.media.Player.Started)
player.stop();
}
}