不产生任何声音的简单 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 示例的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中按频率生成声音?

如何在 Windows 10 UWP 应用中播放 (MIDI) 声音?

Java 中用于播放的硬件 MIDI 输出?

music21:从平面乐谱中获取 midi 声音的声音/程序/乐器?

Midi-dot-net 声音播放两次

使用garageband上的MIDI从arduino上的光敏电阻发出声音?