public void run() { System.err.println("Timer task running"); if (!clip.isActive() // already stopped? || clip.getFramePosition() >= endFrame) { System.err.println("Timer task stopping clip."); clip.stop(); this.cancel(); } } }
public void run() { System.err.println("Timer task running"); if (!clip.isActive() // already stopped? || clip.getFramePosition() >= endFrame) { System.err.println("Timer task stopping clip."); clip.stop(); this.cancel(); } } }
Clip[] myBunchOfClipsToPlaySequentially=new Clip[A_BUNCH]; // // [load actual clips...] // [...] // for(Clip c: myBunchOfClipsToPlaySequentially) while(c.getFramePosition()<c.getFrameLength()) Thread.yield(); // Note that if we simply put a NO-OP instead (like a // semicolon or a {}), we make Jesus cry (and our CPU // too). Thread.yield() allows for almost 0% CPU consumption.
static String randomName = "TreasureQuest"; public static Clip clip = null; public static void playSound(String name) throws Exception{ if (clip != null && clip.isOpen()) clip.close(); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("music/" + name + ".wav").getAbsoluteFile()); clip = AudioSystem.getClip(); clip.open(audioInputStream); FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); gainControl.setValue(0f); System.out.println(clip.getFrameLength() + " | " + clip.getFramePosition()); clip.start(); }
while(true) currentFramePos = ((Clip) line).getFramePosition(); if (currentFramePos<lastFramePos)