Con la pressione di un tasto della tastiera viene riprodotto un suono, ma se viene premuto di nuovo un tasto e il suono non è ancora terminato vorrei poterlo fermare e riprodurre nuovamente dall'inizio.
Ho scritto questo codice ma non funziona, invece di fermarlo ne riproduce un altro sopra.
Come devo fare?
Grazie
codice:import java.awt.BorderLayout; import java.awt.event.*; import javax.swing.*; import java.io.*; import javax.sound.sampled.*; public class x extends JFrame implements KeyListener, ActionListener, LineListener { JTextField typingArea; static String audioFilePath; boolean playCompleted; public static void main(String[] args) { x frame = new x("x"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.addComponentsToPane(); frame.pack(); frame.setVisible(true); } private void addComponentsToPane() { typingArea = new JTextField(); typingArea.addKeyListener(this); getContentPane().add(typingArea, BorderLayout.PAGE_START); } public x(String name) { super(name); } public void keyPressed(KeyEvent e) { String audioFilePath = "/C:/Users/user/Desktop/ECLIPSE/1/bin/65.wav"; File audioFile = new File(audioFilePath); try { AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile); AudioFormat format = audioStream.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, format); Clip audioClip = (Clip) AudioSystem.getLine(info); audioClip.addLineListener((LineListener) this); audioClip.open(audioStream); audioClip.setFramePosition(0); audioClip.start(); } catch (UnsupportedAudioFileException ex) { ex.printStackTrace(); } catch (LineUnavailableException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } /* ...codice...*/ @Override public void update(LineEvent event) { LineEvent.Type type = event.getType(); if (type == LineEvent.Type.START) { playCompleted = false; System.out.println("START"); } else if (type == LineEvent.Type.STOP) { playCompleted = true; System.out.println("STOP"); } } }

Rispondi quotando
