public boolean play() { try { if (playState != STOPPED) playStop(); if (audioBytes == null) return false; DataLine.Info info = new DataLine.Info(Clip.class, format); clip = (Clip) AudioSystem.getLine(info); clip.addLineListener(new ClipListener()); long clipStart = (long) (audioBytes.length * getStartTime() / (getDuration() * 1000.0)); long clipEnd = (long) (audioBytes.length * getEndTime() / (getDuration() * 1000.0)); if ((clipEnd - clipStart) > MAX_CLIP_LENGTH) clipEnd = clipStart + MAX_CLIP_LENGTH; byte[] clipBytes = new byte[(int) (clipEnd - clipStart)]; System.arraycopy(audioBytes, (int) clipStart, clipBytes, 0, clipBytes.length); clip.open(format, clipBytes, 0, clipBytes.length); FloatControl panControl = (FloatControl) clip.getControl(FloatControl.Type.PAN); panControl.setValue((float) panSetting / 100.0f); double value = (double) gainSetting; FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); float dB = (float) (Math.log(value == 0.0 ? 0.0001 : value) / Math.log(10.0) * 20.0); gainControl.setValue(dB); double playStartTime = (player.getSeekTime() / 100) * (playGetLength()); clip.setMicrosecondPosition((long) playStartTime); clip.start(); playState = PLAYING; return true; } catch (Exception ex) { ex.printStackTrace(); playState = STOPPED; clip = null; return false; } }
private static void playWav(String name, boolean loop, double volume) throws FileNotFoundException, IOException, UnsupportedAudioFileException, LineUnavailableException { AudioInputStream ais = AudioSystem.getAudioInputStream(new File(path + name)); Clip clip = AudioSystem.getClip(); clip.open(ais); if (loop) { clip.loop(-1); } ((FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN)) .setValue((float) (Math.log(volume) / Math.log(10.) * 20.)); clip.start(); wavMap.put(name, clip); // // open the sound file as a Java input stream // InputStream in = new FileInputStream(path + name); // // create an audiostream from the inputstream // AudioStream audioStream = new AudioStream(in); // // play the audio clip with the audioplayer class // AudioPlayer.player.start(audioStream); // wavMap.put(name, audioStream); }
public void setVolume(float volume) { gain = (FloatControl) audio.getControl(FloatControl.Type.MASTER_GAIN); gain.setValue(volume); }