如何使用java

时间:2017-01-25 15:51:45

标签: java audio netbeans

我正在尝试创建一个可以模拟排序,排序可视化和审核的Java应用程序。 YouTube上有许多视频可以比较不同种类的视频,其目的是制作类似的视频。

我从未实现任何代码来播放或生成声音,所以我在网上找到了一些帮助,用于创建声音的类看起来像这样:

public class Sound {

public static float SAMPLE_RATE = 8000f;

public static void sound(int hz, int msecs, double vol)
        throws LineUnavailableException {

    if (hz <= 0) {
        throw new IllegalArgumentException("Frequency <= 0 hz");
    }

    if (msecs <= 0) {
        throw new IllegalArgumentException("Duration <= 0 msecs");
    }

    if (vol > 1.0 || vol < 0.0) {
        throw new IllegalArgumentException("Volume out of range 0.0- 1.0");
    }

    byte[] buf = new byte[(int) SAMPLE_RATE * msecs / 1000];

    for (int i = 0; i < buf.length; i++) {
        double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI;
        buf[i] = (byte) (Math.sin(angle) * 127.0 * vol);
    }

    // shape the front and back 10ms of the wave form
    for (int i = 0; i < SAMPLE_RATE / 100.0 && i < buf.length / 2; i++) {
        buf[i] = (byte) (buf[i] * i / (SAMPLE_RATE / 100.0));
        buf[buf.length - 1 - i] = (byte) (buf[buf.length - 1 - i] * i / (SAMPLE_RATE / 100.0));
    }

    AudioFormat af = new AudioFormat(SAMPLE_RATE, 8, 1, true, false);
    SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
    sdl.open(af);
    sdl.start();
    sdl.write(buf, 0, buf.length);
    sdl.drain();
    sdl.close();
}

public static void main(String[] args) throws LineUnavailableException {
    Sound.sound(600, 200, 0.9);
}

}

它的工作非常好,以及程序的其余部分,但有一个(对我来说)意想不到的问题。 当我启动应用程序时,播放的声音听起来有点奇怪,就像一些噪音,而不是像预期的那样正弦。过了一会儿,我意识到,当我开始使用任何其他使用声音在背景中运行的应用程序(如winamp或电影中的歌曲等)时,声音效果很好,就像预期的那样。那些背景歌曲或类似的东西可以暂停,这没关系,只是为了让我的应用程序正常工作而打开它们(我的意思是声音,没有别的问题)。

经过一番思考,我想其他应用程序以某种方式运行会启动一些音频驱动程序或类似的东西,这在我的应用程序中没有完成(这只是我的猜测,它可以是我知道的任何东西)。

我在网上找不到任何类似的问题,也许这很不寻常,但我不知道如何修复它。任何帮助将不胜感激。请记住,我并不熟悉声音操作。 如果它很重要,我有Windows操作系统,我使用NetBeans IDE。

只是澄清一下:我肯定不知道这里发生了什么,但我也确信这就像我上面所说的那样。当我第一次启动应用程序时,声音不好(有些嗡嗡声而不是我们期望的清晰声音),之后,每当我启动任何使用声音的应用程序(如电影或MP3播放器)时声音都是预期的。如果我暂停该应用程序(但让它继续运行,例如暂停一首歌或一部电影),我的应用程序中的声音仍然可以正常工作,但是如果我关闭了这个声音消耗的话。背景应用程序,我的应用程序变得像以前一样,有一些奇怪的嗡嗡声,而不是一个清晰的声音。如果我没有真正看到它,我就不会写这个;这绝对是奇怪的,但它正在发生,我很想知道为什么。

提前致谢!

0 个答案:

没有答案