我最近在做一个MIDI文件,MIDI还没做完,16个MIDI通道先用光了。
有什么好的缓解方法吗?
如何缓解MIDI通道(Channel)用完的问题
首先轨道和通道不一样,这是一点
比如format0因为本身硬件带宽限制,所以只能使用16条channel
但这个问题放在format1或者是现代midi编辑全是软件的情况,那还能有什么限制(无非就是电脑放黑乐谱卡死了)
虽然说是可以随便塞,但是track发送掉那一条channel,依旧还是只能使用那条同样通道上同样的音色
本人在这些帖子讲的都杂,总结一点就是无论多少轨都能塞,但是音色你最多只能使用16条
看编排能力,乐谱上叠轨道真没必要了
下图为测试(可点开查看)
上图共有38条track,平均分配到两条channel
这点无论是在以前的测试,也一样
可能这个功能的实际价值不高,但平时使用该功能运输钢琴乐谱(理论上没上限)
真是够方便了
附件:
虽然在track模式下我的软件可以单独调整每个声部(track)的音量大小,但是我猜这只是这个软件的设计。
按照正常情况来说,绝对会按照映射channel第1条track的音色信息往下走。(所以还是保持原话,音色还是只能使用16种,请考虑一番分配)
正常情况,播放器也不会显示那么多track
所以动一条通道里的音轨音量推子,按道理来说牵一发而动全身(该通道里的所有音轨都会一起动)
所以猜以上只是软件的设计,正常情况应该调不出这种参数(想搞弦乐多声部的尽快止步)
楼上分析很到位,这里补一下个人的一些拙见
音轨理论上可以有无限个,但通道只有16个给你造
在不追求绝对还原原曲的情况下,想要活用这16个通道,一句话
PC实际上就是“音色库选择”,至少谜底手的自动简介里是这么写的,就是给通道换音色用的
这样每个通道理论上也能有很多个音色了,在不“捏”音色的情况下16条通道绝对够用,轨道就另说了。所以通道和轨道是有明显区别的。
综上,准确来说,是只能同时使用16种
问题本就不存在,更何谈缓解呢?
给个小小的例子:
顺便打个广告(
如果帖主没有特殊需求(比如必须搞成MIDI)的话还是建议用XM或者IT格式作曲,优点是可以自定义音色,什么样的音色都能塞,没有像声部“缺斤少两”的情况,缺点就是32条轨道上限。这是个把XM的轨道全部以最大限度用的作品(作者不是我)
这其实以前就说过,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来的便宜(可能持续到后面音源降价;稍微好转了点)
不过还是嘴太笨不说了,有兴趣可以读读以下这篇文章(现在完全脱离主题了感兴趣去看可以)
感谢大佬们的回复,经过我的测试,我总结出了以下方法:
- 如果某些轨道不会相互冲突(例如:任何时刻都没有音符碰撞),可以让这些轨道都使用同一通道
- 可以使用Program Change和Bank Select事件更改通道乐器
- 如果不能再优化了,则只能用MIDI Port或Port Name元事件来使用新的端口,或者使用MIDI 2.0
midi2这应该改个名字midi1.5或ex(按照他们的说法就是完全的拓展;没什么功能性更新)
mid带来的屎山也实在是不好改(特别是功能变动),虽然cc控制器有好多个未定义,但是总之应该是没有更新的(基本功能完全就和1.0一样,只是一个ex不用想太多了)
@Libamidi 你还是好好编排一下乐谱规模,同时使用16个音色已经是定数了。
如果这么搞的话还需要做两个mid,学会优化乐谱也是作midi的一环(尽管平时可能16条通道都用不满)
换个理解,钢琴弹左右手分轨需要发到同一条通道。弦乐多声部也需要这么干
并不是说有没有冲突(有不同的轨道,用同一个音色也可以这么干,但是我如果想让声场变宽点,这就不行了。肯定还是要用两个通道)
不过在播放途中改变PC确实也常见了(前几个音符弹的是钢琴,后面改笛子如何)
但也仅限于这个时间轴所有通道中间还有空隙,毕竟可能音乐是好听的但谱子(工程文件)很难看。或许是真的
买个支持多端口的设备

如果目标是做曲子而不是做通用 MIDI 文件的话,多开几个音源实例就可以了吧。添加多 Port 即可。
也可以使用特定音源的功能,比如:
但是可以这样子做的大多是硬件音源,软件音源的话应该只有多 Port 没砍干净的 Roland Sound Canvas VA 可以通过类似的调节输入端口的方式使用更多音轨,不过用法可能仅限于叠音色。
(或许也可以再加上按键偏移和范围限制来将同一个 Port 中的 128 个按键分开使用,不过我没太研究过。)
软件实现的确是一种办法,不过。
好好想想单个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,不太清楚是如何实现的。有机会的话我会研究一下。




