【发布时间】:2020-09-06 09:52:08
【问题描述】:
我是 MIDI 方面的新手,所以请不要对我残忍 :) 我有一个 Yamaha midi 文件,其中包含一些部分,例如 Midi Header 部分、CASM 部分、OTS 部分、MDB 部分和 MH 部分。 我想关注一下 OTS 部分。 OTS 部分包含 ID = 4 字节、数据长度 = 4 字节和数据。数据是一个 MIDI 文件结构块,但它不包含音符,只有使用的通道等设置,以及每个通道的设置,如使用语音的 MSB-LSB-PC、音量、和声等。 问题是如何检索使用的通道,如何检索使用的 MSB-LSB-PC 对语音/鼓? NAudio 可以这样做还是我必须使用其他 MIDI 包工具?
编辑:
OTS 数据将包含至少一个 OTS 轨道。每个 OTS Track 的结构如下:
byte[0]->byte[3] = 'MTrk' (midi track header of SMF)
byte[4]->byte[7] = 256*256*256*byte[4] + 256*256*byte[5] + 256*byte[6] + byte[7] -> Data length on OTS Track.
byte[8]->byte[n] = SMF data of OTS Track.
因此,OTS 数据将至少包含一次这种结构。我将能够读取每个 OTS Track,但我不知道哪些 C# 指令可以从那些 OTS Track Data SMF 数据中获取那些 MSB-LSB-PC 信息...
【问题讨论】:
-
我是 DryWetMIDI 库的作者,它允许您读取 MIDI 数据,包括自定义块(如 OTS)。但当然,您需要自己编写代码来读取您的自定义块。 Here 定义自定义块的示例,以便您可以阅读它。另外,您能否提供一些带有 OTS 块的示例文件?
-
嗨@Maxim。我已经编辑了我的问题。请告诉我如何使用您的库来读取 SMF 中频道的 MSB-LSB-PC?
-
为了帮助你,我需要知道 OTS 块的确切格式。因为它是一个 MIDI 块,所以我知道它的标题。但是 chink 内容是什么? “OTS Track的SMF数据”是什么?我也不知道什么是“MSB-LSB-PC”。除了格式信息,您可以提供带有 OTS 块的文件吗?你也可以create new issue on GitHub.
-
wierzba.homepage.t-online.de/stylefiles.htm 这是一个文件,它将详细解释样式文件包含的内容。我需要知道(提取)来自 OTSc 的数据。 mediafire.com/file/d4ryg390q5qdkqu/… 这是一个包含 OTSc 块的 Yamaha Style 文件。我必须从那里提取所有 OTS 音轨,并为每个 OTS 音轨提取一些信息,例如程序更改(包括用于选择正确语音的 MSB 和 LSB)音量、和声和其他数据...
-
现在你应该自己做很多工作。 但是我做了快速测试,我会尝试在 DryWetMIDI 中提供一个 API,让您可以轻松读取 OTS 块。一旦我实现了那个 API,我会发布一个答案。我想我今天或明天会这样做。感谢您分享您的案例!