gpt4 book ai didi

java - 使用 MetaMessage getData() 和/或 MetaMessage 值从 java 中的 MIDI 文件中提取节奏?

转载 作者:行者123 更新时间:2023-12-01 17:21:43 25 4
gpt4 key购买 nike

使用this thread我已经弄清楚如何使用 getData(),但我得到的不是 0x51 的任何内容,而是随机值,例如 [B@37d78d93、[B@29d74462 和 [B@1c5ca652

]

输出元消息本身也会产生类似的值,例如 javax.sound.midi.MetaMessage@364d4fca、javax.sound.midi.MetaMessage@5581f86d 和 javax.sound.midi.MetaMessage@3f011b2b

例如,使用

System.out.print("元消息为"+mm+",");

System.out.print("元消息的类型为"+ mm.getType());

System.out.println("并且数据为"+ mm.getData());

输出

元消息为javax.sound.midi.MetaMessage@3f011b2b,元消息类型为81,数据为[B@1c5ca652

如何使用输出的 mm 值末尾的值或从 mm.getData() 获取的值来获取 MIDI 文件的速度?

最佳答案

获得节奏 MetaMessage 后,您可以使用此代码获取每分钟节拍的节奏。

   /**
* Get the tempo in BPM coded in a Tempo Midi message.
*
* @param mm Must be a tempo MetaMessage (type=81)
* @return
*/
static public int getTempoInBPM(MetaMessage mm)
{
byte[] data = mm.getData();
if (mm.getType() != 81 || data.length != 3)
{
throw new IllegalArgumentException("mm=" + mm);
}
int mspq = ((data[0] & 0xff) << 16) | ((data[1] & 0xff) << 8) | (data[2] & 0xff);
int tempo = Math.round(60000001f / mspq);
return tempo;
}

关于java - 使用 MetaMessage getData() 和/或 MetaMessage 值从 java 中的 MIDI 文件中提取节奏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61280817/

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