这个简单的代码不会在我用来测试它的几台机器上产生任何声音.我正在运行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事件添加到序列并播放序列,我能够成功获得声音,但我正在尝试做一些实时音乐效果,音序器不支持.
有任何想法吗?
编辑解决方案:事实证明问题在于,默认情况下,JRE没有声音库(有趣的是,使用Sequencer工作,但使用合成器没有).谢谢,thejmc!
为了解决这个问题,我从java.sun.com下载了一个soundbank并将其放入(在WinXP上)C:\ Program Files\jre1.6.0_07\lib\audio(必须制作音频文件夹).
一些JRE安装不包括JavaSound soundbank.gm(为了节省空间),因此您的代码不会在这些机器上触发声源.
检查不起作用的机器上是否存在声音库.您也可以将声音库放在与.class文件相同的目录中,它会找到它.
可以添加声音库或升级那些机器上的Java安装 - 不一致的痛苦,我知道:)