gpt4 book ai didi

c++ - (C++) 特定位数的整数(MIDI 文件)

转载 作者:行者123 更新时间:2023-11-28 02:40:16 25 4
gpt4 key购买 nike

音乐的 midi 规范允许将增量时间持续时间编码为整数值(表示节拍)。例如,我有一个 960 的增量时间。960 的二进制值为 1111000000。问题是 midi 规范不会将数字编码为 16 位。它将它编码为 14 位,然后在前 2 位加 10 以创建另一个 16 位值,1 表示有后续字节,0 表示它是最后一个字节。我的问题是:如何轻松地将 960 计算为 14 位编码的二进制值?干杯

最佳答案

在构成增量时间的字节中,最高有效位指定后面是否有另一个具有更多位的字节。这意味着像 00001111000000 这样的 14 位值被分成两部分,00001111000000,编码如下:

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/

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