java - Javax.sound.midi学习代码无法在MacOS X上运行

原文 标签 java

我正在尝试运行从javax.sound.midi包中导入类的代码,但是没有任何效果。代码已编译并成功运行,但是没有声音。
我已经下载了Java的Soundbank,并将其放在audio文件夹中,但是仍然无法使用。

Macbook Pro 2010年中

Mac OS X High Sierra

从2019-04-16起的Java版本12.0.1

Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)


import javax.sound.midi.*;


public class MiniMiniMusicApp {

    public static void main(String[] args) {
        MiniMiniMusicApp mini = new MiniMiniMusicApp();
        mini.play();
    }

    public void play() {
        try {
            Sequencer player = MidiSystem.getSequencer();
            player.open();

            Sequence seq = new Sequence(Sequence.PPQ, 4);

            Track track = seq.createTrack();

            ShortMessage a = new ShortMessage();
            a.setMessage(128, 1, 44, 100);
            MidiEvent noteOn = new MidiEvent(a, 1);
            track.add(noteOn);

            ShortMessage b = new ShortMessage();
            b.setMessage(128, 1, 44, 100);
            MidiEvent noteOff = new MidiEvent(b, 16);
            track.add(noteOff);

            player.setSequence(seq);

            player.start();

        } catch (Exception ex) {ex.printStackTrace();}
    }
}

最佳答案

问题是您同时对ab使用命令128。基于ShortMessage,命令128为音符关闭事件。


144事件注释
128注意事项
192程序更改,用于更改默认乐器等
176发送事件的控制更改
224弯音


例如,将a.setMessage(128, 1, 44, 100);更改为a.setMessage(ShortMessage.NOTE_ON, 1, 44, 100);,您将获得声音。

public static void play() {
    try {
        Sequencer player = MidiSystem.getSequencer();
        player.open();

        Sequence seq = new Sequence(Sequence.PPQ, 4);

        Track track = seq.createTrack();

        ShortMessage a = new ShortMessage();
        a.setMessage(ShortMessage.NOTE_ON, 1, 44, 100);
        MidiEvent noteOn = new MidiEvent(a, 5);
        track.add(noteOn);

        ShortMessage b = new ShortMessage();
        b.setMessage(ShortMessage.NOTE_OFF, 1, 44, 100);
        MidiEvent noteOff = new MidiEvent(b, 16);
        track.add(noteOff);

        player.setSequence(seq);

        player.start();

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

关于java - Javax.sound.midi学习代码无法在MacOS X上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580291/

相关文章:

java - 在Spring中调用Oracle过程以使用SimpleJdbcCall返回行

java - 不允许重命名或重新打包原始存档“sapjco3.jar”吗?

java - 任何 AspectJ 代码生成库(如 Sun 的 Java 代码生成代码模型)?

java - 当我一次使用 setcontentpane 时如何添加按钮?

java - 根据列表中的复选框创建新列表

java - JUnit:如果类已经扩展了某些东西,你如何扩展 TestCase?

java - 将嵌套的 for 循环减少为单个 for 循环

java - Java表输出到文件

java - 即使重复,HashMap也会添加所有项目

java - 通过Java核心API删除neo4j节点及其关系