如何在java应用程序中播放声音(警报)?

时间:2010-09-23 16:18:18

标签: java audio

我正在使用基于Java的短信处理软件,并希望在收到消息时发出哔声/警报声。我试着查看java.sound库,找不到任何东西。我不知道在Java应用程序中播放声音的小程序是否合适!在我们可以在应用程序中调用的任何Java库中是否有任何预定义的声音?任何指针将不胜感激!

5 个答案:

答案 0 :(得分:44)

如果您只是想要发出哔哔声或快速提醒,请尝试

Toolkit.getDefaultToolkit().beep();

答案 1 :(得分:29)

如果您在没有外部声音文件的情况下寻找比嘟嘟声()更无聊的东西,您可以生成自己的声音。

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);

  }
}

此处有更多声音实验:Produce special sound effect

答案 2 :(得分:6)

您可以查看Toolkit类中的beep方法,如图所示here

答案 3 :(得分:4)

小程序路线应该没问题(并且非常简单)。为避免创建Applet实例,您可以使用静态newAudioClip方法,然后在创建的play()上调用AudioClip

URL url = getClass().getResource("/foo/bar/sound.wav");
AudioClip clip = Applet.newAudioClip(url);
clip.play();

此处,sound.wav文件捆绑在您创建的jar包中的foo/bar文件中。一个功能齐全的类(wav包中的sounds文件)将如下所示:

package sounds;

import java.applet.Applet;
import java.applet.AudioClip;

public class PlaySound {

    public void PlayBeep() {        
        AudioClip clip = Applet.newAudioClip(getClass().getResource("/sounds/beep3.wav"));
        clip.play();
    }
}

此处,路径为/sounds/,因为当您解压缩jar时,您会看到wav文件位于jar的第一个文件夹中},这是sounds

答案 4 :(得分:1)

如果要使用声音包播放任意声音文件,可以使用javax.sound.sampled包。以下是播放声音文件的代码:

private void playSound(File f) {
    Runnable r = new Runnable() {
        private File f;

        public void run() {
            playSoundInternal(this.f);
        }

        public Runnable setFile(File f) {
            this.f = f;
            return this;
        }
    }.setFile(f);

    new Thread(r).start();
}

private void playSoundInternal(File f) {
    try {
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(f);
        try {
            Clip clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            try {
                clip.start();
                try {
                    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();
    }
}