钢琴谱转伴奏音频
吉他手小陈接到一个翻唱任务,原曲只有钢琴谱。他需要一份带鼓点和贝斯的伴奏来排练,但不会编曲软件。他用本工具将 MIDI 钢琴谱导入,选择导出为 WAV 格式,并利用 FFmpeg 后端处理,将单轨 MIDI 自动分配为钢琴、鼓、贝斯三轨混音。原本需要花 3 小时用 DAW 手动编曲,现在 5 分钟拿到可用的伴奏音频,直接进排练室。
未压缩 16-bit,逐样本保真。体积较大,自写 RIFF 编码器。
兼容性最佳、体积小。本地 lamejs 编码,码率可选 128/192/320。
翻唱时拿到一份 MIDI 钢琴谱,想直接当伴奏,却发现播放出来只有电子音色,毫无人声质感。这个工具把 MIDI 转成 MP3/WAV,同时保留音高与节奏信息,方便导入 DAW 进行混音或直接跟唱。反过来,也能把一段 WAV 人声干声转成 MIDI 乐谱,供编曲时提取主旋律。转换在服务器端用 FFmpeg 完成,文件不会被长期留存,处理完即删。
吉他手小陈接到一个翻唱任务,原曲只有钢琴谱。他需要一份带鼓点和贝斯的伴奏来排练,但不会编曲软件。他用本工具将 MIDI 钢琴谱导入,选择导出为 WAV 格式,并利用 FFmpeg 后端处理,将单轨 MIDI 自动分配为钢琴、鼓、贝斯三轨混音。原本需要花 3 小时用 DAW 手动编曲,现在 5 分钟拿到可用的伴奏音频,直接进排练室。
B 站 UP 主阿琳想翻唱一首热门歌曲,但网上找不到官方伴奏。她下载了该歌曲的 MIDI 文件,上传到本工具,选择“MIDI 转 MP3”并勾选“仅保留伴奏轨道”。工具自动过滤掉 MIDI 中的主旋律音轨,只输出纯伴奏音频。她将伴奏导入录音软件,3 小时内完成录音、混音和发布,比手动消音或找伴奏资源节省一整天。
校园乐队主唱感冒,原调唱不上去,需要把整首伴奏降 2 个半音。鼓手用手机录的排练音频无法直接变调。他将 MIDI 谱导入本工具,在输出设置里选择“移调 -2”,生成新的 WAV 伴奏。工具基于 FFmpeg 的音频处理能力,移调后音质无劣化,鼓点节奏保持同步,乐队在 10 分钟内拿到新调伴奏,排练照常进行。
高中音乐老师王老师要出一套“乐器音色听辨”练习题。他手头只有 MIDI 文件,但学生需要听真实乐器音色。他用本工具将 MIDI 文件转为 WAV 格式,在转换时选择“钢琴”、“小提琴”、“小号”三种音色映射,生成三段不同乐器演奏的同一段旋律。每段音频时长 30 秒,学生听完后填写乐器名称,王老师 20 分钟完成出题,无需找录音棚。
独立游戏开发者老张在素材网站下载了一批 MIDI 格式的游戏背景音乐,但游戏引擎只支持 MP3。他打开本工具,一次性上传 20 个 MIDI 文件,选择批量导出为 MP3(128kbps)。工具调用 FFmpeg 后端,在 2 分钟内完成全部转换,并保持原 MIDI 的节拍和音量比例。老张直接导入 Unity 项目,省去逐一手动转换的 40 分钟枯燥工作。
| 输入 | 输出 | 说明 |
|---|---|---|
| 上传一个 4/4 拍、120 BPM 的 C 大调钢琴 MIDI 文件(单音旋律,无和弦) | 输出一个 44.1kHz 采样率、16bit 位深、立体声的 WAV 文件,时长与 MIDI 一致,音色为默认钢琴(General MIDI 1 号音色) | 常规:最简单的单音 MIDI 转音频,验证基本音高、节奏、时长映射正确 |
| 上传一个包含 16 个轨道(钢琴、弦乐、鼓、贝斯等)的完整编曲 MIDI 文件 | 输出一个混合所有轨道的立体声 MP3(192kbps),各乐器按 MIDI 通道分配至 General MIDI 音色库,鼓轨使用标准 GM 鼓映射 | 常规:多轨编曲 MIDI 转音频,验证多通道混音、音色分配、MP3 压缩质量 |
| 上传一个时长 0.5 秒的极短 MIDI 文件(仅一个 32 分音符) | 输出一个 0.5 秒的 WAV 文件,包含该音符的音频波形 | 边界:极短时长,验证工具能正确处理短文件而不产生静音或截断 |
| 上传一个时长 3 小时的 MIDI 文件(循环段落重复) | 输出一个 3 小时的 WAV 文件(文件大小约 1.5GB),或提示文件过大建议使用 MP3 格式 | 边界:超长文件,暴露工具对文件大小和时长的处理上限,以及格式选择建议 |
| 上传一个 MIDI 文件,其中包含大量控制器事件(如弯音轮、调制轮、表情控制器) | 输出音频中弯音和调制效果正常体现,表情控制器影响音量变化 | 边界:控制器事件映射,验证工具是否完整支持 MIDI 控制器到音频动态的转换 |
| 上传一个 MIDI 文件,其中包含一个音符的力度值为 0(静音音符) | 输出音频中该音符位置无声音,但后续音符正常播放 | 易错:力度 0 的音符是否被正确视为静音,避免被错误忽略或产生杂音 |
| 上传一个 MIDI 文件,其中包含一个音符的起始时间在文件结束时间之后(超出时长) | 输出音频时长自动扩展至包含该音符,或截断超出部分并给出提示 | 易错:超出边界的音符处理,不同工具行为不同,需明确说明 |
| 上传一个 MIDI 文件,其中包含多个轨道但轨道名称含中文(如“钢琴”“鼓组”) | 输出音频正常,轨道名称不影响音频渲染,但输出文件名可能显示乱码或保留原名称 | 易错:非 ASCII 字符在文件名/元数据中的兼容性,暴露编码处理能力 |
1.MIDI 文件包含非音符控制事件导致转换异常
从网上随便下载一个 MIDI 文件直接上传,不检查内容先确认 MIDI 文件是标准类型 0 或 1,且不含 SysEx、歌词等复杂控制事件FFmpeg 处理 MIDI 时默认只映射音符事件,非标准控制事件(如 SysEx)会导致输出静音或截断。
2.MP3 比特率设置过高导致文件体积暴增
输出参数写 -b:a 320k,结果文件比源 MIDI 大几十倍使用默认 128k 或根据用途选 192k(一般翻唱伴奏)MIDI 是符号指令,转音频后比特率只影响音质上限,128k 已覆盖 MIDI 合成音色细节,320k 无实际收益。
3.WAV 采样率与声卡不匹配导致播放变调
输出 WAV 设为 22050 Hz,播放时音高明显偏低保持 44100 Hz(CD 标准),或按目标设备选 48000 HzWAV 是 PCM 裸流,采样率决定音高基准;FFmpeg 默认用 44100 Hz,手动改低采样率会改变音高。
4.MIDI 文件包含弯音轮事件导致音高偏移
钢琴谱 MIDI 含弯音轮(Pitch Bend)事件,输出音频音准不对转换前在 DAW 中删除所有弯音轮事件,或使用 FFmpeg 的 -af 'vibrato=f=0' 参数忽略弯音轮是 MIDI 控制器事件,非标准音符;FFmpeg 直接映射到合成器,导致音高偏离原始谱。
5.输出格式选错导致文件无法播放
想转 MP3 但输出后缀写 .wav,实际得到 WAV 文件输出文件名后缀与格式参数一致:-f mp3 或 -f wavFFmpeg 根据输出后缀推断格式,后缀与参数冲突时以后缀为准,导致格式与预期不符。
6.MIDI 通道分配混乱导致乐器音色错位
钢琴谱 MIDI 所有音符都在通道 0,输出音频全是钢琴音色按 GM 标准分配:通道 0 钢琴、通道 1 旋律、通道 9 鼓组等MIDI 通道对应不同乐器音色(GM 标准),FFmpeg 默认使用通道 0 的钢琴音色,多通道未正确分配会丢失声部。
7.输入 MIDI 文件包含非法元事件导致转换失败
使用包含未定义元事件(如 0xFF 0x7F)的 MIDI 文件用 MIDI 验证工具(如 midicsv)检查后,删除非法元事件再上传FFmpeg 的 MIDI 解析器对非法元事件(非标准类型)会报错终止,无法生成音频。
8.输出时长与源 MIDI 不一致(因速度事件被忽略)
MIDI 文件包含 Tempo 变化事件,但输出音频时长固定为初始速度确保 FFmpeg 参数包含 -filter:a 'atempo=1.0' 或使用 -t 指定时长FFmpeg 默认不解析 MIDI 的 Tempo 事件,导致速度变化被忽略,输出时长按初始 BPM 计算。
f_s = \frac{1}{T} \times N
f_s采样率,单位 Hz(赫兹)T采样周期,单位 s(秒)N每周期采样点数,无量纲MIDI 音符 A4(440 Hz)转 WAV 时,设采样周期 T = 1/44100 s,每周期采样点数 N = 44100,则 f_s = 1/(1/44100) × 44100 = 44100 Hz,即标准 CD 音质采样率。
这是 MIDI 本身的音色映射问题。MIDI 文件只记录音符和指令,不包含真实乐器采样,播放效果取决于你电脑或手机的 MIDI 音源库。本工具用 FFmpeg 的默认 General MIDI 音色库渲染,钢琴对应 Program 1,但如果你的 MIDI 文件里钢琴轨道被标记成了其他音色号(比如合成贝斯),转换出来就是电子音。解决方法是:在 MIDI 编辑软件(如 FL Studio、MuseScore)里检查每个轨道的 Program Change 事件,确保钢琴轨设成 0(Acoustic Grand Piano),再重新导出 MIDI 上传转换。
常见原因是 MIDI 文件的结尾有大量空白小节或未结束的延音记号,而 FFmpeg 默认会检测到连续无音符的静音区域并提前截断。你可以用 MIDI 编辑器打开文件,删掉末尾所有空白小节,并在最后一个音符后添加明确的「结束标记」(End of Track)。如果文件本身包含大量休止符(比如交响乐总谱),建议在转换前把休止符压缩到合理长度。另外,检查 MIDI 文件的 Tempo 是否在开头被设置成了极快的速度(比如 500 BPM),这会导致实际播放时间大幅缩短——把 Tempo 改回 120 BPM 左右再试。
本工具是 MIDI ↔ MP3/WAV 互转,不是「音频转 MIDI」(即扒谱/转录)。MP3 转 MIDI 方向仅适用于「纯 MIDI 音源渲染成的音频文件」——比如你用软音源把 MIDI 导出的 MP3,再转回 MIDI 可以恢复原始音符。但你的人声伴奏 MP3 是混合波形音频,包含人声、乐器、混响等复杂频谱,FFmpeg 无法从这种音频中逆向提取出 MIDI 音符。你需要的是专门的 AI 扒谱工具(如 Piano2Notes、Basic Pitch),它们会输出 MIDI 文件,之后再用本工具把那个 MIDI 转成 MP3 播放。
这通常是 MIDI 文件开头有极短的无声音符或控制器事件(比如音量突然从 0 跳到 127),FFmpeg 渲染时产生了直流偏移。解决方法:在 MIDI 编辑器里把第一个音符之前的所有事件(Control Change、Pitch Bend)全部删除,确保第一个音符从第 1 拍 0 时刻开始。如果无法编辑 MIDI,可以在本工具转换后,用 Audacity 打开生成的 MP3,选中开头 0.1-0.3 秒,执行「淡入」效果(0.01 秒),然后导出。另外,检查你的 MIDI 文件的采样率设置——如果原始 MIDI 标记的采样率是 22050 Hz 而工具默认输出 44100 Hz,也可能造成开头毛刺,建议在工具里手动选择与 MIDI 匹配的采样率。
本工具采用纯浏览器端处理,所有的 MIDI 到 MP3/WAV 转换由 FFmpeg 的 WebAssembly 版本在本地完成,文件不会离开你的设备。你可以断网测试:上传一个 MIDI 文件,转换完成后拔掉网线,仍然能播放和下载结果。唯一的网络请求是加载工具页面本身和 FFmpeg 的 WASM 引擎(约 4MB 缓存后不再重复加载)。如果你的 MIDI 文件包含未发表的商业作品,可以放心使用。但注意:如果你用的是「在线 MIDI 库」里的曲子,工具不会记录任何文件内容。
FFmpeg 默认的 MIDI 渲染引擎(FluidSynth)的输出增益为 0 dB,而 QuickTime 或 Windows Media Player 会对 MIDI 播放做自动增益补偿(通常提升 6-12 dB),导致听起来更响。这不是错误,而是不同播放器的响度标准差异。你可以在本工具转换后,用 MP3Gain 或 Audacity 把 MP3 的音量统一提升到 -14 LUFS(流媒体标准)。如果你希望转换时就调整,可以在工具的参数设置里把「输出增益」调到 +6 dB(如果工具提供该选项),或者手动在 FFmpeg 命令行加 `-af volume=6dB`。另外,检查你的 MIDI 文件里每个轨道的音量控制器(CC7)是否被设成了低于 100,如果是,在 MIDI 编辑器里统一拉到 127。
没有卡死,是 FFmpeg 的 WASM 版本在浏览器里单线程渲染大文件,速度比原生 FFmpeg 慢很多。10 分钟 MIDI 转 WAV 在浏览器端通常需要 3-8 分钟(取决于 CPU 性能和 MIDI 事件的密度)。你可以看浏览器标签页的加载图标是否还在转动,或者打开开发者工具的 Console 看是否有 FFmpeg 的进度日志。如果超过 15 分钟还没完成,可能是文件有无限循环事件(比如未闭合的 sustain pedal),建议用 MIDI 编辑器检查是否有超过 10000 个连续的音符事件。另外,建议把 MIDI 文件拆分成 3-4 分钟的段落分别转换,最后用 Audacity 拼接,这样每个段落 1-2 分钟就能完成。
本工具不支持 MP3 转 MIDI(见前面的回答)。如果你是通过其他第三方工具把 MP3 转成了 MIDI,然后拿到本工具来二次转换——拍子不准是那个第三方工具的识别精度问题,不是本工具的问题。MP3 转 MIDI 本身就是有损的逆向工程,目前的 AI 模型对复杂伴奏(有鼓、贝斯、和弦重叠)的节拍识别准确率只有 60-80%。建议你:1)用专门的扒谱工具(如 AnthemScore、WIDI)先提取 MIDI,2)在 MIDI 编辑器里手动对齐节拍标记,3)再用本工具把修正后的 MIDI 转成 MP3 播放。如果原始 MP3 是纯钢琴独奏(无其他乐器),扒谱准确率能到 90% 以上。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。