【发布时间】:2020-05-31 14:41:36
【问题描述】:
我有一个 Midi 键盘,当插入我的程序时,我可以将每个按下的值变为红色,但我很难找到合适的方法将每个 Note ID 转换为特定的音符。
键 ID 从 128 跳转到 640 到 1152 到 1408,每按一次键,它就会增加。
这是我尝试将 id 转换为音符的一些方法,但没有一种方法能够产生我想要的比例。
FTYPE CSscaleConvert(const int noteID)
{
double d12th = pow(2.0, 1.0 / 12.0);
//noteID = noteID * 0.01;
//return 12 * log2((noteID / 100) / 440.0);
return 0.256 * pow(d12th, noteID);
//return 440 * log2(noteID * 0.01 - 69) / 12;
//return noteID * 0.256;
//return noteID;
}
【问题讨论】:
-
您如何阅读和解析音符开/关事件?请记住,数据分为两个字节,每个字节都有特殊的含义(分别是键和速度)。还要记住,每个字节仅使用 7 位来表示音符 ID 和速度。
-
wcout
-
我得到了id和速度的咬合的LO和HI
-
如果您使用 Windows
HIWORD和LOWORD宏,它们会从 32 位双字中检索 16 位 字。 Midi 协议是基于 byte 的。你有读过the specifications? -
我对这方面的编程很陌生,我已经阅读了一些规范,但如果您可以发送对一些来源的参考,我真的无法在网上找到任何细节,我将不胜感激跨度>