WEBVTT 00:00:00.000 --> 00:00:02.238 Привет, это X-Raym. 00:00:02.240 --> 00:00:06.719 И это руководство по написанию скриптов в Reaper 5. 00:00:06.719 --> 00:00:09.958 Полагаю, вы уже наслышаны о REAPER, 00:00:09.959 --> 00:00:12.519 среда для различных манипуляций с аудио. 00:00:12.520 --> 00:00:19.598 И эта серия руководств "Основы ReaScript" 00:00:19.599 --> 00:00:23.438 введёт вас в курс того, что в скриптах происходит. 00:00:23.439 --> 00:00:27.118 Или, другими словами, научить писать скрипты. 00:00:27.119 --> 00:00:33.118 Рекомендую прочитать интервью, которое я дал The REAPER Blog. 00:00:33.119 --> 00:00:40.198 Там я поясняю всё, что нужно знать в первую очередь 00:00:40.199 --> 00:00:45.399 Цель этого видео - начать кодить 00:00:45.400 --> 00:00:49.759 практикованием. 00:00:49.760 --> 00:00:52.958 Мы сделаем это за несколько шагов. 00:00:52.959 --> 00:00:55.799 Мы увидим в первом видео, 00:00:55.800 --> 00:00:58.318 как использовать консоль и зачем. 00:00:58.319 --> 00:01:03.039 Мы создадим новый экшн / скрипт 00:01:03.040 --> 00:01:08.679 запустив окно с экшнами, затем кликнув ReaScript -> New 00:01:08.680 --> 00:01:12.879 Откроется папка с пользовательскими скриптами 00:01:12.880 --> 00:01:15.198 и я введу имя нового скрипта. 00:01:15.199 --> 00:01:19.679 "Мой новый скрипт" 00:01:19.680 --> 00:01:24.718 Затем допишу расширение, ".lua". 00:01:24.719 --> 00:01:29.198 Расширение определяет, какой язык я хочу использовать для написания этого с крипта. 00:01:29.199 --> 00:01:33.078 Существует два языка, встроенные в REAPER - это LUA и EEL 00:01:33.079 --> 00:01:37.519 Писать скрипты также можно на Python, для этого требуются сторонние библиотеки 00:01:37.520 --> 00:01:41.598 Мы выберем встроенные интерпретаторы языков, 00:01:41.599 --> 00:01:44.679 кроме того, с ними кодить проще. 00:01:44.680 --> 00:01:50.040 Они также более гибкие и быстры в исполнении. 00:01:51.719 --> 00:01:54.118 Если я нажму Save, появится окно 00:01:54.119 --> 00:01:57.279 "Среда для разработки ReaScript ", 00:01:57.280 --> 00:02:01.519 в которой вы можете писать скрипт прямо внутри REAPER, 00:02:01.520 --> 00:02:04.879 что очень круто 00:02:04.880 --> 00:02:08.238 Это новая фишка в REAPER 5, 00:02:08.239 --> 00:02:10.878 как и интегиированный интерпретатор lua. 00:02:10.880 --> 00:02:16.838 Начнём писать скрипт, который покажет нам сообщение в консоли. 00:02:16.839 --> 00:02:21.519 Консоль призвана помочь в разработке скрипта. 00:02:21.520 --> 00:02:26.440 Для того, чтобы её открыть нам нужна функция "ShowConsoleMsg()" 00:02:31.880 --> 00:02:35.118 Так как это встроенная функция REAPER, 00:02:35.119 --> 00:02:39.039 нам нужно написать префикс "reaper." 00:02:42.160 --> 00:02:47.960 В качестве параметра, мы пишем string переменную в кавычках 00:02:53.479 --> 00:02:59.478 Ctrl+S сохраняет и запускает скрипт. 00:02:59.479 --> 00:03:03.679 Консоль открылась, как вы видите. 00:03:03.680 --> 00:03:06.238 С тем сообщением, которые мы написали. 00:03:06.239 --> 00:03:09.198 Если я нажму Start снова, 00:03:09.199 --> 00:03:16.039 сообщение снова появится после того, что у нас уже было в консоли. 00:03:16.040 --> 00:03:19.120 Для очистки консоли мы можем нажать "Clear". 00:03:19.121 --> 00:03:25.039 Идея консоли в том, чтобы показывать переменную и её значение. 00:03:27.319 --> 00:03:30.318 Создадим переменную. 00:03:30.319 --> 00:03:37.958 Пусть это будет string переменная "Hello world". 00:03:37.959 --> 00:03:45.959 Здесь мы заменяем переменную string на имя переменной. 00:03:46.040 --> 00:03:52.039 Теперь отображается значение переменной в консоли. 00:03:52.040 --> 00:03:54.478 Как и ранее. 00:03:54.479 --> 00:04:00.879 Теперь, чтобы показать вторую стркоу 00:04:00.880 --> 00:04:08.880 создадим вторую переменную и назовём её "How are you today?" 00:04:12.680 --> 00:04:16.759 Просто продублируем функцию. 00:04:16.760 --> 00:04:21.879 И выберем вторую переменную как параметр. 00:04:21.880 --> 00:04:23.080 Если я вывожу результат, 00:04:25.479 --> 00:04:30.999 вы видите, что значения идут один за другим. 00:04:31.000 --> 00:04:34.958 Консоль не была очищена. 00:04:34.959 --> 00:04:40.718 Это напрягает, так как часто запускаю консоль в процессе кодинга 00:04:40.719 --> 00:04:43.959 Для очистки консоли напишем 00:04:45.239 --> 00:04:46.959 reaper. ShowConsoleMsg() 00:04:48.439 --> 00:04:50.919 с кавычками вместо переменной. 00:04:50.920 --> 00:04:53.160 Этим мы очистим консоль. 00:04:54.239 --> 00:04:58.238 Пример. Если я удалю всё это и нажму save + run, 00:04:58.239 --> 00:05:00.198 консоль очистится. 00:05:00.199 --> 00:05:01.199 Если я восстановлю всё обратно 00:05:03.160 --> 00:05:07.238 две линии вернутся назад, 00:05:07.239 --> 00:05:08.639 Если я нажму "Start". 00:05:09.800 --> 00:05:12.999 Ничего не изменится, так как консоль очищена 00:05:13.000 --> 00:05:16.199 и strings переменные отобразятся снова. 00:05:17.439 --> 00:05:21.879 Теперь я хочу создать промежуток между двумя переменными. 00:05:21.880 --> 00:05:28.358 Пишем reaper. ShowConsoleMsg() 00:05:28.359 --> 00:05:35.639 и в качестве параметра напишем "\n". 00:05:35.640 --> 00:05:38.358 Этот код создаёт разделитель 00:05:38.359 --> 00:05:42.159 Разделительная линия теперь между двух string переменных 00:05:42.160 --> 00:05:46.039 Вместо того, чтобы писать несколько функций 00:05:46.040 --> 00:05:48.360 т.е. ShowConsoleMsg несколько раз 00:05:48.361 --> 00:05:53.319 Я могу написать это в одной функции. 00:06:00.040 --> 00:06:02.200 Т.е. выполнить это одновременно 00:06:02.201 --> 00:06:06.639 Что это даёт: 00:06:08.520 --> 00:06:13.838 если я нажимаю "save + run", получаю тот же результат 00:06:13.839 --> 00:06:20.399 Я могу также добавить другие strings после этого. 00:06:20.400 --> 00:06:26.800 Например, "I'm fine, thank you" 00:06:29.400 --> 00:06:32.838 Разделитель не был добавлен, могу добавить его 00:06:32.839 --> 00:06:36.799 Или в начале, например. 00:06:36.800 --> 00:06:41.679 Можно и здесь, вывод будет тем же 00:06:41.680 --> 00:06:45.080 или как мы сделали раньше 00:06:49.119 --> 00:06:51.759 Всё это будет иметь один результат. 00:06:52.446 --> 00:07:00.365 Чтобы постоянно не писать длинное "reaper.ShowConsoleMsg" каждый раз 00:07:00.366 --> 00:07:03.445 и постоянно добавлять разделители, 00:07:03.446 --> 00:07:09.125 я могу создать функцию, которую я назову "Msg" 00:07:09.126 --> 00:07:14.326 Она будет иметь один параметр 00:07:18.646 --> 00:07:20.205 Функция должна заканчиваться на "end" 00:07:20.206 --> 00:07:24.205 Напишу содержание - то, что функция будет выполнять при вызове. 00:07:24.206 --> 00:07:29.886 Она будет показывать то, что мы указали в её параметрах 00:07:30.886 --> 00:07:34.685 И добавлю разделитель. 00:07:34.686 --> 00:07:35.766 Это означает, 00:07:37.606 --> 00:07:40.286 что если я вызываю функцию 00:07:42.366 --> 00:07:45.365 вместе с её указанными параметрами 00:07:45.366 --> 00:07:46.366 string переменной в данном случае, 00:07:50.086 --> 00:07:51.086 и string2 00:07:55.286 --> 00:07:57.685 Здесь мы видим ошибку 00:07:57.686 --> 00:07:59.765 "reaper. ShowConsole is unknown" 00:07:59.766 --> 00:08:03.886 Я забыл дописать "Msg" в имя встроенной функции 00:08:04.926 --> 00:08:07.645 теперь разделители добавляются авоматически 00:08:07.646 --> 00:08:10.285 Не буду это переписывать 00:08:10.286 --> 00:08:12.086 Просто продублирую 00:08:14.406 --> 00:08:16.885 Как вы видите, разделители добавляются автоматически, 00:08:16.886 --> 00:08:19.286 это ускоряет процесс кодинга. 00:08:21.286 --> 00:08:28.445 ShowConsoleMsg может принимать числа. 00:08:28.446 --> 00:08:30.685 Если я напишу "6", 00:08:30.686 --> 00:08:34.325 вы увидите, что выход консоли - "6". 00:08:34.326 --> 00:08:37.445 Но если переменной, которую мы хотим показать, не существует 00:08:37.446 --> 00:08:41.164 например, string3, 00:08:41.166 --> 00:08:43.845 то я получу ошибку, которая говорит мне, 00:08:43.846 --> 00:08:49.805 что я пытаюсь соединить не существующее значение со string. 00:08:49.806 --> 00:08:54.245 Nil - это тип переменной в LUA, которая определяет, 00:08:54.246 --> 00:08:58.726 что переменная не была обозначена ранее, или её значение nil. 00:08:59.766 --> 00:09:06.285 Я получу тот же результат, если поставлю nil в качестве параметра. 00:09:06.286 --> 00:09:08.365 Как вы видите, ошибка. 00:09:08.366 --> 00:09:11.446 то же самое будет с string3... 00:09:14.966 --> 00:09:17.206 значение которой nil 00:09:19.006 --> 00:09:24.605 Важно избегать таких типов сообщений в скрипте, 00:09:24.606 --> 00:09:27.086 Это означает, что скрипт имеет баг, и не выполнится полностью. 00:09:27.886 --> 00:09:30.765 Чтобы быть уверенными в том, что наш скрипт работает, 00:09:30.766 --> 00:09:32.965 мы используем lua функцию (не рипера), 00:09:32.966 --> 00:09:40.085 с помощью которой мы конвертируем используемый параметр. 00:09:40.086 --> 00:09:44.005 Если я запущу скрипт заново, "nil" отобразится как текст, 00:09:44.006 --> 00:09:45.845 и ошибки больше не будет. 00:09:45.846 --> 00:09:50.606 Наша функция готова для того, чтобы быть использованной в следующем скрипте.