midi文件在数据层面是如何实现音轨和通道互相对应的?

提问于
最后更新于
浏览 333次
登录并提问
3

最近在试着解析midi文件,一直以为一个音轨用一个通道。

鼓乐器用的是通道10,但是有些mid文件音轨都没有10个,有些mid文件多个音轨都是用的通道10。查资料也没找到,是哪个数据来表示某个音轨是对应哪个通道的。

提问于 2024年7月27日 下午8:27:21
2

在SMF的规格书里有提到这个:

Screenshot_20240728_074859.png

我猜这个元事件应该可以调整MIDI文件的通道对应的MIDI设备的通道。

你可以去MIDI Association官网去找一找,应该会有比较多的资料。

Eason20000
XP 481
Eason20000
回答于 24-7-28 上午7:52
1

有些抵挡MIDI软件,mid文件的音轨只有16个,如果只有10个音轨并且无弯音轮等等功能那就是娱乐性软件。但是简单软件也会有好处,其制作的音乐可以主要作为一般的歌声伴奏听效果。

班明峰
XP 9736
班明峰
回答于 24-7-30 上午12:31
0

音轨对应哪个通道?音轨是指在电脑音乐制作中,用于记录和播放特定某一个具体乐器的独立通道。软件的音序器中,音轨通常表现为一条条水平线的可随心所欲画的“皮带”,每条音轨可以定义属性——音色、音量、输入/输出端口等。一条水平“小道”音轨对应一个声部,它可以是MIDI数据(或音频数据),记录在发音的特定时间位置。每条个音轨都可映射某一种乐(音色)器的演奏。所有的音序器都允许多音轨多重奏操作,一首歌曲的所有音轨,无论是MIDI还是音频(例如mp3),都能同时播放。使音乐家可以逐步完成一首交响乐;标准MIDI文件(SMF)是MIDI的数据文件保存形式。

MIDI是电脑CPU 8位处理时期的产物,一系列的演奏信息通过8位的数值来区别及传输。其中又有位置字节和数据字节的差别。位置字节一定要位于8位数值的前面,有的信息-不包含数据字节(空字节)。

电脑中位置字节的数值在80H--FFH之间,数据字节在00H--7FH之间。一位数据,可以表示最大为127的值,所以MIDI数据解析度一般在0-127之间。所以同一个通道可以被多个音轨共享;而同一个音轨也可以包含多个通道事件。有些MIDI文件即使音轨数少于10个,也可以有多个音轨可让你选择使用通道10来播放打击乐。如同让许多人同时敲打不同的锣鼓“重重叠叠”发音……

班明峰
XP 9736
班明峰
回答于 24-7-30 上午1:01
0

MIDI文件在数据层面上实现音轨(Track)和通道(Channel)的互相对应,并不是通过直接的映射关系来完成的,而是通过MIDI事件(Events)中的通道号来指定每个事件(如音符事件)应该在哪个通道上播放。下面详细解释这一过程:


MIDI文件结构概述


MIDI文件是二进制文件,主要包含两部分:首部块(Header Chunk)和音轨块(Track Chunk)。首部块定义了MIDI文件的整体属性,如格式、轨道数等;而音轨块则包含了用于播放歌曲的具体数据信息。


音轨与通道的关系


音轨(Track):MIDI文件中的音轨是组织MIDI事件的一种方式,每个音轨可以包含多个MIDI事件,这些事件按时间顺序排列,共同构成了一个或多个乐器的演奏。音轨的数量可以在MIDI文件的首部块中指定。


通道(Channel):在MIDI中,通道是用来区分不同乐器或声部的方式。MIDI协议定义了16个通道(编号为0-15),每个通道可以独立地控制一个乐器或声部。需要注意的是,通道并不是MIDI文件的物理结构部分,而是MIDI事件中的一个参数。


MIDI事件中的通道号


在MIDI文件中,每个音符事件(或其他MIDI事件)都包含了通道号信息,这个信息指明了该事件应该在哪个通道上播放。例如,当MIDI事件表示“在通道10上开始演奏某个音符”时,它就会在事件数据中明确指定通道号为10。


通道号的表示


在MIDI事件中,通道号通常包含在状态字节(Status Byte)中。对于音符事件(如开始发音和关闭发音),状态字节的高四位为0x9(表示开始发音)或0x8(表示关闭发音),而低四位则指定了通道号。例如,0x9A表示在通道10(A的十六进制为10)上开始演奏一个音符。


结论


因此,MIDI文件并不是通过直接映射关系来实现音轨和通道的互相对应的。相反,它通过在MIDI事件中指定通道号来指示每个事件应该在哪个通道上播放。这意味着同一个通道可以被多个音轨共享,而同一个音轨也可以包含多个通道的事件。这也是为什么有些MIDI文件即使音轨数少于10个,也可能有多个音轨都使用通道10来播放鼓乐器的原因。


如果你需要更详细的技术文档或示例代码来解析MIDI文件,建议查阅MIDI相关的技术规范或开源项目。

回答于 24-7-29 下午8:35

您的回答

登录以回答

这儿是 MidiShow 问答区,欢迎您请教或帮大家解决关于音乐创作、MIDI 应用、MIDI 技术等音乐相关的问题。

问答区积分规则如下:


  1. 提问、回答或自问自答积分均不变
  2. 问题被赞成 : +10
  3. 问题被反对 : 提问者 -2,点击反对者不扣分
  4. 回答被赞成 : +10
  5. 回答被反对 : 回答者 -2,点击反对者 -1
  6. 提问者选出满意回答 :回答者 +15 ,提问者 +2

参与问答前请阅读:问答区玩法规则