audio solapado en java
Hola a todos, estoy intentando hacer una aplicaci贸n en java similar a una bater铆a de m煤sica, de tal modo que cuando haga click con el rat贸n se reproduzca un fichero de audio correspondiente a un bombo, por ejemplo.
Hasta ah铆 todo funciona correctamente, el problema viene cuando hago dos clicks de rat贸n muy seguidos, entonces solamente reproduce el fichero la primera vez, y no responde correctamente a todos los clicks de rat贸n que hago. 驴C贸mo lo puedo solucionar?
Aqu铆 pongo un fragmento de c贸digo por si puede ayudar en algo:
[quote]
/*Clase MouseListener: */
class MouseListener extends MouseAdapter implements MouseMotionListener{
public void mouseClicked(MouseEvent e){
if (e.getButton() == e.BUTTON1){
System.out.println("Se ha pulsado el bot贸n 1");
Main.getSoundCache().playSound("Bombo.wav");
}
}
/*El m茅todo que usamos del Main:*/
public class Main{
private static SoundCache soundCache;
public Main(){
soundCache = new SoundCache();
[...]
}
public static SoundCache getSoundCache(){
return soundCache;
}
/*El m茅todo que usamos de la clase SoundCache:*/
public class SoundCache extends ResourceCache{
public AudioClip getAudioClip(String name){
return (AudioClip) getResource(name);
}
public void playSound(final String name){
new Thread(
new Runnable(){
public void run(){
getAudioClip(name).play();
}
}
).start();
}
}
/*Finalmente, la clase padre de la que hereda SoundCache:*/
public abstract class ResourceCache {
protected HashMap resources;
public ResourceCache(){
resources = new HashMap();
}
protected Object loadResource(String name){
URL url = null;
url = getClass().getClassLoader().getResource(name);
return loadResource(url);
}
protected abstract Object loadResource(URL url);
protected Object getResource(String name){
Object res = resources.get(name);
if(res == null){
res = loadResource("res/"+name);
resources.put(name, res);
}
return res;
}
}
[/quote]
Este mismo c贸digo me ha resultado efectivo en otras ocasiones, pero no en esta, puesto que no me reproduce 2 veces simult谩neas el mismo archivo de sonido, ya que espera a que termine la primera reproducci贸n para empezar la segunda.
驴Qu茅 puedo hacer?
Un saludo y muchas gracias!!
Gonzalo.
Hasta ah铆 todo funciona correctamente, el problema viene cuando hago dos clicks de rat贸n muy seguidos, entonces solamente reproduce el fichero la primera vez, y no responde correctamente a todos los clicks de rat贸n que hago. 驴C贸mo lo puedo solucionar?
Aqu铆 pongo un fragmento de c贸digo por si puede ayudar en algo:
[quote]
/*Clase MouseListener: */
class MouseListener extends MouseAdapter implements MouseMotionListener{
public void mouseClicked(MouseEvent e){
if (e.getButton() == e.BUTTON1){
System.out.println("Se ha pulsado el bot贸n 1");
Main.getSoundCache().playSound("Bombo.wav");
}
}
/*El m茅todo que usamos del Main:*/
public class Main{
private static SoundCache soundCache;
public Main(){
soundCache = new SoundCache();
[...]
}
public static SoundCache getSoundCache(){
return soundCache;
}
/*El m茅todo que usamos de la clase SoundCache:*/
public class SoundCache extends ResourceCache{
public AudioClip getAudioClip(String name){
return (AudioClip) getResource(name);
}
public void playSound(final String name){
new Thread(
new Runnable(){
public void run(){
getAudioClip(name).play();
}
}
).start();
}
}
/*Finalmente, la clase padre de la que hereda SoundCache:*/
public abstract class ResourceCache {
protected HashMap resources;
public ResourceCache(){
resources = new HashMap();
}
protected Object loadResource(String name){
URL url = null;
url = getClass().getClassLoader().getResource(name);
return loadResource(url);
}
protected abstract Object loadResource(URL url);
protected Object getResource(String name){
Object res = resources.get(name);
if(res == null){
res = loadResource("res/"+name);
resources.put(name, res);
}
return res;
}
}
[/quote]
Este mismo c贸digo me ha resultado efectivo en otras ocasiones, pero no en esta, puesto que no me reproduce 2 veces simult谩neas el mismo archivo de sonido, ya que espera a que termine la primera reproducci贸n para empezar la segunda.
驴Qu茅 puedo hacer?
Un saludo y muchas gracias!!
Gonzalo.
