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