【问题标题】:C++ Converting MIDI Note ID in a noteC++ 在音符中转换 MIDI 音符 ID
【发布时间】: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 HIWORDLOWORD 宏,它们会从 32 位双字中检索 16 位 字。 Midi 协议是基于 byte 的。你读过the specifications?
  • 我对这方面的编程很陌生,我已经阅读了一些规范,但如果您可以发送对一些来源的参考,我真的无法在网上找到任何细节,我将不胜感激跨度>

标签: c++ audio


【解决方案1】:

对于其他可能遇到此问题的人,我以前使用它来尝试访问数据 wcout

但这是正确的做法

HIBYTE(dwParam1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2022-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多