gpt4 book ai didi

parsing - MIDI 解析 - 如何知道 0xFF 字节代表什么?

转载 作者:行者123 更新时间:2023-12-04 06:01:13 25 4
gpt4 key购买 nike

我只是在写我自己的 MIDI 解析器,我想知道如何区分 0xFF指定完整的实时类别消息 Reset从开始有些Meta-event也用 0xFF 编码然后是一些字节(例如 FF 2F 00 -> End of track )。

最佳答案

MIDI 线 , MIDI 信息在它们要发生的瞬间被传输。一个 MIDI 文件 实际上是记录带时间戳的 MIDI 消息,以便稍后播放。时间戳和 MIDI 消息的组合称为事件。出现在 MIDI 电缆上的消息与出现在 MIDI 文件中的事件之间存在一些差异。

你是对的,在 MIDI 电缆上,一字节的实时消息可以出现在其他消息的字节中间。但是,在 MIDI 文件中,跟踪每个事件的确切字节数很重要,因此实时消息不能存储在其他事件中间的 MIDI 文件中。

System Exclusive 事件对于存储在 MIDI 文件中很有用,但一般来说,将任何其他 System Common 或 System Real-Time 消息存储在 MIDI 文件中是没有意义的。

  • $FF 重置:在 MIDI 电缆中,状态字节 $FF 表示重置。但是,当您播放 MIDI 文件时,在播放期间重置接收 MIDI 设备通常没有意义。因此,在 MIDI 文件中,重新定义了 $FF 状态字节以指示元事件。
  • $F6 调谐请求:如果设备响应此消息,我认为它会进行一些内部调谐校准,这会中断任何正在进行的播放。与重置消息类似,中断 MIDI 文件内部的播放是没有意义的。
  • 时钟、位置和开始/停止消息 ($F1 MIDI 时间码四分之一帧,$F2 歌曲位置指针,$F3 歌曲选择,$F8 时钟,$FA 开始,$FB 继续,$FC 停止):录制 MIDI 文件的设备或软件通常不会将这些传入的消息记录到 MIDI 文件中。但是,设备可能有一个选项来解释这些消息,以实际重新定位、开始、停止或控制播放或录制的速度。播放 MIDI 文件的设备或软件可能具有将这些消息发送到 MIDI 输出端口的选项,以控制除了 MIDI 文件音符之外正在播放自己部分的其他 MIDI 设备。由于这种用法,MIDI 播放器负责发送这些时钟、位置和开始/停止消息,而不是 MIDI 文件。
  • $FE 主动感应:如果发送设备发送此消息,则将其用作空闲填充符以表明电缆仍正确连接。如果接收设备开始看到 Active Sensing 消息然后停止,它可以将其解释为电缆断开连接并使挂起的音符静音。将空闲填充器存储在 MIDI 文件中是没有用的。发送它是发送设备的功能,而不是 MIDI 文件的责任。

  • 如果您确实需要将 System Common 或 System Real-Time 消息存储在 MIDI 文件中,我相信它们可以存储在 MIDI 文件中的 $F7 事件中。我的理解是 $F7 事件中存储的数据字节将在 MIDI 电缆上逐字传输。 Sonic Spot document将 $F7 的这种用法称为“Authorization SysEx”事件(滚动到文档底部)。 MIDI Technical Fanatic's Brainwashing Center文档 MIDI File Format将 $F7 的这种用法称为“转义”事件(请参阅“MTrk 中的事件”页面)。 MIDI 音序器软件 Sekaiju将 $F7 称为“SysEx(任意)”事件。

    一般警告:在 MIDI Manufacturers Association 上您可以在网站上找到一些 official information (标准的表格和附录)或在 forum 上提问.但是您可能知道, official MIDI standards cost money 的主要内容.我没有购买过,所以我上面的理解是基于第三方网站的描述和MIDI软件的一般用法。您应该始终意识到,第三方的解释可能与官方标准不同。 (例如,Jeff Glatt 的 MIDI Technical Fanatic's Brainwashing Center 文档 MIDI Specification 说 $F9 是 Tick 消息,但 MMA 说该消息 $F9 is undefined and reserved。Glatt 说 General MIDI program 47 is Orchestral Strings,MMA 说 program 47 is Orchestral Harp。)

    关于parsing - MIDI 解析 - 如何知道 0xFF 字节代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8870080/

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