Cakewalk Application Language (CAL) - Загальна інформація
Зображення створено за допомогою генеративного ШІ для MIDITAUR. Концепція, композиція та текстове оформлення — MIDITAUR. Назви Cakewalk і CAL використано в редакційному та інформаційному контексті.
Зміст публікації

Це перша публікація з циклу Cakewalk Application Language (CAL), і вона буде присвячена загальному огляду внутрішньої мови застосунків Cakewalk.
Простими словами, це внутрішня мова програмування, яка працює всередині Cakewalk і здатна економити багато часу під час роботи з програмним секвенсором. Ця публікація розпочинає цикл матеріалів про CAL і має оглядовий, загальний характер — звідси й назва статті.
Cakewalk Application Language (CAL) — це мова обробки подій, яку використовують для розширення можливостей MIDI та цифрових аудіосеквенсорів Cakewalk за допомогою спеціальних команд редагування. Офіційна документація Cakewalk також визначає CAL як event-processing language для створення власних editing commands.
Звідки взялася CAL
CAL бере свій початок ще з Cakewalk для DOS і розвивалася протягом багатьох років у Cakewalk Professional, Cakewalk Pro Audio та наступних версіях SONAR. Через таку довгу історію окремі CAL-файли можуть бути не однаково сумісними з усіма поколіннями Cakewalk.
Твердження, що Cakewalk повністю відмовився від CAL, не зовсім точне: CAL залишалася доступною в SONAR, а офіційна документація описує запуск CAL programs і sample CAL files. Водночас немає гарантії, що кожен старий сценарій працюватиме без змін у кожній версії, особливо якщо він створює нові tracks або залежить від поведінки конкретного release.
У свій час Cakewalk був далеко попереду багатьох інших DAW у підтримці MIDI, і CAL була одним із інструментів такого підходу. Більшість сценаріїв CAL створювали самі користувачі — не обов’язково професійні програмісти, а музиканти, яким було потрібно швидко автоматизувати повторювані операції під час складання та редагування.
Застереження перед експериментами
Експерименти з CAL можуть привести до зависання основної програми або дати несподіваний результат. Перед запуском незнайомого сценарію рекомендую зберігати резервну копію основного робочого файлу. За бажання можна вести кілька версій проєкту, щоб легко повернутися до попереднього стану.
CAL-файли
Власні CAL-програми можна писати у звичайному текстовому редакторі, наприклад у Блокноті. Так само можна відкривати, вивчати й редагувати сценарії, створені іншими користувачами.
CAL-файли зберігаються з розширенням .cal. У старіших Cakewalk Professional / Pro Audio каталог для таких файлів визначався параметром CALFileDir; у пізніших SONAR CAL programs запускаються через відповідну команду Run CAL.
Багато сценаріїв містять короткий опис у заголовку. Якщо потрібна додаткова інформація про конкретний script, практично шукати її за його назвою та порівнювати з документацією версії Cakewalk, у якій він використовувався.
Написання програм CAL
CAL поєднує риси мов програмування C і LISP. Синтаксис значною мірою побудований на виразах у дужках, де оператор викликає функцію з аргументами.
Розглянемо source-приклад, який запитує у користувача число, а потім додає його до параметра velocity нотних подій:
(do)
(int amt 0)
(getInt amt "Amount to add?" -127 127)
(forEachEvent
(if (== Event.Kind NOTE)
(+= Note.Vel amt)
)
)
)
У цьому прикладі getInt отримує числове значення, а forEachEvent проходить вибрані events. Для нотних подій умова Event.Kind NOTE дозволяє змінити Note.Vel.
Узагальнена форма виклику виглядає так:
(function argument(s))
Приклад: назва track за його номером
Ще один source-приклад встановлює назву track так, щоб вона містила його номер:
(int nTrack 1)
(getInt nTrack "Number of track to name?" 1 256)
; Дайте доріжці назву "Track N", де N - номер треку.
; Зауважте, що (TrackName) очікує число в діапазоні 0..255, а не 1..256.
(TrackName (format "Track " nTrack) (- nTrack 1))
Тут різниця між користувацькою нумерацією 1–256 і внутрішнім діапазоном 0–255 компенсується виразом (- nTrack 1).
Основні категорії CAL
У довідкових матеріалах CAL функції згруповані за такими основними категоріями:
- Типи даних CAL (CAL Data Types)
- Математичні функції (Math functions)
- Реляційні функції (Relational functions)
- Булеві функції (Boolean functions)
- Функції присвоєння (Assignment functions)
- Обробка кожної події (
forEachEvent) - Змінні параметрів події (Event parameter variables)
- Маркерні змінні (Marker variables)
- Буферні функції (Buffer functions)
- Функції музичного часу (Musical time functions)
- Вихідні функції (Output functions)
- Функції введення (Input functions)
- Функції потоку керування (Control flow functions)
- Include
- DLL
- Відправлення MIDI (
sendMIDI) - Затримка (
delay)
Функції, що відповідають командам Cakewalk
Окремі групи CAL functions відповідають операціям користувацького інтерфейсу Cakewalk, зокрема:
- командам меню File;
- командам меню Edit;
- командам переходу / Go;
- командам, пов’язаним із tracks;
- командам меню Settings.
Зразки CAL-файлів
Cakewalk постачав sample CAL programs разом із MIDI/audio sequencer products для Windows. Їх можна використовувати як готові інструменти або як основу для власних змін.
Офіційна документація SONAR містить окремий розділ із sample CAL files. Це особливо корисно для навчання: готовий невеликий script часто простіше розібрати й адаптувати, ніж писати першу програму з чистого аркуша.
У наступних публікаціях цього циклу ми розглянемо практичні приклади застосування Cakewalk Application Language (CAL). На сьогодні поки що все. Дякую за увагу! Маю надію, що ця публікація стане Вам у пригоді. Бажаю всім доброго здоров’я! Бережіть себе!