首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中播放beep以外的声音?

如何在Java中播放beep以外的声音?
EN

Stack Overflow用户
提问于 2015-04-18 07:11:08
回答 2查看 5.1K关注 0票数 2

因此,目前,这是Java中的" beep“(在某些操作系统上不太响)声音:

代码语言:javascript
复制
Toolkit.getDefaultToolkit().beep();

但是代码使用了我电脑的“哔”/alert声音.

有什么办法可以替换它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-18 07:18:13

我发现了一个interesting code here,它使用不同于beep的不同声音:

代码语言:javascript
复制
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);

  }
}
票数 8
EN

Stack Overflow用户

发布于 2017-04-12 12:46:54

只需按此方式创建一个函数,并在任何您喜欢的地方调用它,例如按钮单击或侦听器。

代码语言:javascript
复制
public void alert() {

    try{

        InputStream inputStream = getClass().getResourceAsStream("/sounds/sms.wav"); //Note this is path to whatever wav file you want
            AudioStream audioStream = new AudioStream(inputStream);
            AudioPlayer.player.start(audioStream);
        }
    catch (IOException e) {
       // Whatever exception you please;
    }
       // return inputStream;

}

还要注意: Audiostream是Java专有的,如果它是一个冗长的声音字节,并且需要在任何时候停止它,您可以在任何地方调用AudioPlayer.player.stop(audioStream),可以使用计时器、线程中断或按钮单击。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29714183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档