如何在java应用程序中播放声音(警报)?
我正在使用SMS处理,基于Java的软件,并希望在收到消息时发出哔哔/警报声。 我试着查看java.sound库,找不到任何东西。 我不知道在java应用程序中播放声音的小程序是否合适! 在我们可以在应用程序中调用的任何java库中是否有任何预定义的声音? 任何指针将不胜感激!
如果您只是想要发出哔哔声或快速警报,请尝试
Toolkit.getDefaultToolkit().beep();
如果您在没有外部声音文件的情况下寻找比哔哔声()更无聊的东西,您可以生成自己的声音。
import javax.sound.sampled.*; public class SoundUtils { public static float SAMPLE_RATE = 8000f; public static void tone(int hz, int msecs) throws LineUnavailableException { tone(hz, msecs, 1.0); } public static void tone(int hz, int msecs, double vol) throws LineUnavailableException { byte[] buf = new byte[1]; AudioFormat af = new AudioFormat( SAMPLE_RATE, // sampleRate 8, // sampleSizeInBits 1, // channels true, // signed false); // bigEndian SourceDataLine sdl = AudioSystem.getSourceDataLine(af); sdl.open(af); sdl.start(); for (int i=0; i < msecs*8; i++) { double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI; buf[0] = (byte)(Math.sin(angle) * 127.0 * vol); sdl.write(buf,0,1); } sdl.drain(); sdl.stop(); sdl.close(); } public static void main(String[] args) throws Exception { SoundUtils.tone(1000,100); Thread.sleep(1000); SoundUtils.tone(100,1000); Thread.sleep(1000); SoundUtils.tone(5000,100); Thread.sleep(1000); SoundUtils.tone(400,500); Thread.sleep(1000); SoundUtils.tone(400,500, 0.2); } }
这里有更多声音实验: 产生特殊的声音效果
您可以查看Toolkit类中的beep方法,如下所示
小程序路径应该没问题(并且非常简单)。 要避免创建Applet实例,可以使用静态newAudioClip
方法,然后在创建的AudioClip
上调用play()
。
URL url = getClass().getResource("/foo/bar/sound.wav"); AudioClip clip = Applet.newAudioClip(url); clip.play();
如果要使用声音包播放任意声音文件,可以使用javax.sound.sampled
包。 以下是播放声音文件的代码:
private void playSound(File f){ Runnable r = new Runnable(){ 私人档案f; public void run(){ playSoundInternal(this.f); } public Runnable setFile(File f){ this.f = f; 归还这个; } } .setFile(F); new Thread(r).start(); } private void playSoundInternal(File f){ 尝试{ AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(f); 尝试{ Clip clip = AudioSystem.getClip(); clip.open(的AudioInputStream); 尝试{ clip.start(); 尝试{ 了Thread.sleep(100); } catch(InterruptedException e){ e.printStackTrace(); } clip.drain(); } finally { clip.close(); } } catch(LineUnavailableException e){ e.printStackTrace(); } finally { audioInputStream.close(); } } catch(UnsupportedAudioFileException e){ e.printStackTrace(); } catch(FileNotFoundException e){ e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } }