Найти в Дзене

MIDI‑скрипты, как тайный язык FL Studio - от машины к человеку: раскрываем секреты

Вы когда‑нибудь чувствовали, что ваш MIDI‑контроллер «не до конца раскрывает потенциал» в FL Studio или почти делает то, что вам нужно… но не совсем? Кнопки работают не так, как хочется, регуляторы отправляют лишние сообщения, а иногда и вовсе не те значения, а заветный эффект приходится настраивать вручную в пятый раз подряд? Наверняка у многих из вас была ситуация: купили новый контроллер, подключили к FL Studio, а он «не видит» половину функций. Или хочется добавить нестандартный жест управления, а в настройках DAW такого нет. Решение есть: MIDI‑скрипты. Это небольшие программные коды, которые учат FL Studio «понимать» ваше устройство по‑новому, а так же помогут превратить «почти» в «именно так, как я задумал». В этой статье разберём, с чего начать, как установить первый скрипт и почему это проще, чем кажется. Поехали! Ещё несколько лет назад настройка нестандартного MIDI‑контроллера в FL Studio сводилась к ручному маппированию десятков параметров. Сегодня благодаря системе скриптов
Оглавление
Изображение сгенерировано нейросетью
Изображение сгенерировано нейросетью

Вы когда‑нибудь чувствовали, что ваш MIDI‑контроллер «не до конца раскрывает потенциал» в FL Studio или почти делает то, что вам нужно… но не совсем? Кнопки работают не так, как хочется, регуляторы отправляют лишние сообщения, а иногда и вовсе не те значения, а заветный эффект приходится настраивать вручную в пятый раз подряд?

Наверняка у многих из вас была ситуация: купили новый контроллер, подключили к FL Studio, а он «не видит» половину функций. Или хочется добавить нестандартный жест управления, а в настройках DAW такого нет.

Решение есть: MIDI‑скрипты. Это небольшие программные коды, которые учат FL Studio «понимать» ваше устройство по‑новому, а так же помогут превратить «почти» в «именно так, как я задумал». В этой статье разберём, с чего начать, как установить первый скрипт и почему это проще, чем кажется. Поехали!

MIDI‑скрипты в FL Studio: магия кода для ваших мелодий

Ещё несколько лет назад настройка нестандартного MIDI‑контроллера в FL Studio сводилась к ручному маппированию десятков параметров. Сегодня благодаря системе скриптов вы можете за считанные минуты:

  • заставить фейдер управлять сразу тремя плагинами;
  • добавить «умную» квантизацию нот;
  • превратить пэды в секвенсор с обратной связью.

Разберём, как войти в мир MIDI‑скриптов без боли и ошибок.

Скрипты: кто такие и с чем их едят?

MIDI‑скрипты — это небольшие программные коды на языке Python, которые позволяют «дообучить» FL Studio взаимодействию с вашим MIDI‑контроллером. Они выступают посредником между устройством (клавиатурой, пэдами, фейдерами и т. п.) и DAW, расширяя стандартные возможности управления.

Представьте, что ваш MIDI‑контроллер — это «неговорящий» гость на вечеринке, а FL Studio — хозяин, который пока не знает языка гостя. MIDI‑скрипты выступают переводчиком: они слушают сообщения от контроллера, понимают их смысл, переформулируют на языке FL Studio и передают дальше. И наоборот — когда DAW что‑то отвечает, скрипт «переводит» это обратно в сигналы, которые понимает контроллер (например, зажигает подсветку нужной клавиши).

  • полную кастомизацию управления под ваш рабочий процесс — будто пересобираете пульт управления космическим кораблём именно так, как удобно вам: одни кнопки отвечают за микширование, другие — за активацию эффектов, третьи — за навигацию по проекту;
  • автоматизацию рутинных действий (переключение пресетов, активация эффектов) — больше не нужно вручную прокликивать десятки параметров: один жест — и скрипт сам применит нужный набор настроек, как опытный помощник, который знает ваши привычки;
  • преобразование данных (изменение диапазонов, фильтрация сообщений) — например, можно «сжать» диапазон фейдера с 0–127 до 20–80, чтобы работать точнее в критической зоне, или отфильтровать «дребезг» от дешёвых регуляторов;
  • интерактивные элементы (динамическая подсветка, условные переходы) — клавиши загораются цветом в зависимости от режима, пэды пульсируют в темпе проекта, а экран контроллера отображает текущие значения параметров, словно живая панель индикации.

Как это работает технически: глубже в «кухню» MIDI‑скриптов

Давайте разберём процесс пошагово — от нажатия кнопки до магического превращения сигнала в действие.

1. Перехват MIDI‑сообщений

Когда вы касаетесь клавиши или двигаете фейдер, контроллер отправляет в компьютер MIDI‑сообщение — пакет данных вида:

[статус][данные 1][данные 2]

Например:

  • 0x90 60 100 — нота C4 (60) с силой нажатия 100 (канал 0);
  • 0xB0 07 85 — изменение параметра громкости (CC 7) до значения 85.

Скрипт «подслушивает» эти сообщения через API FL Studio. В коде это выглядит так:

python

def OnMidiIn(event):
if event.status == 0x90: # Если пришла нота
HandleNote(event.data1, event.data2)

2. Обработка по правилам

Здесь начинается «магия» скрипта. Он может:

  • Масштабировать значения. Например, превратить диапазон фейдера 0–127 в 30–90 для точной настройки:pythonscaled_value = int((raw_value / 127.0) * 60) + 30
  • Фильтровать шум. Игнорировать мелкие колебания регулятора:pythonif abs(new_value - last_value) > 3:
    ProcessChange(new_value)
  • Преобразовывать типы. Например, заменить ноту на команду переключения пресета:pythonif note == 60:
    plugin.SetPreset(2) # Загрузить пресет №2
  • Добавлять логику. Например, двойное нажатие кнопки:pythonif button == 1 and time.time() - last_press < 0.5:
    ToggleEffect() # Включить эффект
    else:
    SelectTrack() # Выбрать трек

3. Передача данных в FL Studio

После обработки скрипт отправляет команды в DAW. Это может быть:

  • Прямое управление параметрами:pythonmixer.SetTrackVolume(track_id, scaled_value / 127.0)
  • Вызов действий FL Studio:pythonui.MenuCommand(4001) # «Сохранить проект»
  • Взаимодействие с плагинами:pythonplugin.ParamSet(5, normalized_value) # Установить параметр №5
  • Отправка MIDI‑сообщений другим устройствам (если скрипт работает в цепочке):pythonmidi.OutMsg(0xE0, 0, pitch_bend_value) # Pitch Bend

4. Обратная связь: диалог с контроллером

Скрипт не только принимает команды, но и отвечает контроллеру. Например:

  • Подсветка кнопок:pythonmidi.OutMsg(0x90, led_note, 127) # Зажечь светодиод
  • Индикация режимов:pythonif current_mode == "Mix":
    midi.OutMsg(0xB0, 10, 100) # Красный цвет
    elif current_mode == "Edit":
    midi.OutMsg(0xB0, 10, 20) # Зелёный цвет
  • Отображение значений на экране контроллера:pythoncontroller.Display("Vol: %d%%" % (volume * 100))
  • Тактильная обратная связь (для продвинутых устройств):pythonmidi.OutMsg(0xF0, 0x01, 0x05) # Вибрация

Что происходит «под капотом»?

  1. Цикл обработки. Скрипт работает в бесконечном цикле, проверяя:
    новые MIDI‑сообщения;
    события FL Studio (изменение трека, запуск воспроизведения);
    таймеры (для анимаций подсветки).
  2. Буферизация. Чтобы избежать пропусков, скрипт может накапливать сообщения и обрабатывать их пакетами.
  3. Синхронизация. Для ритмических эффектов (пульсирующая подсветка) скрипт синхронизируется с темпом проекта:pythonif time.time() % (60.0 / bpm) < 0.1:
    ToggleLED()
  4. Обработка ошибок. Если плагин не отвечает, скрипт может:
    вывести предупреждение;
    переключиться в безопасный режим;
    записать ошибку в лог.

Пример полного цикла

Ситуация: Вы двигаете фейдер, чтобы изменить громкость трека.

  1. Контроллер отправляет: 0xB0 07 95 (CC 7 = 95).
  2. Скрипт получает сообщение, проверяет, что это фейдер громкости.
  3. Преобразует 95 → 0.75 (нормализованное значение).
  4. Вызывает mixer.SetTrackVolume(1, 0.75).
  5. Отправляет контроллеру: 0xB0 15 95 (зажечь индикатор на фейдере).
  6. Если трек заглушён, дополнительно мигает красным: 0x90 42 127.

Результат: Вы видите и чувствуете отклик — управление становится осязаемым.

Важные нюансы

  • Приоритеты. Скрипт может игнорировать сообщения, если идёт воспроизведение (чтобы не сбивать автоматизацию).
  • Задержки. Обработка занимает миллисекунды, но для чувствительных задач (например, live‑выступлений) это критично.
  • Совместимость. Разные контроллеры отправляют данные в своём формате — скрипт должен это учитывать.
  • Память. Хранение состояний (например, «какая кнопка была нажата последней») требует аккуратного управления переменными.

Итог: MIDI‑скрипт — это мост между физическим миром и цифровой средой. Он превращает абстрактные числа в эмоции, а случайные жесты — в осмысленные действия. Чем глубже вы разбираетесь в его механике, тем больше возможностей открываете для творчества.

Каковы же ключевые особенности MIDI‑скриптов в FL Studio?: детали, тонкости и лайфхаки

Итак:

Язык реализации: Python «по‑фрутински»

Да, это Python — но не совсем тот, к которому вы привыкли в «большом» программировании. В FL Studio используется упрощённая версия с ограниченным набором модулей и специфичным API. Что это значит на практике:

  • Нет доступа к внешним библиотекам (например, numpy или requests).
  • Доступны только встроенные функции FL Studio: mixer.*, playlist.*, ui.* и т. п.
  • Синтаксис — чистый Python 2.7, без «фишек» Python 3** (никаких f-строк или async/await).
  • Ошибки выводятся в консоль FL Studio — придётся привыкать к отладке «на лету».

Формат файла: строго по канонам

Имя файла должно соответствовать шаблону:

device_<название_устройства>.py

Например:

  • device_novation_sl.py
  • device_akai_mpk.py
  • device_custom_ctrl.py

Почему так?
FL Studio сканирует папку с скриптами и автоматически связывает файл с устройством по имени. Если название не соответствует шаблону, скрипт просто не загрузится.

Важно:

  • Используйте только латинские буквы, цифры и подчёркивания.
  • Не добавляйте пробелы или спецсимволы.
  • Расширение строго .py (не .txt и не .pyw).

3. Место хранения: где живёт магия

Путь к папке со скриптами:

[Диск]:\Пользователи\[Ваше имя]\Документы\Image-Line\FL Studio\Settings\Hardware\[название устройства]\

Что внутри?

  • Сам файл .py.
  • Возможно, файл .ini с настройками (создаётся скриптом или вручную).
  • Папки для разных версий FL Studio (если вы обновляли программу).

Лайфхак:
Создайте ярлык на эту папку на рабочем столе — так вы сэкономите время на поиск при редактировании.

4. Активация: три шага до волшебства

  1. Подключите контроллер к компьютеру (USB/MIDI).
  2. Откройте настройки FL Studio:
    Нажмите F10 или выберите Options → MIDI Settings.
  3. На вкладке Input:
    Найдите ваш контроллер в списке Controller type.
    Выберите скрипт из выпадающего меню (он появится, если файл лежит в правильной папке).
    Активируйте порт, нажав Enable.

Что происходит за кулисами?
FL Studio:

  • Загружает скрипт в память.
  • Связывает его с MIDI‑портами устройства.
  • Начинает передавать события (OnMidiIn, OnNoteOn и т. п.) в ваш код.

Типичные ошибки:

  • Скрипт не виден в списке? Проверьте имя файла и путь.
  • Контроллер не реагирует? Убедитесь, что порт включён (Enable горит зелёным).
  • Ошибки в консоли? Откройте файл .py в редакторе и ищите строки с print() — они помогут локализовать проблему.

5. Особенности работы: что нужно знать

  • Перезагрузка скрипта: чтобы применить изменения в коде, перезапустите FL Studio или отключите/включите порт в настройках MIDI.
  • Конфликты имён: если два скрипта имеют одинаковое имя, FL Studio может загрузить только один.
  • Права доступа: убедитесь, что у вас есть права на запись в папку Settings\Hardware.
  • Версионность: скрипты, написанные для FL Studio 12, могут не работать в FL Studio 21 из‑за изменений в API.

6. Лайфхаки для продвинутых

  • Тестовая среда: создайте пустой проект и назначьте на него «экспериментальный» скрипт. Так вы не испортите рабочий проект при отладке.
  • Логирование: добавляйте в код строки вида .py thonprint("DEBUG: Получено CC%d = %d" % (event.data1, event.data2))
    чтобы видеть, что происходит в реальном времени.
  • Модульность: разбивайте скрипт на функции (HandleFader(), UpdateLEDs()) — так проще вносить правки.
  • Резервные копии: сохраняйте версии скрипта с датами (например, device_myctrl_20240501.py), чтобы не потерять наработки.

7. Где искать помощь

  • Официальная документация FL Studio: раздел MIDI Scripting (в меню Help).
  • Форумы Image-Line: тема MIDI Scripting & Controller Support.
  • GitHub: репозитории с открытыми скриптами (ищите по ключевым словам FL Studio MIDI script).
  • YouTube: видеоуроки по созданию скриптов для конкретных контроллеров.

Итог:
MIDI‑скрипты — это «суперсила» FL Studio, которая превращает стандартный контроллер в уникальный инструмент. Зная правила игры (формат файла, путь хранения, механизм активации), вы можете:

  • автоматизировать рутину;
  • создать интуитивное управление;
  • добавить интерактивные элементы;
  • сделать работу в DAW по‑настоящему вашей.

Начните с малого — настройте одну кнопку, затем усложняйте. Скоро ваш контроллер будет «говорить» с FL Studio на одном языке… и этот язык — ваш собственный.

Примечания к процессу разработки скриптов:

  • Иерархия скриптов — поскольку FL Studio изначально поддерживает многие MIDI-функции и сообщения, вы можете писать простые скрипты для обработки конкретных случаев или входных данных, а остальное оставить на универсальной MIDI-поддержке FL Studio. Например, вам не нужно указывать FL Studio, что делать с MIDI-нотами. Если скрипт не вносит особых изменений в поведение по умолчанию, FL Studio будет обрабатывать их как обычно.
  • Скрипты сложны — с мощностью и гибкостью приходит сложность. Скрипты MIDI предназначены для производителей оборудования и опытных пользователей, которые хотят создать собственную поддержку для MIDI-контроллеров. Если вы новичок в программировании, то поначалу скрипты MIDI могут показаться вам сложными и запутанными. Это нормально, но терпение и настойчивость будут вознаграждены! На пользовательском форуме Image-Line есть несколько простых примеров, с которых можно начать.

Приступаем к разработке!

Чтобы начать с нуля, вам нужно создать файл сценария в правильном месте в FL Studio в папке с пользовательскими данными:

  1. Создайте папку — с помощью файлового менеджера в выбранной вами операционной системе перейдите в папку FL Studio папка с пользовательскими данными , обычно это '...Documents\Image-Line\FL Studio\Settings\Hardware\вложенная папка вашего скрипта', где 'вложенная папка вашего скрипта' — это вложенная папка, которую вы создали для своего скрипта.
  2. Создайте файл сценария - В папке 'YourScriptSubFolder' создайте обычный текстовый файл 'device_YourScriptName.txt'. Откройте текстовый файл и добавьте следующую строку текста, которая будет названием скрипта, отображаемого в списке MIDI Settings > Тип контроллера:# название=Мой первый скрипт
  3. Измените тип расширения файла на .py — измените тип расширения файла с .txt на .py. Для этого в браузере на вашем компьютере должны быть активированы расширения типов файлов. После этого просто переименуйте обычный текстовый файл 'device_ThisIsMyFistScript.txt' в 'device_ThisIsMyFistScript.py', например. Вы также можете использовать параметры операционной системы для открытия файлов типа .py в текстовом редакторе по вашему выбору.

Примечание: ".py" - это не русское окончание, а сокращенное Python, и пишется латинскими буквами!

4. Выберите свой скрипт в настройках MIDI - Теперь вы увидите свой скрипт в MIDI Settings(настройки MIDI) > тип контроллера списке как Мой первый скрипт (пользовательский).

5. Edit the script(редактировать скрипт) - Откройте этот сценарий в FL Studio с помощью VIEW(menu)(ВИД (меню))> Script output(вывод сценария)> Edit script (button)(редактировать сценарий (кнопка))

ПРИМЕЧАНИЕ: Для работы вкладки Interpreter(интерпретатор) необходимо выбрать скрипт в настройках MIDI > Тип контроллера.

Скрипт, используемый в этом руководстве, доступен по этой ссылке.

Модули скрипта

Script functions(функции скрипта)(обратные вызовы) - это инструкции, которые FL Studio распознает в коде Python и выполняет в соответствии с ними. Обратные вызовы организованы в модули в соответствии с целевыми функциями FL Studio (список воспроизведения, шаблоны, устройство и т.д.). Чтобы использовать обратные вызовы в скрипте, необходимо загрузить модуль обратного вызова, подключив его в начале скрипта с помощью 'import':

Import module(импортировать модуль)(например, импортировать плейлист) —

ПРИМЕЧАНИЕ: имена модулей пишутся строчными через дефис.

Доступные модули:

  • Playlist(плейлист) - Модуль, позволяющий управлять FL Studio Playlist:

  • Channels(каналы) - Модуль позволяющий управлять FL Studio Channels, 'index' относится к группам каналов, 'indexGlobal' — к глобальному индексу

  • Mixer(микшер) - Модуль, позволяющий управлять FL Studio Mixer:

ПРИМЕЧАНИЕ: дорожка с номером 0 всегда является главной!

  • Patterns(паттерны) - Модуль, позволяющий управлять FL Studio с помощью шаблонов плейлиста( об этом в следующих статьях):
  • Arrangement - Модуль, позволяющий управлять FL Studio аранжировками в плейлисте(об этом в следующих статьях):
  • User interface(пользовательский интерфейс):
  • Transport(транспорт) - этот модуль отвечает за транспорт FL Studio (воспроизведение, остановка, пауза и запись):
  • Device(устройство) - Модуль устройства будет работать с MIDI-устройствами, подключенными к MIDI-интерфейсу FL Studio. Вы отправляете сообщения на выходной интерфейс, получаете связанные значения элементов управления... и т. д.). MIDI-скрипты, назначенные входному интерфейсу, можно сопоставить (связать) с выходным интерфейсом с помощью номера порта. При сопоставлении (связи) выходных интерфейсов скрипты могут отправлять MIDI-сообщения на выходные интерфейсы с помощью одного из сообщений midiOut***:
  • Plugins(плагины) - этот модуль работает с плагинами FL Studio (в зависимости от их расположения в микшере или на панели каналов):
    Примечание: Для доступа к плагинам генератора (на панели каналов) укажите индекс панели каналов, а для эффектов укажите индекс микшера и slotIndex. Установите для параметра useGlobalIndex значение true, чтобы использовать глобальный индекс канала.
  • General(общий модуль) - этот модуль отвечает за общие функции FL Studio:
  • Launch Map Pages(запускаемые приложения) - некоторые контроллеры поддерживают страницы (пользовательские макеты контроллеров). Этот дополнительный модуль помогает работать с такими страницами. LaunchMapPages:
  • Types(типы) - данные о событии:
Изображение взято из свободных источников
Изображение взято из свободных источников

Constants(константы) - Все константы, приведенные ниже, определены в модуле 'midi'. Включите модуль MIDI в начало скрипта с помощью 'import':

  • Импорт MIDI
  • OnDirtyChannel flags(флаги OnDirtyChannel):
  • OnRefresh flags(флаги onRefresh):
  • Live status mode(режим текущего состояния):
  • Live block status mode(режим текущего состояния блока)
  • Live block status flags(флаги состояния текущего блока)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Track solor mode(режим выбора трека)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Live loop mode(режим живого цикла)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Live trigger mode(режим активного запуска)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Live Snap(живая привязка)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Channel types(типы каналов)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Channel rack rectangle flags(прямоугольные флажки для стойки каналов)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Trigger live clip flags(запуск флагов живого клипа)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • REC events(запись мероприятия)
Изображение взято из свободных источников
Изображение взято из свободных источников

Примечание: Используйте указанные выше параметры вместе с идентификатором события rec в канале getRecEventId

Например, чтобы изменить громкость канала с индексом 'index', используйте:

midi.REC_Chan_Vol + каналы.getRecEventId(индекс)

  • REC event flags(флаги событий записи)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Step parameters(параметры шага)
Изображение взято из свободных источников
Изображение взято из свободных источников
  • Global transport commnads(глобальные транспортные команды)

Parameter Value Documentation

FPT_Jog 0 (jog) generic jog (can be used to select stuff)

FPT_Jog 21 (jog) alternate generic jog (can be used to relocate stuff)

FPT_Strip 2 touch-sensitive jog strip, value will be in -midi.FromMIDI_Max..midi.FromMIDI_Max for leftmost..rightmost

FPT_StripJog 3(jog) touch-sensitive jog in jog mode

FPT_StripHold 4 value will be 0 for release, 1,2 for 1,2 fingers centered mode, -1,-2 for 1,2 fingers jog mode (will then send FPT_StripJog)

FPT_Previous 5 (button)

FPT_Next 6 (button)

FPT_PreviousNext 7 (jog) generic track selection

FPT_MoveJog 8 (jog) used to relocate items

FPT_Play 10 (button)play/pause

FPT_Stop 11 (button)

FPT_Record 12 (button)

FPT_Rewind 13 (hold) perform rewind, set value to SS_Start to start, set to SS_Stop to stop

FPT_FastForward 14 (hold) perform move forward, set value to SS_Start to start, set to SS_Stop to stop

FPT_Loop 15 (button)

FPT_Mute 16 (button)

FPT_Mode 17 (button) generic | record mode

FPT_Undo 20 (button) undo/redo last, | undo down in history

FPT_UndoUp 21 (button) undo up in history (no need to implement if no undo history)

FPT_UndoJog 22 (jog) undo in history (no need to implement if no undo history)

FPT_Punch 30 (hold) live selection

FPT_PunchIn 31 (button)

FPT_PunchOut 32 (button)

FPT_AddMarker 33 (button)

FPT_AddAltMarker 34 (button) add alternate marker

FPT_MarkerJumpJog 35 (jog) marker jump

FPT_MarkerSelJog 36 (jog) marker selection

FPT_Up 40 (button)

FPT_Down 41 (button)

FPT_Left 42 (button)

FPT_Right 43 (button)

FPT_HZoomJog 44 (jog) change horizontal zoom in active window (playlist/piano roll) or increase/decrease font size (browser)

FPT_VZoomJog 45 (jog) change vertical zoom in active window (playlist/piano roll) or increase/decrease font size (browser)

FPT_Snap 48 (button) snap on/off

FPT_SnapMode 49 (jog) snap mode

FPT_Cut 50 (button)

FPT_Copy 51 (button)

FPT_Paste 52 (button)

FPT_Insert 53 (button)

FPT_Delete 54 (button)

FPT_NextWindow 58 (button) TAB

FPT_WindowJog 59 (jog) window selection

FPT_F1 60 (button)

FPT_F2 61 (button) Rename selected mixer track

FPT_F3 62 (button)

FPT_F4 63 (button) Next empty pattern with naming dialog

FPT_F5 64 (button) Toggle Playlist

FPT_F6 65 (button) Toggle Step Sequencer

FPT_F7 66 (button) Toggle Piano roll

FPT_F8 67 (button) Open Plugin Picker

FPT_F9 68 (button) Show/hide Mixer

FPT_F10 69 (button) Show/hide MIDI settings

FPT_F11 70 (button) Show/hide song info window

FPT_F12 71 (button) Executes the close all windows menu item

FPT_Enter 80 (button) enter/accept

FPT_Escape 81 (button) escape/cancel

FPT_Yes 82 (button) yes

FPT_No 83 (button) no

FPT_Menu 90 (button) generic menu

FPT_ItemMenu 91 (button) item edit/tool/contextual menu

FPT_Save 92 (button)

FPT_SaveNew 93 (button) save as new version

FPT_PatternJog 100 (jog) pattern

FPT_TrackJog 101 (jog) mixerr track

FPT_ChannelJog 102 (jog) channel

FPT_TempoJog 105 (jog) tempo (in 0.1BPM increments)

FPT_TapTempo 106 (button) tempo tapping

FPT_NudgeMinus 107 (hold) tempo nudge -

FPT_NudgePlus 108 (hold) tempo nudge +

FPT_Metronome 110 (button) metronome

FPT_WaitForInput 111 (button) wait for input to start playing

FPT_Overdub 112 (button) overdub recording

FPT_LoopRecord 113 (button) loop recording

FPT_StepEdit 114 (button) step edit mode

FPT_CountDown 115 (button) countdown before recording

FPT_NextMixerWindow 120 (button) tabs between plugin windows in the current mixer track

FPT_MixerWindowJog 121 (jog) mixer window selection

FPT_ShuffleJog 122 main shuffle (in increments of 1)

  • Global transport flags(глобальные транспортные флаги)

Parameter Value Documentation

GT_Cannot -1 not handled

GT_None 0 none

GT_Plugin 1 (handled by) Focused plugin

GT_Form 2 (handled by) Focused form

GT_Menu 4 (handled by) Menu

GT_Global 8 (handled) Globally

GT_All 15 All

GT_Delayed 5 Delayed handling (return value only)

  • Start\Stop options(настройки старт\стоп)

Parameter Value Documentation

SS_Stop 0 Stop movement

SS_StartStep 1 Start movement, but only when FL Studio is in step editing mode.

SS_Start 2 Start movement.

  • Song length mode(режим длительности песни)

Parameter Value Documentation

SONGLENGTH_MS 0 Length in ms

SONGLENGTH_S 1 Length in s.

SONGLENGTH_ABSTICKS 2 Length in absolute ticks

SONGLENGTH_BARS 3 Length in BST format (bars part), not implemented in setSongPos

SONGLENGTH_STEPS 4 Length in BST format (steps part), not implemented in setSongPos

SONGLENGTH_TICKS 5 Length in BST format (ticks part), not implemented in setSongPos

  • PME flags(флаги PME)

Parameter Value Documentation

PME_System 2 Can do system stuff (play/pause.. mostly safe things)

PME_System_Safe 4 Can do critical system stuff (add markers.. things that can't be done when a modal window is shown)

PME_PreviewNote 8 note trigger previews notes | controls stuff

PME_FromHost 16 when the app is hosted

PME_FromMIDI 32 coming from MIDI event

  • Current track flags(флаги текущего трека)

Parameter Value Documentation

curfxScrollToMakeVisible 1 Scroll to visible track

curfxCancelSmoothing 2 Cancel smooting

curfxNoDeselectAll 4 [todo] needs explanation

curfxMinimalLatencyUpdate 8 [todo] needs explanation

  • Track type(тип трека)

Parameter Value Documentation

TN_Master 0 Master

TN_FirstIns 1 First insert

TN_LastIns 2 Last insert

TN_Sel 3 Selected

  • IsIncrement flags(флаги IsIncrement)

Parameter Value Documentation

II_Absolute 0 Absolute

II_Increment 1 Increement

II_Switch 2 Switch

  • Open event editor modes(открытые режимы редактирования событий)

Parameter Value Documentation

EE_EE 0 Controller editor

EE_PR 1 Piano Roll

EE_PL 2 Playlist

  • Track peaks mode(режим отслеживания пиков)

Parameter Value Documentation

PEAK_L 0 Current peak for the left channel

PEAK_R 1 Current peak for the right channel

PEAK_LR 2 Current maximum peak of the peaks from left and right channel

PEAK_L_INV 0 Current peak for the left channel (inverted)

PEAK_R_INV 1 Current peak for the right channel (inverted)

PEAK_LR_INV 3 Current maximum peak of the peaks from left and right channel (inverted)

  • Song tick modes(режимы воспроизведения песен)

Parameter Value Documentation

ST_Int 0 (TODO: needs explanation)

ST_Beat 1 Beat

ST_PGB 2 (TODO: needs explanation)

  • Pickup Follow modes(режимы слежения за приемом)

Parameter Value Documentation

PIM_None 0 do not use pickup

PIM_AlwaysPickup 1 always use pickup

PIM_FollowGlobal 2 follow FL Studio global pickup setting

  • Get linked info result flags(получить связанные информационные флаги результатов)

Parameter Value Documentation

Event_CantInterpolate 1 (TODO: needs explanation)

Event_Float 2 (TODO: needs explanation)

Event_Centered 4 (TODO: needs explanation)

  • Find next empty pattern flags(найти следующие пустые флаги шаблона)

Parameter Value Documentation

FFNEP_FindFirst 0 Find first pattern

FFNEP_DontPromptName 2 Don't prompt pattern name

  • Get Color flags(получите цветные флаги)

Parameter Value Documentation

GC_BackgroundColor 0 Retrieves the darkest background color of the GUI

GC_Semitone 1 Retrieves semitone color (Currently implemented in FPC to get pads color)

  • GetPadName parameter options(параметры параметра GetPadName)

Parameter Value Documentation

PAD_Count 0 Retrieve number of pad parameters supported by plugin

PAD_Semitone 1 Retrieve semitone for pad specified by padIndex

PAD_Color 2 Retrieve color for pad specified by padIndex

  • Get Name flags (not all parameters works in all plugins)(получить флаги имен (не все параметры работают во всех плагинах))

Parameter Value Documentation

FPN_Param 0 Retrieve name of plugin parameter (defined by paramIndex)

FPN_ParamValue 1 Retrieve text value of plugin parameter (defined by paramIndex)

FPN_Semitone 2 Retrieve name of note defined by plugin (by paramIndex)

FPN_Patch 3 Retrieve name of patch defined by plugin (by paramIndex)

FPN_VoiceLevel 4 Retrieve name of per-voice parameter defined by plugin (by paramIndex)

FPN_VoiceLevelHint 5 Retrieve (longer) name of per-voice parameter defined by plugin (by paramIndex)

FPN_Preset 6 For plugins that support internal presets (mainly for the wrapper plugin), retrieve the name for preset at paramIndex
leave paramIndex parameter empty or use midi.GPN_GetCurrentPreset to get current preset name

FPN_OutCtrl 7 for plugins that output controllers, retrieve the name of output controller paramIndex

FPN_VoiceColor 8 retrieve name of per-voice color (MIDI channel) (by paramIndex)

FPN_OutVoice 9 for plugins that output voices, retrieve the name of output voice (by paramIndex)

  • Save undo flags(сохранить флаги отмены)

Parameter Value Documentation

UF_None 0

UF_EE 1 Event editor

UF_PR 2 Piano roll

UF_PL 4 Playlist

UF_EEPR 3 Event editor + piano roll

UF_KNOB 32 Automated control

UF_AudioRec 256 Audio recording

UF_AutoClip 512 Automation clip

UF_PRMarker 1024 Pattern marker

UF_PLMarker 2048 Playlist marker

UF_Plugin 4096 Plugin

UF_SSLooping 8192 Step Sequencer looping

UF_Reset 65536 Reset undo history

  • Snap mode constants(константы режима привязки)

Parameter Value Documentation

Snap_Line 0 Snap to line

Snap_Cell 1 Snap to cell

Snap_None 3 no snap

Snap_SixthStep 4 Snap to sixth step

Snap_FourthStep 5 Snap to fourth step

Snap_ThirdStep 6 Snap to third step

Snap_HalfStep 7 Snap to half step

Snap_Step 8 Snap to step

Snap_SixthBeat 9 Snap to sixth beat

Snap_FourthBeat 10 Snap to fourth beat

Snap_ThirdBeat 11 Snap to third beat

Snap_HalfBeat 12 Snap to half beat

Snap_Beat 13 Snap to beat

Snap_Bar 14 Snap to bar

  • FL window constants(константы окна FL)

Parameter Value Documentation

widMixer 0 Mixer

widChannelRack 1 Channel rack

widPlaylist 2 Playlist

widPianoRoll 3 Piano roll

widBrowser 4 Browser

widPlugin 5 Plugin window (only available inside getFocused function)

widPluginEffect 6 Effect Plugin window (only available inside getFocused/setFocused/getFocusedFormID functions)

widPluginGenerator 7 Generator Plugin window (only available inside getFocused/setFocused/getFocusedFormID functions)

  • FL Browser node types(типы узлов браузера FL)

Parameter Value Documentation

SBN_FLP 1 FL studio project

SBN_ZIP 2 Zipped archive

SBN_FLM 3 FL studio project

SBN_FST 4 FL Studio state preset

SBN_DS 5 Ds file

SBN_SS 6 SS file

SBN_WAV 7 Wav file

SBN_XI 8 XI file

SBN_FPR 9 Fpr file

SBN_FSC 10 FSC file

SBN_SF2 11 SF2 file

SBN_Speech 12 Speech file

SBN_MP3 13 MP3 file

SBN_OGG 14 Ogg file

SBN_FLAC 15 Flac file

SBN_OSM 16 OSM file

SBN_REX 17 REX file

SBN_DWP 18 DirectWave preset

SBN_FNV 19 FNV file

SBN_FXB 20 FXB file

SBN_AIFF 21 AIFF file

SBN_TXT 22 Text file

SBN_BMP 23 Image

SBN_WV 24 WV file

SBN_TS 25 TS file

SBN_RBS 26 RBS file

SBN_MID 27 Midi file

SBN_FLEXPack 28 Flex pack

SBN_NEWS 29 News item

SBN_SHOP 30 Shop item(unused)

SBN_LIB 31 Library item

SBN_LIBOWNED 32 Library item(owned)

SBN_NOTIFICATION 33 Notification item

SBN_DOWNLOAD 34 Download item

SBN_M4A 35 M4A file

SBN_INSTR 36 INSTR file

SBN_REDIRECT 37 Redirect item

Инструменты для тестирования функций и редактирования скриптов

Функции скрипта
Обратные вызовы — это функции, которые выполняют действия или влияют на компоненты в FL Studio. Например, с помощью функции обратного вызова можно присвоить имя каналу инструмента, переместить канал вверх/вниз или удалить его. Или, что проще, переназначить кнопки перемещения в FL Studio на свой контроллер. Другими словами, обратные вызовы дают вам полный контроль над FL Studio и ее работой. Чтобы использовать функцию в скрипте, используйте следующий синтаксис:

module.functionName(arguments) — где 'module' — это имя модуля. ПРИМЕЧАНИЕ: Имена функций пишутся в нижнем регистре с заглавной буквы.
События скрипта
События скрипта — это функции, вызываемые FL Studio. Если скрипту нужно отреагировать на событие, добавьте в скрипт функцию обработки события:

def eventName(arguments) — напишите код ответа внутри этой функции. ПРИМЕЧАНИЕ: в названиях событий используется стиль Camel Case
Предопределённые параметры скрипта
Скрипт «предопределённые параметры» позволяет сообщить FL Studio дополнительную информацию о вашем скрипте. Включите предопределённые параметры в начало основного файла .py. К предопределённым параметрам относятся:

name (обязательно) - имя вашего скрипта, указанное в списке Настройки MIDI > Тип контроллера.
url (необязательно) - ссылка на форум по MIDI-скриптингу Image-Line, где пользователи могут обсудить или получить помощь по вашему скрипту. URL-адреса должны начинаться с https://forum.image-line.com. Например, ссылка на список «Рабочих скриптов» — https://forum.image-line.com/viewtopic.php?f=1994&t=228179. Вы можете дать ссылку на любой пост на форуме MIDI-скриптинга.
receiveFrom (необязательно) — укажите имя устройства, с которого будут поступать MIDI-события. Если указано, FL Studio будет отправлять сообщения (через функцию device.dispatch) с указанного устройства.
supportedDevices (необязательно) — список имён устройств, поддерживаемых вашим скриптом, через запятую. Если указано, FL Studio автоматически свяжет скрипт с устройствами, имена которых соответствуют этому списку.
supportedHardwareIds (необязательно) — список аппаратных идентификаторов устройств, поддерживаемых вашим скриптом, через запятую. Если указано, FL Studio автоматически свяжет скрипт с устройствами с такими же аппаратными идентификаторами. СОВЕТ: Вы можете использовать части аппаратных идентификаторов, чтобы не указывать номера версий прошивки устройств.
Пример:

# название=Мой скрипт Launch Control
# ссылка=https://forum.image-line.com/viewtopic.php?p=1494175#p1494175
# поддерживаемые устройства=Launch Control XL, Launch Control XL mkII
# получать от=Переадресация устройства
# поддерживаемые аппаратные идентификаторы=00 20 29 61 00 00 00 00 00 02 07

Откройте окно VIEW menu > Script output:

Interpreter(интерпретатор) — на этой вкладке можно вводить и тестировать команды скрипта, чтобы убедиться, что они работают должным образом:

Изображение взято из свободных источников
Изображение взято из свободных источников
  • Script(скрипт) — когда в настройках MIDI выбран MIDI-скрипт, на второй вкладке отображается название устройства (в данном случае FL STUDIO FIRE). При наличии необработанных MIDI-событий данные будут отображаться здесь. ПРИМЕЧАНИЕ: на вкладке журнала отладки(Debug) также отображаются ВСЕ входящие MIDI-данные.
  • ПРИМЕЧАНИЕ: Если ваш скрипт загружается и компилируется правильно, вы увидите инициализация прошла успешно, в окне «Script».
  • Clear output(очистить вывод) — очищает данные вкладок.
  • Edit script(редактировать скрипт) — открывает текущий скрипт в системном текстовом редакторе для внесения изменений.
  • Reload script(перезагрузить скрипт) — применяет отредактированный скрипт, чтобы вам не пришлось перезапускать FL Studio для его тестирования.

Вот и финишная прямая! Не забудьте оставить лайк — это как сказать „спасибо“ в цифровом мире, — и подписывайтесь, чтобы быть в курсе выхода новых статей!

Друзья! Я открыл новый канал по разбору программы Bitwig Studio, где так же провожу полный разбор всех настроек, функций и прочих фишек этой программы! Буду раз подписке и лайкам!

Bitwig Studio с нуля: твой путь в музыку | Дзен