Введение
Нужно быстро «отрендерить» файл .mid в аудиоформат для тестов или прослушивания на Linux? Это можно сделать одной командой, используя знакомые инструменты timidity и ffmpeg, без сложных DAW или конвертеров.
В статье приведён рабочий пример команды, объяснены параметры, приведено сравнение размера и качества выходных файлов, а также показано, как подключить собственный soundfont для воспроизведения в timidity.
Что значит «рендерить» MIDI
MIDI — это последовательность нот, а не запись звука. Чтобы получить аудиофайл (.flac, .mp3 и т.д.), нужно применить к MIDI звуковые банки или синтезатор, то есть «отрендерить» трек, как текст рендерят шрифтом.
Рендеринг MIDI похож на использование звукового шрифта (soundfont) или программного синтезатора для генерации реального звука, который затем можно сохранить в желаемый формат.
Какие инструменты нужны
Для Linux подойдёт связка timidity + ffmpeg: timidity умеет выводить WAV-поток на stdout, а ffmpeg принимает этот поток и кодирует в нужный формат.
Timidity отвечает за синтез звука из .mid с выбранным soundfont, а ffmpeg выполняет кодирование в .flac, .mp3 или другие форматы с нужными настройками кодека.
Дополнительно полезны утилиты типа spek для анализа спектра и mlocate/updatedb для поиска soundfont-файлов на системе.
Команда для конвертации .mid в .flac
Ниже приведён рабочий пример команды, которая рендерит .mid в .flac через пайп:
timidity «mySong.mid» -Ow -o — | ffmpeg -i pipe: «mySong.mid.flac»
Пояснения: ключ -Ow
указывает timidity выводить WAV на stdout, -o -
направляет этот поток в stdout, а ffmpeg -i pipe:
читает аудиопоток из пайпа и кодирует его в указанный файл. По умолчанию (ffmpeg version n7.1.1) выходной FLAC получается в формате 16 bit, stereo, 44.1 kHz, что соответствует WAV-данным от timidity.
Повышение качества вывода
Если требуется другой битрейт/частота дискретизации, можно добавить фильтр перед выходным аргументом, например:
-af aformat=s32:48000
.
Автор отмечал, что этот параметр сообщает кодеру использовать глубину (в тексте — «24 bit») и частоту 48 kHz; в приведённом примере это может быть избыточно, если исходный WAV уже в 16 bit/44.1 kHz.
Размеры файлов и сравнение форматов
Получающиеся файлы заметно отличаются по объёму. В примере конвертации:
- .mp3: 2.8 MB (128 kbps, 44.1 kHz, Stereo) — ffmpeg использует libmp3lame для MP3 и получается гораздо меньший файл.
- .flac: 19 MB (16 bit, stereo, 44.1 kHz) — без потерь и существенно больше по размеру.
Анализ спектра в spek показывает, что MP3 имеет стандартное обрезание выше ~17 kHz, что сильно экономит пространство и при прослушивании часто не заметно. FLAC хранит дополнительные гармоники синтезированных инструментов выше 17 kHz, которые увеличивают размер и в большинстве практических задач не требуются, если достаточно просто воспроизведения MIDI.
Настройка soundfont для timidity
Для воспроизведения в желаемом тембре можно указать конкретный soundfont в конфиге timidity: отредактируйте /etc/timidity/timidity.cfg
и добавьте строку вида:
soundfont /usr/share/gzdoom/soundfonts/gzdoom.sf2
Путь к soundfont зависит от дистрибутива и установленных пакетов. Чтобы найти файл gzdoom.sf2 на системе, установите mlocate и выполните updatedb ; locate gzdoom.sf2
, при условии, что пакет gzdoom установлен.
Альтернатива: MuseScore и VST-плагины
Если нужен GUI или более продвинутый рендер с эффектами, можно использовать MuseScore.
MuseScore позволяет открывать .mid, подключать VST-плагины и рендерить партии с реалистичными инструментами, реверберациями и эффектами, превращая MIDI в профессионально звучащую аудиодорожку.
Итог (коротко)
Для быстрой конвертации .mid в .flac на Linux достаточно timidity
+ ffmpeg
и команды:
timidity «mySong.mid» -Ow -o — | ffmpeg -i pipe: «mySong.mid.flac»
При необходимости можно менять формат на .mp3 (libmp3lame) для меньшего размера, подключать custom soundfont через /etc/timidity/timidity.cfg
или использовать MuseScore с VST для продвинутого рендеринга.