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

Kri*_*ika 23 java audio

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

Sea*_*ean 48

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

Toolkit.getDefaultToolkit().beep();
Run Code Online (Sandbox Code Playgroud)

  • 这可能不适用于Linux. (4认同)
  • 仅供参考,在 Windows 10 上运行良好。谢谢 (2认同)
  • 导入java.awt.Toolkit; (2认同)
  • 无法在 ubuntu 20 上运行 (2认同)

Rea*_*wTo 32

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

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

  }
}
Run Code Online (Sandbox Code Playgroud)

这里有更多声音实验: 产生特殊的声音效果


Ada*_*ski 7

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

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

在这里,sound.wav文件捆绑在您创建jarfoo/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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,给定该路径的/sounds/,因为当你解压jar,你会看到该wav文件位于在第一个文件夹jar,这是sounds

  • 知道为什么这个答案没有被广泛使用吗?它看起来非常简单和有用...... (2认同)

npi*_*nti 6

你可以看看Toolkit类中的蜂鸣方法,如图所示这里