首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javax.sound.midi研究在MacOS X上不起作用的代码

Javax.sound.midi研究在MacOS X上不起作用的代码
EN

Stack Overflow用户
提问于 2019-08-21 03:22:07
回答 1查看 115关注 0票数 2

我试图运行从javax.sound.midi包导入类的代码,但什么都不起作用。代码已成功编译并运行,但没有声音。我已经下载了soundbank for Java,并将其放在audio文件夹中,但它仍然不能工作。

Macbook Pro 2010年中

Mac OS X高山

2019-04-16 Java版本12.0.1

代码语言:javascript
复制
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)
代码语言:javascript
复制
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();}
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-08-21 03:40:21

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

  • 144 Event
  • 128备注关闭Event
  • 192用于更改默认仪器等的程序更改
  • 176用于发送事件的控件更改
  • 224间距折弯

例如,用a.setMessage(ShortMessage.NOTE_ON, 1, 44, 100);修改a.setMessage(128, 1, 44, 100);,你就会得到声音。

代码语言:javascript
复制
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();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57580291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档