gpt4 book ai didi

计算 Midi Sample Dump Standard 数据包的校验和

转载 作者:行者123 更新时间:2023-11-30 15:44:44 24 4
gpt4 key购买 nike

我正在尝试编写 Midi 样本转储标准的开源实现,并且很难理解为什么我为来 self 正在测试的设备的每个数据包计算的校验和与设备正在发送的校验和。我写的代码是here ,并且有关于 SDS 规范的有用信息 here 。希望有更多使用按位运算符经验的人能够发现我做错了什么!

最佳答案

自从提出这个问题以来,五年的时间对于令人尊敬的 MIDI 样本转储标准的生命周期来说只是一瞬。对于其他寻求这种神秘知识的人,我将在这里给出答案。MIDI 样本转储消息包含 21 字节的 header 和可变数量的样本数据包,每个数据包 127 字节(我们称它们为 0 到 126)。每个数据包在字节号 125 处都有一个校验和。它是通过连续异或数据包中从字节号 1 到字节 124(包括字节号 124)的每个字节来计算的。然后将结果与 0x7F 进行“与”运算(将状态位清零)。以下是从 libsndfile 中的“sds.c”中提取的相关代码。请注意,此代码还验证字节 1 是否为 0x7E,这表明这是一个示例转储消息。

checksum = psds->read_data [1] ;
if (checksum != 0x7E)
{ printf ("Error 1 : %02X\n", checksum & 0xFF) ;
}

for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
checksum ^= psds->read_data [k] ;

checksum &= 0x7F ;

关于计算 Midi Sample Dump Standard 数据包的校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19350943/

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