> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ss14.art/llms.txt
> Use this file to discover all available pages before exploring further.

# MIDI

## О треске («Crunchy audio»)

В основном MIDI в SS14 работает так:
У нас есть x буферов длиной y каждый. Синтезирование/рендеринг MIDI происходит в другом потоке, в цикле. Мы заполняем столько буферов, сколько доступно на каждой итерации.
Это означает, что *всегда* будет некоторая задержка при использовании MIDI-ввода.
OpenAL воспроизводит буферы в реальном времени, пока есть хотя бы один буфер, заполненный данными.
Но что произойдёт, если OpenAL будет воспроизводить буферы намного быстрее, чем мы можем их заполнять?
Звук становится трескучим.

## Пользовательские инструменты и вы

Любые soundfonts, найденные в `Resources/MidiCustom`, будут автоматически загружены в новые MIDI-рендереры. Это означает, что вы можете легко создавать свои собственные инструменты для использования в игре! Только помните, что **нельзя** использовать банк 0, так как он зарезервирован для [General MIDI 1](https://en.wikipedia.org/wiki/General_MIDI).
В настоящее время у нас есть кастомный soundfont под названием `space-station-14.sf2`.
В идеале вы должны добавлять новые инструменты в него, а не создавать новые soundfont'ы для добавления отдельных инструментов.

### Список пользовательских инструментов

| Bank | Program |    Name   |
| :--: | :-----: | :-------: |
|  001 |   001   | Bike Horn |
|  001 |   002   | pAI Synth |
|  001 |   003   | Euphonium |

### Программы для редактирования soundfont'ов

* [https://www.polyphone-soundfonts.com/](https://www.polyphone-soundfonts.com/)
* [http://www.swamiproject.org](http://www.swamiproject.org)

## Поведение загрузки 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'ы в своей [директории пользовательских данных](user-data-directory), по пути `/soundfonts/`. Все soundfont'ы в этой директории (если она существует; по умолчанию она не создаётся) будут загружены.
