Javax.sound.midi 学习代码不适用于 MacOS X

标签 java

我正在尝试运行从 javax.sound.midi 包导入类的代码,但没有任何效果。代码已经编译运行成功,但是没有声音。 我已经下载了 Java 的音库,并将它放在 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 Activity 注意事项
  • 128 Note Off 事件
  • 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();
    }
}

关于Javax.sound.midi 学习代码不适用于 MacOS X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580291/

相关文章:

java - 在java中启动独立的zookeeper服务器

用于测试自动化框架的Java空指针异常

java - XStream - 作为对象集合的根

java - 设置使用热敏打印机打印 JFrame 内容

java - 如何在 Avro 中处理具有循环引用的对象

java - 创建没有指针别名的编程语言的可能性

java - @autowired on Spring 中的方法

java - 有没有办法在Java中获取方法参数的名称?

java - cloudinary java无法上传图片

java - VS中的 Release模式和 Debug模式