gpt4 book ai didi

java - 编辑 MIDI 事件

转载 作者:行者123 更新时间:2023-11-30 09:29:57 27 4
gpt4 key购买 nike

我试图通过在钢琴卷帘编辑器中上下移动图形音符(矩形)来编辑序列中现有 MIDI 音符的音高。阅读 API 和在线文档,并没有具体说明如何编辑现有笔记。据我所知,我需要使用 setMessage() 方法来覆盖现有的 ShortMessage。这是我现在得到的:

public void changePitch(int pitchUpOrDown) {
MidiMessage message = this.getMessage();
message.setMessage(___?, ____?, ____? + pitchUpOrDown, ____?);
}

我通过鼠标拖动音符从 JPanel 调用 changePitch(),我发送 +1 或 –1 作为音高调整的增量。我找不到的是需要在 setMessage() 调用的其他四个空白参数中输入的值。从逻辑上讲,我想保留 command、channel 和 timestamp 的现有值,但如何访问这些现有值以便将它们放入空白中?我试过 message.command 或 message[0] 等,但它们不起作用。此外,在文档中,set Message 的 args 显示为(byte[] data,int length)。这些 args 的解释非常模糊,它们肯定与我最初用于创建 ShortMessage 的 args 不匹配。有什么建议吗?

最佳答案

MidiMessage 向下转换为 ShortMessage 然后你可以得到音调和速度作为 data1 和 data2:

if (message instanceof ShortMessage) {
ShortMessage shortMessage = (ShortMessage) message;

if(shortMessage.getCommand() == ShortMessage.NOTE_ON) {
int channel = shortMessage.getChannel();
int pitch = shortMessage.getData1();
int vel = shortMessage.getData2();
if(vel > 0) {
shortMessage.setMessage(ShortMessage.NOTE_ON, channel, pitch + pitchUpOrDown, vel);
}
}
}

您可能还需要更改下一条 NOTE_OFF 消息。这将是带有 NOTE_OFF 命令的短消息,或者速度为 0 的 NOTE_ON 命令。

关于java - 编辑 MIDI 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13461690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com