不产生任何声音的简单 Java MIDI 示例
Posted
技术标签:
【中文标题】不产生任何声音的简单 Java MIDI 示例【英文标题】:Simple Java MIDI example not producing any sound 【发布时间】:2008-12-19 04:28:10 【问题描述】:这个简单的代码在我用来测试它的几台机器上没有产生任何声音。我在 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 不附带音库(有趣的是,使用音序器有效,但使用合成器没有't)。谢谢,thejmc!
为了解决这个问题,我downloaded a soundbank from java.sun.com 并将它放在(在 WinXP 上)C:\Program Files\jre1.6.0_07\lib\audio(必须制作音频文件夹)。
【问题讨论】:
您的扬声器插好了吗? :) 是的! (不过,这是个好问题——我曾经用同样的问题诊断出某人的显示器“问题”) 【参考方案1】:JRE 的某些安装不包括 JavaSound soundbank.gm(为了节省空间),因此您的代码不会在这些机器上触发声源。
检查不工作的机器上是否存在音库。您也可以将音库与 .class 文件放在同一目录中,它会找到它。
可以在这些机器上添加音库或升级 Java 安装 - 我知道不一致的痛苦 :)
【讨论】:
【参考方案2】:您是否尝试过使用不同的频道? 可能是this discusson 会让您更接近解决方案...
【讨论】:
【参考方案3】:我已经在我的机器(Windows XP、JRE 1.6)中测试了您的代码,它确实可以播放音符。也许只有一个音符太少听不见。尝试添加更多注释。另外,请尝试将音量调大。
【讨论】:
【参考方案4】:在关闭合成器之前只需要 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();
【讨论】:
以上是关于不产生任何声音的简单 Java MIDI 示例的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 10 UWP 应用中播放 (MIDI) 声音?