О треске («Crunchy audio»)
В основном MIDI в SS14 работает так:
У нас есть x буферов длиной y каждый. Синтезирование/рендеринг MIDI происходит в другом потоке, в цикле. Мы заполняем столько буферов, сколько доступно на каждой итерации.
Это означает, что всегда будет некоторая задержка при использовании MIDI-ввода.
OpenAL воспроизводит буферы в реальном времени, пока есть хотя бы один буфер, заполненный данными.
Но что произойдёт, если OpenAL будет воспроизводить буферы намного быстрее, чем мы можем их заполнять?
Звук становится трескучим.
Пользовательские инструменты и вы
Любые soundfonts, найденные в Resources/MidiCustom, будут автоматически загружены в новые MIDI-рендереры. Это означает, что вы можете легко создавать свои собственные инструменты для использования в игре! Только помните, что нельзя использовать банк 0, так как он зарезервирован для General MIDI 1.
В настоящее время у нас есть кастомный soundfont под названием space-station-14.sf2.
В идеале вы должны добавлять новые инструменты в него, а не создавать новые soundfont’ы для добавления отдельных инструментов.
Список пользовательских инструментов
| Bank | Program | Name |
|---|
| 001 | 001 | Bike Horn |
| 001 | 002 | pAI Synth |
| 001 | 003 | Euphonium |
Программы для редактирования soundfont’ов
Поведение загрузки soundfont’ов
Сам Robust поставляется только с крошечным встроенным fallback.sf2, который не подходит для воспроизведения разных инструментов. Soundfont’ы вместо этого автоматически загружаются из стандартных мест в операционной системе. В этом разделе будет описан точный процесс для целей отладки (и если вы хотите использовать пользовательский soundfont в качестве игрока).
Благодаря библиотеке FluidSynth, Robust может загружать soundfont’ы в форматах .sf2, .sf3 и .dls.
Загрузка soundfont’ов происходит в несколько этапов. Soundfont’ы, загруженные на более позднем этапе, могут заменять инструменты, загруженные из более ранних, если применимо.
Этап 0: встроенный soundfont
Soundfont /Midi/fallback.sf2, входящий в состав Robust, загружается раньше всего.
Этап 1: soundfont’ы операционной системы
Robust автоматически попытается загрузить soundfont из стандартного расположения в операционной системе. Пути к файлам следующие:
- Windows:
%SystemRoot%\system32\drivers\gm.dls
- macOS:
/System/Library/Components/CoreAudio.component/Contents/Resources/gs_instruments.dls
- Linux (все пути перебираются по порядку; возможно, вам потребуется установить пакеты, специфичные для вашего дистрибутива):
/usr/share/soundfonts/default.sf2
/usr/share/soundfonts/default.dls
/usr/share/soundfonts/FluidR3_GM.sf2
/usr/share/soundfonts/FluidR3_GM2-2.sf2
/usr/share/soundfonts/freepats-general-midi.sf2
/usr/share/sounds/sf2/default.sf2
/usr/share/sounds/sf2/default.dls
/usr/share/sounds/sf2/FluidR3_GM.sf2
/usr/share/sounds/sf2/FluidR3_GM2-2.sf2
/usr/share/sounds/sf2/TimGM6mb.sf2
Этап 2: переменная окружения
Если установлена переменная окружения ROBUST_SOUNDFONT_OVERRIDE, Robust также загрузит её как soundfont.
Этап 3: soundfont’ы контента
Контент может предоставлять дополнительные soundfont’ы для загрузки, включая их в директорию ресурсов /Audio/MidiCustom/. Они будут автоматически загружены на этом этапе.
Этап 4: пользовательские soundfont’ы
Пользователи могут размещать дополнительные soundfont’ы в своей директории пользовательских данных, по пути /soundfonts/. Все soundfont’ы в этой директории (если она существует; по умолчанию она не создаётся) будут загружены.Последнее изменение 21 июня 2026 г.