Вы когда‑нибудь чувствовали, что ваш 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) # Вибрация
Что происходит «под капотом»?
- Цикл обработки. Скрипт работает в бесконечном цикле, проверяя:
новые MIDI‑сообщения;
события FL Studio (изменение трека, запуск воспроизведения);
таймеры (для анимаций подсветки). - Буферизация. Чтобы избежать пропусков, скрипт может накапливать сообщения и обрабатывать их пакетами.
- Синхронизация. Для ритмических эффектов (пульсирующая подсветка) скрипт синхронизируется с темпом проекта:pythonif time.time() % (60.0 / bpm) < 0.1:
ToggleLED() - Обработка ошибок. Если плагин не отвечает, скрипт может:
вывести предупреждение;
переключиться в безопасный режим;
записать ошибку в лог.
Пример полного цикла
Ситуация: Вы двигаете фейдер, чтобы изменить громкость трека.
- Контроллер отправляет: 0xB0 07 95 (CC 7 = 95).
- Скрипт получает сообщение, проверяет, что это фейдер громкости.
- Преобразует 95 → 0.75 (нормализованное значение).
- Вызывает mixer.SetTrackVolume(1, 0.75).
- Отправляет контроллеру: 0xB0 15 95 (зажечь индикатор на фейдере).
- Если трек заглушён, дополнительно мигает красным: 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. Активация: три шага до волшебства
- Подключите контроллер к компьютеру (USB/MIDI).
- Откройте настройки FL Studio:
Нажмите F10 или выберите Options → MIDI Settings. - На вкладке 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 в папке с пользовательскими данными:
- Создайте папку — с помощью файлового менеджера в выбранной вами операционной системе перейдите в папку FL Studio папка с пользовательскими данными , обычно это '...Documents\Image-Line\FL Studio\Settings\Hardware\вложенная папка вашего скрипта', где 'вложенная папка вашего скрипта' — это вложенная папка, которую вы создали для своего скрипта.
- Создайте файл сценария - В папке 'YourScriptSubFolder' создайте обычный текстовый файл 'device_YourScriptName.txt'. Откройте текстовый файл и добавьте следующую строку текста, которая будет названием скрипта, отображаемого в списке MIDI Settings > Тип контроллера:# название=Мой первый скрипт
- Измените тип расширения файла на .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, где так же провожу полный разбор всех настроек, функций и прочих фишек этой программы! Буду раз подписке и лайкам!