Estou fazendo um jogo e gostaria de colocar um som quando o JButton fosse clicado, alguém sabe como eu posso fazer isso?
Dei uma olhada no site que você me passou e mais umas pesquisadas e consegui isto:
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == this.btnGame) {
if(!(fis == null)) {
play(fis, false);
} else {
try {
fis = new FileInputStream(somClickPath);
play(fis, false);
} catch (FileNotFoundException e1) {
JOptionPane.showMessageDialog(null, "O caminho do audio não pode ser encontrado: \n"
+ e1.getMessage(), "Zumbi", JOptionPane.ERROR_MESSAGE);
}
}
}
}
public void play(final InputStream somPath, final boolean restart) {
try {
//Obtem os dados sonoros
AudioInputStream ais = AudioSystem.getAudioInputStream(somPath);
//Carrega o formato do audio e cria uma linha
AudioFormat af = ais.getFormat();
DataLine.Info dataLineInfo = new DataLine.Info(MenuGui.class, ais.getFormat(),
((int)ais.getFrameLength() * af.getFrameSize()));
//Carrega o som para o dispositivo
Clip clip = (Clip)AudioSystem.getLine(dataLineInfo);
clip.addLineListener(new LineListener() {
//Evento do Listener
public void update(LineEvent e) {
if(e.getType() == LineEvent.Type.STOP) {
e.getLine().close();
}
}
});
clip.open(ais);
//Tocar som
if(restart) {
clip.loop(clip.LOOP_CONTINUOUSLY);
} else {
clip.loop(0);
}
} catch(Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Erro na reprodução do audio:\n" + e.getMessage(), "Zumbi ",
JOptionPane.ERROR_MESSAGE);
}
}
}
Só que quando eu clico no botão ele lança essa Exception:
java.io.IOException: mark/reset not supported
Alguma ideia do que pode ser?
Posta o StackTrace do erro 
Se antes de passar para o AudioSystem, você decorar seu InputStream com um BufferedInputStream, pode funcionar pois o BufferedInputStream suporta os métodos mark e reset.
Tente assim:
BufferedInputStream bufferedInput = new BufferedInputStream( somPath );
AudioInputStream ais = AudioSystem.getAudioInputStream( bufferedInput );
Pronto aquele erro sumiu, mas agora está dando outro:
java.lang.IllegalArgumentException: No line matching class br.paulo.game.gui.MenuGui supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian, and buffers of 211680 to 211680 bytes is supported.
at javax.sound.sampled.AudioSystem.getLine(Unknown Source)
at br.paulo.game.gui.MenuGui.play(MenuGui.java:91)
at br.paulo.game.gui.MenuGui.actionPerformed(MenuGui.java:70)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
E quando eu clico novamente no botão ele me da este outro:
java.io.IOException: Resetting to invalid mark
MenuGui.class não é uma classe válida para reproduzir audio.
Creio que tens que fazer assim:
DataLine.Info dataLineInfo = new DataLine.Info(Clip.class, ais.getFormat(), ((int)ais.getFrameLength() * af.getFrameSize()));
//Carrega o som para o dispositivo
Clip clip = (Clip) AudioSystem.getLine(dataLineInfo);
Funcionou, vlw