作为计算机音乐发展史上的里程碑级协议,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字)