рдЬрд╛рд╡рд╛ рдореЗрдВ рдзреНрд╡рдирд┐ рдмрдЬрд╛рдирд╛

рдкрд░рд┐рдЪрдп


рд╡рд┐рд╖рдп рдкрд░ рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдЬрд╛рд╡рд╛-рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рдФрд░ javax.sound.sampled рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд░рд▓ рд╣реИ, рддреБрдЪреНрдЫ рд╕реЗ рджреВрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ Habr├й рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЖрдЗрдП рд╢реБрд░реВ:

рдзреНрд╡рдирд┐ рдмрдЬрд╛рдУ


рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдХрдореЛрдмреЗрд╢ рд╕рд░рд▓ рд╣реИред Javax.sound.sampled рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдПрдВ:
try { File soundFile = new File("snd.wav"); //  // AudioInputStream //    IOException  UnsupportedAudioFileException AudioInputStream ais = AudioSystem.getAudioInputStream(soundFile); //   Clip //  LineUnavailableException Clip clip = AudioSystem.getClip(); //     Clip //  IOException  LineUnavailableException clip.open(ais); clip.setFramePosition(0); //    clip.start(); //!!! //    ,   ,     // GUI-  3    Thread.sleep(clip.getMicrosecondLength()/1000); clip.stop(); // clip.close(); // } catch (IOException | UnsupportedAudioFileException | LineUnavailableException exc) { exc.printStackTrace(); } catch (InterruptedException exc) {} 


рдорд╛рддреНрд░рд╛ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг

рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдВрднрд╡рддрдГ рдзреНрд╡рдирд┐ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬрд╛рд╡рд╛ рд╕рд╛рдЙрдВрдб рдПрдкреАрдЖрдИ рдПрдХ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдХреБрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
 //   FloatControl vc = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); //  //      vc.getMinimum()  vc.getMaximum() vc.setValue(5); //  

рдЗрд╕ рдХреЛрдб рдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреАрдЪ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд▓рд┐рдк (ais) рдФрд░ рдХреНрд▓рд┐рдк редsetFramePosition (0) ред

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ


рдФрд░ рдЕрдВрдд рдореЗрдВ, рддрд╛рдХрд┐ рдЖрдк рдкреАрдбрд╝рд┐рдд рди рд╣реЛрдВ, рдореИрдВрдиреЗ рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЛ рдмрдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреЛ рдлреИрд▓рд╛ рджрд┐рдпрд╛
 import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.FloatControl; import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineListener; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; public class Sound implements AutoCloseable { private boolean released = false; private AudioInputStream stream = null; private Clip clip = null; private FloatControl volumeControl = null; private boolean playing = false; public Sound(File f) { try { stream = AudioSystem.getAudioInputStream(f); clip = AudioSystem.getClip(); clip.open(stream); clip.addLineListener(new Listener()); volumeControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); released = true; } catch (IOException | UnsupportedAudioFileException | LineUnavailableException exc) { exc.printStackTrace(); released = false; close(); } } // true    , false    public boolean isReleased() { return released; } //       public boolean isPlaying() { return playing; } //  /* breakOld  ,      breakOld==true,            */ public void play(boolean breakOld) { if (released) { if (breakOld) { clip.stop(); clip.setFramePosition(0); clip.start(); playing = true; } else if (!isPlaying()) { clip.setFramePosition(0); clip.start(); playing = true; } } } //   ,   play(true) public void play() { play(true); } //   public void stop() { if (playing) { clip.stop(); } } public void close() { if (clip != null) clip.close(); if (stream != null) try { stream.close(); } catch (IOException exc) { exc.printStackTrace(); } } //   /* x      0  1 (     ) */ public void setVolume(float x) { if (x<0) x = 0; if (x>1) x = 1; float min = volumeControl.getMinimum(); float max = volumeControl.getMaximum(); volumeControl.setValue((max-min)*x+min); } //    (  0  1) public float getVolume() { float v = volumeControl.getValue(); float min = volumeControl.getMinimum(); float max = volumeControl.getMaximum(); return (v-min)/(max-min); } //     public void join() { if (!released) return; synchronized(clip) { try { while (playing) clip.wait(); } catch (InterruptedException exc) {} } } //  ,   public static Sound playSound(String path) { File f = new File(path); Sound snd = new Sound(f); snd.play(); return snd; } private class Listener implements LineListener { public void update(LineEvent ev) { if (ev.getType() == LineEvent.Type.STOP) { playing = false; synchronized(clip) { clip.notify(); } } } } } 


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
 Sound.playSound("sounds/hello.wav").join(); 


рдкреНрд░рд╛рд░реВрдкреЛрдВ


рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж: рдПрдордкреА 3 рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдФрд░ wav рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВред рдПрдпреВ рдФрд░ рдПрдЖрдИрдПрдл рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред

Source: https://habr.com/ru/post/In191422/


All Articles