此简单的代码不产生的一对夫妇,我已经用于测试它的机器的任何声音。我在Eclipse中运行代码,但我已经使用命令行不果也试过。

public static void main(String[] args)
{
    try {
        Synthesizer synthesizer = MidiSystem.getSynthesizer();
        synthesizer.open();

        MidiChannel[] channels = synthesizer.getChannels();

        channels[0].noteOn(60, 60);
        Thread.sleep(200);
        channels[0].noteOff(60);

        synthesizer.close();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
}

我能够通过得到序,增加MIDI事件序列,并播放顺序顺利拿到声音,但我试图做一些实时的音乐效果,定序器不支持。

任何想法?

与Solution编辑:原来的问题是,默认情况下,JRE不拿出一个声音库(有趣的话,那用音序器的工作,但使用合成没“T)。谢谢, thejmc

要解决这个问题,我下载了一个从java.sun音库.COM 并把它夹在(在WinXP)C:\ Program Files文件\ jre1.6.0_07 \ lib中\音频(不得不使音频文件夹)

有帮助吗?

解决方案

JRE的一些安装不包括JavaSound soundbank.gm(为了节省空间),所以您的代码将不会有一个声源触发这些机器上。

检查上不工作机器的音库的存在。你也可以把音库在同一目录下的.class文件,它会找到它。

有可能增加音库或升级的Java安装这些机器上 - 不一致的痛苦,我知道:)

其他提示

您尝试使用不同的渠道? 可能这商榷将让你更接近一个解决方案...

我测试你的代码在我的机器(Windows XP中,JRE 1.6)和它演奏的音符。也许只是一个音符是太少听到它。尝试添加更多音符。另外,尝试以设置音量大。

只需要1更多的睡眠动作之前接近合成器:

public static void main(String[] args)
{
    try {
        Synthesizer synthesizer = MidiSystem.getSynthesizer();
        synthesizer.open();

        MidiChannel[] channels = synthesizer.getChannels();

        channels[0].noteOn(60, 60);
        Thread.sleep(200);
        channels[0].noteOff(60);
        Thread.sleep(200);

        synthesizer.close();
    } catch (Exception e)
    {
        e.printStackTrace();
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top