如何在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();
     }
 }