如何缓解MIDI通道(Channel)用完的问题

我最近在做一个MIDI文件,MIDI还没做完,16个MIDI通道先用光了。
有什么好的缓解方法吗?

首先轨道通道不一样,这是一点

比如format0因为本身硬件带宽限制,所以只能使用16条channel

但这个问题放在format1或者是现代midi编辑全是软件的情况,那还能有什么限制(无非就是电脑放黑乐谱卡死了)

虽然说是可以随便塞,但是track发送掉那一条channel,依旧还是只能使用那条同样通道上同样的音色


本人在这些帖子讲的都杂,总结一点就是无论多少都能塞,但是音色你最多只能使用16条

看编排能力,乐谱上叠轨道真没必要了

1 Like

下图为测试(可点开查看)


上图共有38条track,平均分配到两条channel

这点无论是在以前的测试,也一样


可能这个功能的实际价值不高,但平时使用该功能运输钢琴乐谱(理论上没上限)

真是够方便了


附件:

虽然在track模式下我的软件可以单独调整每个声部(track)的音量大小,但是我猜这只是这个软件的设计。

按照正常情况来说,绝对会按照映射channel第1条track的音色信息往下走。(所以还是保持原话,音色还是只能使用16种,请考虑一番分配)


正常情况,播放器也不会显示那么多track
所以动一条通道里的音轨音量推子,按道理来说牵一发而动全身(该通道里的所有音轨都会一起动)


所以猜以上只是软件的设计,正常情况应该调不出这种参数(想搞弦乐多声部的尽快止步)

1 Like

楼上分析很到位,这里补一下个人的一些拙见
音轨理论上可以有无限个,但通道只有16个给你造
在不追求绝对还原原曲的情况下,想要活用这16个通道,一句话

PC实际上就是“音色库选择”,至少谜底手的自动简介里是这么写的,就是给通道换音色用的
这样每个通道理论上也能有很多个音色了,在不“捏”音色的情况下16条通道绝对够用,轨道就另说了。所以通道和轨道是有明显区别的。

综上,准确来说,是只能同时使用16种
问题本就不存在,更何谈缓解呢?
给个小小的例子:

顺便打个广告(
如果帖主没有特殊需求(比如必须搞成MIDI)的话还是建议用XM或者IT格式作曲,优点是可以自定义音色,什么样的音色都能塞,没有像声部“缺斤少两”的情况,缺点就是32条轨道上限。这是个把XM的轨道全部以最大限度用的作品(作者不是我)

2 Likes

这其实以前就说过,tracker文件本身并不透明也存在编译识别的难度(说人话就是不好转换,脱离某款软件后)

或许现在有openMtp会好一点,但在以前是一点办法都没有的(我只开放一个规范,那时候又没有什么开源概念)

ps:.mid看我像不像规范(GM),Roland(GS).Yamaha(XG)

反正早期的大概都是这样了


如果遇到下面这种情况,还要去专门下他的软件


这图上说的改标准就理解为是GS和XG,早年如果不买他们的设备,那么就算放到其他正常设备上播也会出问题。(那时候能有什么软件播放器,支持他们的私人格式)


这图上面我觉得说错了,xm你都可以理解成一个小型序器作曲软件(daw),又能塞采样又能塞音符。
midi 128说限制那未必,有些时候找不到自己想用的乐器只是想点开就用。好了说实话,128个涉及世界各地的乐器这挺多的了(基本上都能盖全,主要图的是方便省事,快捷作曲,重心肯定就不是音色设计)


总结不方便编辑(就算是起openmtp,软件界面也要适应)
一定要保留采样流采样流也可以像rpgmaker(mid+soundfont)
或许放现在,这样做已经很容易了


最后,追踪器音乐与mid本来开发的意义就不同。

这两个放一起对比,似乎没什么必要


追加:

那为什么mid早年都上了那么久,还是有人坚持使用xm

那这很好说,早期要用mid就必须要有音源(mt-32什么的…选一个呗) 成本就不如老老实实做xm来的便宜(可能持续到后面音源降价;稍微好转了点)


不过还是嘴太笨不说了,有兴趣可以读读以下这篇文章(现在完全脱离主题了感兴趣去看可以)

https://zhuanlan.zhihu.com/p/545318506

1 Like

感谢大佬们的回复,经过我的测试,我总结出了以下方法:

  1. 如果某些轨道不会相互冲突(例如:任何时刻都没有音符碰撞),可以让这些轨道都使用同一通道
  2. 可以使用Program Change和Bank Select事件更改通道乐器
  3. 如果不能再优化了,则只能用MIDI Port或Port Name元事件来使用新的端口,或者使用MIDI 2.0
1 Like

midi2这应该改个名字midi1.5或ex(按照他们的说法就是完全的拓展;没什么功能性更新)

mid带来的屎山也实在是不好改(特别是功能变动),虽然cc控制器有好多个未定义,但是总之应该是没有更新的(基本功能完全就和1.0一样,只是一个ex不用想太多了)


@Libamidi 你还是好好编排一下乐谱规模,同时使用16个音色已经是定数了。

如果这么搞的话还需要做两个mid,学会优化乐谱也是作midi的一环(尽管平时可能16条通道都用不满)

换个理解,钢琴弹左右手分轨需要发到同一条通道。弦乐多声部也需要这么干

并不是说有没有冲突(有不同的轨道,用同一个音色也可以这么干,但是我如果想让声场变宽点,这就不行了。肯定还是要用两个通道)

不过在播放途中改变PC确实也常见了(前几个音符弹的是钢琴,后面改笛子如何)
但也仅限于这个时间轴所有通道中间还有空隙,毕竟可能音乐是好听的但谱子(工程文件)很难看。或许是真的

1 Like

买个支持多端口的设备
image

3 Likes

如果目标是做曲子而不是做通用 MIDI 文件的话,多开几个音源实例就可以了吧。添加多 Port 即可。

2 Likes

也可以使用特定音源的功能,比如:


但是可以这样子做的大多是硬件音源,软件音源的话应该只有多 Port 没砍干净的 Roland Sound Canvas VA 可以通过类似的调节输入端口的方式使用更多音轨,不过用法可能仅限于叠音色。
(或许也可以再加上按键偏移和范围限制来将同一个 Port 中的 128 个按键分开使用,不过我没太研究过。)

2 Likes

软件实现的确是一种办法,不过。

好好想想单个mid,除开控制轨能指定音色的通道只有16条。(一个文件本身再多也放不下了)


感觉还是吃在控制轨的亏,限制都写死在底层。

要做通用midi还是要老实减轨道

SMF Type 1 中实际上有不那么官方但是被广泛支持的端口选择信息,以下是使用了它的 SMF 一例。

$ hexdump noname.mid -C
00000000  4d 54 68 64 00 00 00 06  00 01 00 03 01 e0 4d 54  |MThd..........MT|
00000010  72 6b 00 00 00 26 00 ff  03 00 00 ff 02 12 43 6f  |rk...&........Co|
00000020  70 79 72 69 67 68 74 20  28 43 29 20 32 30 32 36  |pyright (C) 2026|
00000030  00 ff 58 04 04 02 18 08  00 ff 2f 00 4d 54 72 6b  |..X......./.MTrk|
00000040  00 00 00 11 00 ff 03 00  00 ff 21 01 00 00 b1 07  |..........!.....|
00000050  00 00 ff 2f 00 4d 54 72  6b 00 00 00 11 00 ff 03  |.../.MTrk.......|
00000060  00 00 ff 21 01 01 00 b2  0b 00 00 ff 2f 00        |...!......../.|
0000006e

注意 MTrk 中的 ff 21

一般来讲是为了充分利用后期硬件音源的多个端口而设计的,在 Domino、TMIDI Player、aplaymidi 或是 MIDITrail 等软件中手动指定要使用的多个端口即可使用。

当然如果你的合成器或者音源并不支持多端口的话,那也白搭。对于软件音源的话,多开也不是不行,只不过那样很没意思,所以一般来讲能见到的多端口 SMF 都是为了一个或者一组特定设备(一般是硬件音源)而编写的。

一个为一组特定设备编写的 SMF 的例子(使用 SC-88 Pro 和 MU2000 播放):AIR OP 鸟之诗 MIDI演奏

这篇帖子里面有稍详细的解释:Multi-Port MIDI and Multi-Channel MIDI – Developers & MIDI 2.0 Specifications – MIDI.org Forum

MU2000 的光盘中似乎有形似 SMF Type 0 而也支持多端口的 MIDI,不太清楚是如何实现的。有机会的话我会研究一下。

2 Likes