gpt4 book ai didi

java - 将连续 Controller 数据写入 MIDI 文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:40 24 4
gpt4 key购买 nike

我正在尝试编写一个java程序,从图像中读取数据并将其转换为midi数据。我已经使用正确的 MIDI 音符打开和音符关闭消息创建了多个轨道。但是,我还想将连续的 Controller 数据写入每个轨道(未使用的 slider 或旋钮,而不是调制轮或弯音等预定 channel 之一)。我假设我需要使用 CONTROL_CHANGE ShortMessage 做一些事情,但我可能是错的。 (http://docs.oracle.com/javase/7/docs/api/javax/sound/midi/ShortMessage.html#CONTROL_CHANGE)。我真的没有java编程知识来解决这个问题。这是迄今为止我创建音符开/关 MIDI 数据的内容。我假设连续 Controller 数据将具有类似的设计。任何帮助将不胜感激。

    private static MidiEvent createNoteOnEvent(int nKey, long lTick)
{
return createNoteEvent(ShortMessage.NOTE_ON,
nKey,
VELOCITY,
lTick);
}

private static MidiEvent createNoteOffEvent(int nKey, long lTick)
{
return createNoteEvent(ShortMessage.NOTE_OFF,
nKey,
0,
lTick);
}

private static MidiEvent createNoteEvent(int nCommand,
int nKey,
int nVelocity,
long lTick)
{
ShortMessage message = new ShortMessage();
try {
message.setMessage(nCommand,
0,
nKey,
nVelocity);
}
catch (InvalidMidiDataException e)
{
e.printStackTrace();
System.exit(1);
}
MidiEvent event = new MidiEvent(message,
lTick);
return event;
}

private static void out(String strMessage)
{
System.out.println(strMessage);
}

最佳答案

解决了,以防其他人遇到同样的问题。十六进制 0xB0 只是标准的连续 Controller 数据通道。只需键入 17,不需要十六进制。其他 channel 可以通过谷歌搜索 midi 格式或类似的东西找到:

private static MidiEvent createCCData(int cc, int val, long lTick) {
ShortMessage mm = new ShortMessage();
mm = new ShortMessage();
try {
mm.setMessage(0xB0,cc,val);
}
catch (InvalidMidiDataException e) {
e.printStackTrace();
System.exit(1);
}
MidiEvent me = new MidiEvent(mm,lTick);
return me;
}

关于java - 将连续 Controller 数据写入 MIDI 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9423180/

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