题
此简单的代码不产生的一对夫妇,我已经用于测试它的机器的任何声音。我在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();
}
}
不隶属于 StackOverflow