音乐的 midi 规范允许将增量时间持续时间编码为整数值(表示节拍)。 例如,我有一个 960 的增量时间。 960 的二进制值为 1111000000。 问题是 midi 规范不会将数字编码为 16 位。 它将它编码为 14 位,然后在前 2 位加 10 以创建另一个 16 位值,1 表示有后续字节,0 表示它是最后一个字节。 我的问题是:如何轻松地将 960 计算为 14 位编码的二进制值? 干杯
最佳答案
在构成增量时间的字节中,最高有效位指定后面是否有另一个具有更多位的字节。
这意味着像 00001111000000
这样的 14 位值被分成两部分,0000111
和 1000000
,编码如下:
1 0000111 0 1000000
^ ^ ^ lower 7 bits
| | \
| \ last byte
\ upper 7 bits
more bytes follow
在 C 中,14 位值可以这样编码:
int value = 960;
write_byte(0x80 | ((value >> 7) & 0x7f));
write_byte(0x00 | ((value >> 0) & 0x7f));
(另见 arecordmidi.c 中的函数 var_value()
。)
关于c++ - (C++) 特定位数的整数(MIDI 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26223862/