C++ 在音符中转换 MIDI 音符 ID
Posted
技术标签:
【中文标题】C++ 在音符中转换 MIDI 音符 ID【英文标题】:C++ Converting MIDI Note ID in a note 【发布时间】: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 如果您使用 WindowsHIWORD
和 LOWORD
宏,它们会从 32 位双字中检索 16 位 字。 Midi 协议是基于 byte 的。你有读过the specifications?
我对这方面的编程很陌生,我已经阅读了一些规范,但如果您可以发送对一些来源的参考,我真的无法在网上找到任何细节,我将不胜感激跨度>
【参考方案1】:
对于其他可能遇到此问题的人,我以前使用它来尝试访问数据 wcout
但这是正确的做法
HIBYTE(dwParam1)
【讨论】:
以上是关于C++ 在音符中转换 MIDI 音符 ID的主要内容,如果未能解决你的问题,请参考以下文章