你好,我是kelly,今天分享:midi文件转为mp3、wav音频。
一、midi文件转换的思路
midi文件转为mp3、wav,需要使用到fluidsynth工具。
fluidsynth是一个基于SoundFont 2规范的声音合成工具,没有可视化界面,使用API方式调用。下载地址为:
https://www.fluidsynth.org/
看了不少帖子,都提到使用github上的midi2audio来调用fluidsynth,实际没有必要。midi2audio只是简单对fluidsynth工具的封装,使用midi2audio反而将问题复杂化,完全可以自己使用python调用。
根据前面文章介绍,我们知道:
音频文件(mp3、wav等)≈ midi文件 + 音色文件(.sf2声音字体)。因此,还需要下载.sf2声音文件。
为方便读者使用,已经将fluidsynth工具、.sf2文件打包上传到百度网盘:
https://pan.baidu.com/s/1YJDHgmWztf3kh342sq0k3A?pwd=5gis
二、fluidsynth工具使用
步骤1:使用mido生成一个测试midi文件:
from mido import Message, MidiFile, MidiTrack
mid = MidiFile()
track = MidiTrack()
mid.tracks.append(track)
track.append(Message("program_change", channel=0, program=2, time=0))
track.append(Message("note_on", note=64, velocity=64, time=500))
track.append(Message("note_off", note=64, velocity=64, time=500))
track.append(Message("note_on", note=64, velocity=64, time=500))
track.append(Message("note_off", note=64, velocity=64, time=500))
track.append(Message("note_on", note=64, velocity=64, time=500))
track.append(Message("note_off", note=64, velocity=64, time=500))
track.append(Message("note_on", note=64, velocity=64, time=500))
track.append(Message("note_off", note=64, velocity=64, time=500))
track.append(Message("note_on", note=64, velocity=64, time=500))
track.append(Message("note_off", note=64, velocity=64, time=500))
mid.save("test1.mid")
步骤2:midi文件转为音频文件
首先查看fluidsynth命令的使用方式:
fluidsynth --help
FluidSynth runtime version 2.2.4
Copyright (C) 2000-2021 Peter Hanappe and others.
Distributed under the LGPL license.
SoundFont(R) is a registered trademark of Creative Technology Ltd.
Usage:
fluidsynth [options] [soundfonts] [midifiles]
假定已在windows环境变量中配置好fluidsynth,midi文件、.sf2文件都在当前目录,那么midi文件转化命令为:
fluidsynth -ni "Splendid 136.sf2" test1.mid -F test110917.mp3 -r 44100
其中, "Splendid 136.sf2"为声音字体,-F代表输出音频文件,-r代表音频的采样频率。
由于无法上传音频,这里无法展示。有兴趣朋友可以阅读下方原文,感受转换后的效果。
kelly会在公众号「kelly学技术」不定期更新Python、机器学习、深度学习等文章,感兴趣的朋友可以关注一下,期待与您交流。