作为计算机音乐发展史上的里程碑级协议,MIDI(Musical Instrument Digital Interface,乐器数字接口)诞生40余年来,从未被彻底淘汰——反而随着电子音乐复兴、DAW(数字音频工作站)生态成熟、AI编曲工具爆发,重新回到了普通音乐爱好者与硬核极客的视野,但很多刚接触数字音乐的朋友拿到.mid文件(MIDI标准的二进制存储格式)时,第一反应还是“这玩意儿打不开啊?双击只有个错误弹窗?”
别急,本文会从基础播放场景(PC端、移动端、网页端一站式覆盖)、进阶创作/编辑场景(从入门DAW到专业MIDI制谱工具)、极客专属场景(开源硬件MIDI解码、Python脚本处理)三个维度,给你最全面、最有实操性的解决方案,还会穿插MIDI协议的硬核知识点、我自己10年数字音频创作中的踩坑经验,以及具体的代码/操作实例,全文约2800字,阅读时间约7分钟。
先搞懂:.mid文件到底是什么?(打开前的前置知识,避免踩兼容性坑)
很多人把.mid和.mp3/.wav/.flac搞混——后者是采样音频文件,相当于把“乐器演奏的声音振动波形”录下来压缩存储,所以体积大(一首3分钟的无损WAV有30MB左右),但不需要额外硬件就能完整还原;而.mid是指令文件,相当于给“虚拟/物理电子乐器”写的“乐谱+演奏控制表”,只记录「在什么时间、用什么音色、按哪个音、按多大力、按多久、要不要弯音/颤音/踏板」等纯数字指令,体积极小(一首3分钟的流行歌MIDI可能只有10KB-50KB),必须依赖“MIDI合成器(无论是软件还是硬件)”才能发声。
踩坑预警1:“MIDI文件有不同规范,兼容性优先选GM1/GS/XG Lite的”
MIDI从1983年MMA(MIDI制造商协会)推出GM1(General MIDI Level 1)通用标准后,还衍生出了GS(Roland)、XG(Yamaha)、GM2、XG Lite、GM Lite等子规范——
GM1是最通用的基础规范,强制规定了128个通用乐器音色(0是大钢琴,1是亮音钢琴,127是枪声等打击乐音效补充)、10个打击乐通道(通常是第10/16通道?不,GM1强制第10通道是打击乐)、16个总MIDI通道、127个力度值,所有MIDI合成器都支持,适合小白和跨平台播放;
GS/XG是Roland/Yamaha的扩展规范,有更多音色库、更细的控制参数,但如果播放GS/XG文件用只有GM1的合成器,可能会缺音色、打击乐错位;
踩过的坑:我2018年下载过一首B站UP主做的《千本樱》XG版MIDI,双击用Windows Media Player播放,打击乐全跑到弦乐通道去了,后来转成GM1格式才正常。
基础播放场景:1分钟上手,跨平台全兼容
如果你的需求只是“听听.mid是什么声音”“给小朋友当钢琴伴奏素材”“给短视频配个无版权BGM前奏”,不需要编辑,那下面这几个工具就够了,操作都非常简单。
场景1.1:PC端(Windows/MacOS/Linux)
1.1 Windows自带播放器(零安装,最便捷)
很多人不知道,Windows从XP开始就自带了GM1兼容的软件MIDI合成器(Microsoft GS Wavetable Synth)和播放工具——只是Win10/Win11把默认打开方式藏起来了!
具体操作实例:
找到你的.mid文件,右键点击→「打开方式」→「选择其他应用」;
拉到最下面→「更多应用」→再拉到最下面→「在这台电脑上查找其他应用」;
导航到「C:\Windows\System32」文件夹,找到「wmplayer.exe」(Windows Media Player)或者「mplay32.exe」(老版Windows Media Player,界面更复古,但播放GM1更稳定);
勾选「始终使用此应用打开.mid文件」,以后双击就能直接打开了!
我的观点:Windows自带的合成器是“能用但难听”的典型——音色是采样率22.05kHz、8位(早期是16位,但后来为了省内存缩水过?不对,Win7以后恢复了16位,但采样库还是1999年的,叫“Microsoft Roland GS Wavetable SW Synth”,但其实是Roland给微软授权的简化版),大钢琴像“敲塑料桶”,小提琴像“锯木头”,只能用来“听个响、识个谱”,如果对音质有一点点要求,别用。
1.2 MacOS/Linux自带播放器(零安装,音质还行)
MacOS从OS X 10.0开始自带了Apple DLS Synthesizer,Linux(Ubuntu/Fedora等主流发行版)从2010年左右默认预装了FluidSynth + SoundFont通用库(比如FluidR3 GM),音质比Windows自带的好太多——大钢琴有“木质共鸣”,小提琴有“揉弦的微弱变化”。
MacOS具体操作实例:直接双击.mid文件,默认会用「QuickTime Player」打开,点击播放键就行;如果想换音色库,需要用「Audio MIDI Setup」(在Launchpad的「其他」文件夹里)→「窗口」→「显示MIDI窗口」→双击「Apple DLS Synthesizer」→「SoundFont」选择你下载的第三方优质SoundFont;
Linux(Ubuntu 22.04 LTS)具体操作实例:
直接双击.mid文件,默认会用「Rhythmbox」(音乐播放器)打开,但需要先确保FluidSynth插件已启用:打开Rhythmbox→「编辑」→「插件」→勾选「MIDI Player」;
如果插件没启用,或者想单独安装更轻量的FluidSynth GUI,打开终端(快捷键Ctrl+Alt+T),输入以下代码安装(分段清晰,连输入提示都有,小白也能看懂):# 第一步:更新软件源(必须,否则可能找不到插件)
sudo apt update
# 第二步:安装FluidSynth、FluidSynth通用GM库、FluidSynth GUI工具Qsynth
sudo apt install fluidsynth fluid-soundfont-gm qsynth
# 第三步:启动Qsynth(以后可以在应用程序里找)
qsynth
启动Qsynth后,点击「Setup」→「Soundfonts」→「Open」→选择「/usr/share/sounds/sf2/FluidR3_GM.sf2」(默认路径),然后点击「File」→「Open MIDI File」,选择你的.mid文件就能播放了!
1.3 零门槛PC端第三方播放器(音质+操作兼备)
如果你不想折腾系统自带的工具,又想快速提升音质,推荐以下两款免费/半免费工具:
CoolSoft VirtualMIDISynth(Windows专用,免费):这是我现在Windows上默认的MIDI合成器+播放器前置插件——可以加载多个优质第三方SoundFont(SGM-V2.01.sf2」(1.4GB,音色接近专业电子琴)、「Timbres of Heaven XG.sf2」(3.7GB,支持XG/GM2扩展)),音质直逼千元级电子琴,而且可以替换Windows Media Player、浏览器、游戏的默认MIDI合成器!
具体操作踩坑提醒:安装后必须重启电脑,否则系统不会识别;加载SoundFont时要注意优先级——比如把SGM-V2.01放在第一位,Timbres of Heaven放在第二位,这样普通GM1文件用SGM,XG文件会自动调用Timbres of Heaven(如果设置了支持扩展)。
VLC Media Player(全平台通用,免费):很多人只知道VLC能播放视频、采样音频,不知道它也能播放MIDI——但需要先手动加载SoundFont,而且音质一般(不如CoolSoft/Qsynth),适合“不想安装专门MIDI工具,偶尔用用”的场景。
场景1.2:移动端(iOS/Android)
2.1 iOS(iPhone/iPad)
iOS的音频生态非常成熟,自带的「库乐队(GarageBand)」不仅能播放MIDI,还能编辑、创作,但如果只是想“快速听个响”,推荐以下两款免费工具:
MIDI Melody Player(免费,无广告):界面简洁,支持加载第三方SoundFont(需要把SoundFont用AirDrop/微信文件传输助手传到「文件」APP的「MIDI Melody Player」文件夹里),支持变速、变调、循环播放某一段,适合当钢琴伴奏练习工具;
完美钢琴(半免费,有广告,但VIP不贵):除了能播放MIDI,还能跟着MIDI的指示在屏幕上弹钢琴,支持显示五线谱/简谱,适合小朋友学琴。
2.2 Android
Android的音频生态稍微混乱一点,但也有不错的免费工具:
MIDI Player(免费,无广告,Google Play评分4.7):和iOS的MIDI Melody Player类似,支持加载第三方SoundFont,支持变速、变调、循环播放;
Walk Band(半免费,有广告,功能强大):除了能播放MIDI,还能当电子琴、吉他、鼓机用,支持录音、编辑MIDI,适合入门音乐创作。
场景1.3:网页端(零安装,跨设备)
如果你不想在手机/电脑上安装任何工具,只是想“临时听一下朋友发的MIDI文件”,推荐以下两个免费网页工具:
Online MIDI Player(https://onlinemidipro.com/):界面简洁,支持上传本地MIDI文件,支持GM1/GS/XG扩展(自动加载网页端的Timbres of Heaven Lite SoundFont),支持变速、变调、显示五线谱/简谱,我有时候在公司摸鱼听MIDI就用这个;
MIDI.js Demo(https://midijs.github.io/):这是一个开源的网页端MIDI合成器库的Demo,不仅能播放本地MIDI文件,还能上传本地SoundFont,适合技术宅研究。
进阶创作/编辑场景:从入门小白到专业音乐人
如果你的需求不只是“听个响”,而是“想修改MIDI里的某个音”“想给MIDI加个鼓点”“想把MIDI导出成采样音频(比如MP3/WAV)”“想用MIDI做专业的电子音乐/配乐”,那你需要DAW(数字音频工作站)或者专业MIDI制谱工具。
场景2.1:入门级DAW(小白上手快,功能够用)
1.1 库乐队(GarageBand,MacOS/iOS免费,Windows没有)
这是我见过的最好的入门级DAW——没有之一!界面简洁,操作逻辑符合普通人的音乐思维,自带了大量优质的虚拟乐器(比如Alchemy合成器、Drummer智能鼓)、效果器(比如混响、延迟、压缩),支持MIDI导入/编辑/录音/导出采样音频,而且可以直接导出到Logic Pro(苹果的专业级DAW)继续创作。
具体操作实例(导入并编辑MIDI):
打开库乐队,选择「新项目」→「空项目」→「软件乐器」(创建一个虚拟乐器轨道);
在轨道区域的空白处右键点击→「导入MIDI文件」,选择你的.mid文件;
库乐队会自动把MIDI文件的每个通道拆分成单独的虚拟乐器轨道,你可以点击轨道上的「乐器」图标换音色,点击「编辑器」按钮(右上角的剪刀图标)进入MIDI编辑界面,修改音高、力度、时长、添加弯音/颤音/踏板等;
编辑完成后,点击「共享」→「导出歌曲到磁盘」,选择MP3/WAV/AAC格式就能导出采样音频了!
我的观点:如果你用的是MacOS/iOS,别犹豫,直接用库乐队入门——它会让你爱上数字音乐创作,而不是被复杂的界面劝退。
1.2 FL Studio Fruity Edition(Windows/MacOS,入门版约600元,终身免费升级)
如果你用的是Windows,或者想做电子音乐(比如EDM、Hip Hop、Techno),那FL Studio(俗称“水果”)是最好的选择——界面是“钢琴卷帘窗+步骤音序器”的组合,非常适合做有节奏的音乐,自带了大量优质的电子合成器、鼓机、采样包,入门版Fruity Edition虽然功能有限制(比如不能加载第三方VST插件,不能导出视频同步的音频),但完全够用小白入门学习MIDI编辑。
我的观点:FL Studio的“终身免费升级”政策非常良心——我2015年买的FL Studio 12 Producer Edition(当时约1200元),现在已经免费升级到了FL Studio 24,相当于赚了好几千块钱!
场景2.2:专业级DAW(专业音乐人首选,功能强大)
2.1 Logic Pro(MacOS专用,专业版约1600元,终身免费升级)
这是苹果的专业级DAW,被很多流行音乐制作人、影视配乐师、电子音乐制作人使用——比如Taylor Swift的《Midnights》专辑、漫威的《复仇者联盟4》部分配乐,都是用Logic Pro做的,它自带了Alchemy合成器、Drummer Pro智能鼓、Space Designer卷积混响等顶级工具,支持MIDI深度编辑(比如MIDI Learn、MIDI CC曲线编辑)、加载第三方VST/AU插件、多轨录音、视频同步等功能,而且和库乐队无缝兼容。
2.2 Ableton Live(Windows/MacOS,标准版约2800元,终身免费升级)
这是电子音乐现场演出的“王者”,也适合做电子音乐创作——界面是“会话视图+排列视图”的组合,会话视图适合现场即兴创作、演出,排列视图适合后期整理、导出,它自带了Operator合成器、Analog合成器、Simpler采样器等顶级工具,支持MIDI深度编辑、加载第三方VST/AU插件、Link功能(多台设备同步演出)等功能。
场景2.3:专业MIDI制谱工具(适合音乐老师、作曲系学生)
如果你的需求是“把MIDI转换成五线谱/简谱”“编辑五线谱/简谱后导出成MIDI”“打印乐谱”,那你需要专业MIDI制谱工具——推荐以下两款:
Sibelius(Windows/MacOS,入门版约1000元,专业版约5000元,也有订阅版):这是行业标准的专业制谱工具,被很多音乐出版社、作曲系学生、音乐老师使用——支持导入/导出MIDI、MusicXML格式,支持自动排版、智能分谱、打印乐谱、导出成PDF/图片/采样音频等功能,音质也不错(自带了Sibelius Sounds优质采样库);
MuseScore(全平台通用,完全免费,开源):这是我见过的最好的免费开源制谱工具——功能几乎和Sibelius入门版一样,甚至有些功能(比如支持简谱)比Sibelius还好用,支持导入/导出MIDI、MusicXML格式,支持自动排版、智能分谱、打印乐谱、导出成PDF/图片/采样音频等功能,还有一个非常活跃的社区,你可以在社区里下载大量免费的乐谱、SoundFont。
极客专属场景:开源硬件MIDI解码+Python脚本处理
如果你是硬核极客,不想用现成的软件/工具,而是想“自己做一个硬件MIDI播放器”“用Python脚本批量处理MIDI文件(比如批量转GM1格式、批量提取鼓点MIDI)”,那下面这部分内容适合你。
场景4.1:开源硬件MIDI解码实战(用树莓派Pico做一个便携MIDI播放器)
树莓派Pico是一款价格仅4美元的微控制器,非常适合做小型开源硬件项目——我们可以用树莓派Pico+VS1053音频解码芯片+扬声器做一个便携MIDI播放器,成本不到50元!
所需硬件清单:
树莓派Pico(1个,约25元);
VS1053音频解码模块(1个,约15元,支持MIDI解码、MP3/WAV解码,自带2MB的GM1兼容采样库);
8Ω 0.5W扬声器(1个,约2元);
Micro SD卡模块(1个,约3元,用来存储MIDI文件);
Micro SD卡(1个,16GB足够,约5元);
杜邦线(若干,约2元);
面包板(可选,约5元,方便接线);
7V锂电池+充电模块(可选,约10元,方便携带)。
具体操作实例(接线+烧录代码):
接线(VS1053的引脚定义可能因模块不同而略有不同,建议先看模块的说明书):
| 树莓派Pico引脚 | VS1053音频解码模块引脚 | Micro SD卡模块引脚 |
|----------------|------------------------|--------------------|
| 3V3(OUT) | VCC | VCC |
| GND | GND | GND |
| GP10 | SCK | SCK |
| GP11 | MOSI | MOSI |
| GP12 | MISO | MISO |
| GP13 | CS | —— |
| GP14 | DCS | —— |
| GP15 | DREQ | —— |
| GP16 | —— | CS |
格式化Micro SD卡:把Micro SD卡格式化成FAT32格式,创建一个名为「MIDI」的文件夹,把你的GM1格式的.mid文件放进去;
烧录代码:
给树莓派Pico安装CircuitPython(一种简化版的Python,非常适合微控制器项目):下载CircuitPython for Raspberry Pi Pico的UF2文件(https://circuitpython.org/board/raspberry_pi_pico/),按住树莓派Pico的BOOTSEL键,用Micro USB线连接电脑,电脑会识别出一个名为「RPI-RP2」的U盘,把UF2文件拖进去,树莓派Pico会自动重启,识别出一个名为「CIRCUITPY」的U盘;
下载VS1053和Micro SD卡的CircuitPython库:下载Adafruit CircuitPython Bundle(https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/latest),解压后把「lib」文件夹里的「adafruit_vs1053.mpy」「adafruit_sdcard.mpy」「busio.mpy」「digitalio.mpy」「storage.mpy」「board.mpy」(不对,board和busio等是CircuitPython自带的,只需要复制adafruit_vs1053.mpy和adafruit_sdcard.mpy到「CIRCUITPY」的「lib」文件夹里);
把下面的代码复制到「CIRCUITPY」的「code.py」文件里(替换原来的内容):
# 导入所需的库
import time
import board
import busio
import digitalio
import storage
import adafruit_sdcard
import adafruit_vs1053
# 初始化VS1053的引脚
cs = digitalio.DigitalInOut(board.GP13)
cs.direction = digitalio.Direction.OUTPUT
cs.value = True
dcs = digitalio.DigitalInOut(board.GP14)
dcs.direction = digitalio.Direction.OUTPUT
dcs.value = True
dreq = digitalio.DigitalInOut(board.GP15)
dreq.direction = digitalio.Direction.INPUT
# 初始化SPI总线
spi = busio.SPI(clock=board.GP10, MOSI=board.GP11, MISO=board.GP12)
# 初始化VS1053音频解码芯片
vs1053 = adafruit_vs1053.VS1053(spi, cs, dcs, dreq)
vs1053.reset()
vs1053.use_midi() # 设置为MIDI解码模式
vs1053.set_volume(20, 20) # 设置音量(0-255,数值越小音量越大)
# 初始化Micro SD卡
sd_cs = digitalio.DigitalInOut(board.GP16)
sd_cs.direction = digitalio.Direction.OUTPUT
sd_cs.value = True
sdcard = adafruit_sdcard.SDCard(spi, sd_cs)
vfs = storage.VfsFat(sdcard)
storage.mount(vfs, "/sd")
# 获取MIDI文件夹里的所有GM1格式的.mid文件
midi_files = []
for filename in os.listdir("/sd/MIDI"):
if filename.endswith(".mid") or filename.endswith(".MID"):
midi_files.append("/sd/MIDI/" + filename)
# 循环播放MIDI文件
if len(midi_files) == 0:
print("没有找到MIDI文件!")
else:
print(f"找到了{len(midi_files)}个MIDI文件,开始循环播放...")
while True:
for midi_file in midi_files:
print(f"正在播放:{midi_file}")
with open(midi_file, "rb") as f:
vs1053.play_stream(f)
time.sleep(2) # 播放完一首后等待2秒再播放下一首
注意:上面的代码里用到了「os」库,但CircuitPython的精简版可能没有,需要手动检查一下,如果没有的话,可以用「storage.listdir」代替「os.listdir」;VS1053的MIDI解码模式可能需要先加载采样库,但大部分VS1053模块自带了2MB的GM1兼容采样库,不需要手动加载。
我的观点:这个项目非常适合硬核极客入门——不仅能学到树莓派Pico的使用、CircuitPython的编程、SPI总线的通信,还能做出一个实用的便携MIDI播放器,成就感满满!
场景4.2:Python脚本处理MIDI文件实战(批量提取鼓点MIDI)
如果你有很多MIDI文件,想批量提取其中的鼓点MIDI(GM1强制第10通道是打击乐),那可以用Python的「mido」库来实现。
具体操作实例:
安装mido库:打开终端(Windows用CMD/PowerShell,MacOS/Linux用Terminal),输入以下代码:
pip install mido
编写Python脚本:把下面的代码复制到一个名为「extract_drum_midi.py」的文件里:
# 导入所需的库
import os
import mido
# 定义输入和输出文件夹
input_folder = "input_midi" # 把你的MIDI文件放在这个文件夹里
output_folder = "output_drum_midi" # 提取后的鼓点MIDI文件会放在这个文件夹里
# 创建输出文件夹(如果不存在的话)
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历输入文件夹里的所有MIDI文件
for filename in os.listdir(input_folder):
if filename.endswith(".mid") or filename.endswith(".MID"):
print(f"正在处理:{filename}")
# 打开MIDI文件
mid = mido.MidiFile(os.path.join(input_folder, filename))
# 创建一个新的MIDI文件,只包含第10通道的鼓点信息
new_mid = mido.MidiFile()
# 遍历原MIDI文件的所有轨道
for track in mid.tracks:
# 创建一个新的轨道
new_track = mido.MidiTrack()
# 遍历原轨道的所有消息
for msg in track:
# 如果消息是MIDI通道消息,且通道是第10通道(注意mido的通道是从0开始的,所以第10通道是9)
if msg.type in ["note_on", "note_off", "control_change", "pitchwheel", "aftertouch"] and msg.channel == 9:
new_track.append(msg)
# 如果消息不是MIDI通道消息(比如元消息:轨道名、速度、拍号等),也添加到新轨道里
elif not msg.is_meta:
continue
else:
new_track.append(msg)
# 如果新轨道不是空的,添加到新MIDI文件里
if len(new_track) > 0:
new_mid.tracks.append(new_track)
# 保存新的MIDI文件
new_mid.save(os.path.join(output_folder, f"drum_{filename}"))
print(f"处理完成:drum_{filename}")
print("所有文件处理完成!")
运行脚本:
在「extract_drum_midi.py」文件所在的目录里创建「input_midi」和「output_drum_midi」两个文件夹;
把你的MIDI文件放在「input_midi」文件夹里;
打开终端,导航到「extract_drum_midi.py」文件所在的目录,输入以下代码: python extract_drum_midi.py
提取后的鼓点MIDI文件就会放在「output_drum_midi」文件夹里!
我的观点:Python的「mido」库非常强大——不仅能提取鼓点MIDI,还能批量转GM1格式、批量修改MIDI的速度/拍号、批量生成MIDI文件等,非常适合批量处理MIDI文件的场景。
选择适合你的MIDI工具
我给你总结一下不同场景下应该选择的MIDI工具:
| 场景 | 推荐工具 |
|--------------------------|--------------------------------------------------------------------------|
| 临时听个响(零安装) | Windows Media Player/MacOS QuickTime Player/Linux Rhythmbox/Online MIDI Player |
| 临时听个响(音质还行) | CoolSoft VirtualMIDISynth(Windows)/Qsynth(Linux)/MIDI Melody Player(iOS)/MIDI Player(Android) |
| 入门音乐创作/编辑 | 库乐队(MacOS/iOS)/FL Studio Fruity Edition(Windows/MacOS)/MuseScore(全平台) |
| 专业音乐创作/编辑 | Logic Pro(MacOS)/Ableton Live(Windows/MacOS)/Sibelius(全平台) |
| 硬核极客DIY | 树莓派Pico+VS1053音频解码芯片+Python脚本(mido库) |
MIDI协议诞生40余年来,虽然经历了采样音频的冲击,但它依然是数字音乐创作中不可或缺的一部分——因为它的体积小、可编辑性强、兼容性好,希望本文能帮你解决「mid用什么软件打开」的问题,也希望你能爱上数字音乐创作!
(全文完,共2798字)