1 00:00:00,000 --> 00:00:02,238 Привет, это X-Raym. 2 00:00:02,240 --> 00:00:06,719 И это руководство по написанию скриптов в Reaper 5. 3 00:00:06,719 --> 00:00:09,958 Полагаю, вы уже наслышаны о REAPER, 4 00:00:09,959 --> 00:00:12,519 среда для различных манипуляций с аудио. 5 00:00:12,520 --> 00:00:19,598 И эта серия руководств "Основы ReaScript" 6 00:00:19,599 --> 00:00:23,438 введёт вас в курс того, что в скриптах происходит. 7 00:00:23,439 --> 00:00:27,118 Или, другими словами, научить писать скрипты. 8 00:00:27,119 --> 00:00:33,118 Рекомендую прочитать интервью, которое я дал The REAPER Blog. 9 00:00:33,119 --> 00:00:40,198 Там я поясняю всё, что нужно знать в первую очередь 10 00:00:40,199 --> 00:00:45,399 Цель этого видео - начать кодить 11 00:00:45,400 --> 00:00:49,759 практикованием. 12 00:00:49,760 --> 00:00:52,958 Мы сделаем это за несколько шагов. 13 00:00:52,959 --> 00:00:55,799 Мы увидим в первом видео, 14 00:00:55,800 --> 00:00:58,318 как использовать консоль и зачем. 15 00:00:58,319 --> 00:01:03,039 Мы создадим новый экшн / скрипт 16 00:01:03,040 --> 00:01:08,679 запустив окно с экшнами, затем кликнув ReaScript -> New 17 00:01:08,680 --> 00:01:12,879 Откроется папка с пользовательскими скриптами 18 00:01:12,880 --> 00:01:15,198 и я введу имя нового скрипта. 19 00:01:15,199 --> 00:01:19,679 "Мой новый скрипт" 20 00:01:19,680 --> 00:01:24,718 Затем допишу расширение, ".lua". 21 00:01:24,719 --> 00:01:29,198 Расширение определяет, какой язык я хочу использовать для написания этого с крипта. 22 00:01:29,199 --> 00:01:33,078 Существует два языка, встроенные в REAPER - это LUA и EEL 23 00:01:33,079 --> 00:01:37,519 Писать скрипты также можно на Python, для этого требуются сторонние библиотеки 24 00:01:37,520 --> 00:01:41,598 Мы выберем встроенные интерпретаторы языков, 25 00:01:41,599 --> 00:01:44,679 кроме того, с ними кодить проще. 26 00:01:44,680 --> 00:01:50,040 Они также более гибкие и быстры в исполнении. 27 00:01:51,719 --> 00:01:54,118 Если я нажму Save, появится окно 28 00:01:54,119 --> 00:01:57,279 "Среда для разработки ReaScript ", 29 00:01:57,280 --> 00:02:01,519 в которой вы можете писать скрипт прямо внутри REAPER, 30 00:02:01,520 --> 00:02:04,879 что очень круто 31 00:02:04,880 --> 00:02:08,238 Это новая фишка в REAPER 5, 32 00:02:08,239 --> 00:02:10,878 как и интегиированный интерпретатор lua. 33 00:02:10,880 --> 00:02:16,838 Начнём писать скрипт, который покажет нам сообщение в консоли. 34 00:02:16,839 --> 00:02:21,519 Консоль призвана помочь в разработке скрипта. 35 00:02:21,520 --> 00:02:26,440 Для того, чтобы её открыть нам нужна функция "ShowConsoleMsg()" 36 00:02:31,880 --> 00:02:35,118 Так как это встроенная функция REAPER, 37 00:02:35,119 --> 00:02:39,039 нам нужно написать префикс "reaper." 38 00:02:42,160 --> 00:02:47,960 В качестве параметра, мы пишем string переменную в кавычках 39 00:02:53,479 --> 00:02:59,478 Ctrl+S сохраняет и запускает скрипт. 40 00:02:59,479 --> 00:03:03,679 Консоль открылась, как вы видите. 41 00:03:03,680 --> 00:03:06,238 С тем сообщением, которые мы написали. 42 00:03:06,239 --> 00:03:09,198 Если я нажму Start снова, 43 00:03:09,199 --> 00:03:16,039 сообщение снова появится после того, что у нас уже было в консоли. 44 00:03:16,040 --> 00:03:19,120 Для очистки консоли мы можем нажать "Clear". 45 00:03:19,121 --> 00:03:25,039 Идея консоли в том, чтобы показывать переменную и её значение. 46 00:03:27,319 --> 00:03:30,318 Создадим переменную. 47 00:03:30,319 --> 00:03:37,958 Пусть это будет string переменная "Hello world". 48 00:03:37,959 --> 00:03:45,959 Здесь мы заменяем переменную string на имя переменной. 49 00:03:46,040 --> 00:03:52,039 Теперь отображается значение переменной в консоли. 50 00:03:52,040 --> 00:03:54,478 Как и ранее. 51 00:03:54,479 --> 00:04:00,879 Теперь, чтобы показать вторую стркоу 52 00:04:00,880 --> 00:04:08,880 создадим вторую переменную и назовём её "How are you today?" 53 00:04:12,680 --> 00:04:16,759 Просто продублируем функцию. 54 00:04:16,760 --> 00:04:21,879 И выберем вторую переменную как параметр. 55 00:04:21,880 --> 00:04:23,080 Если я вывожу результат, 56 00:04:25,479 --> 00:04:30,999 вы видите, что значения идут один за другим. 57 00:04:31,000 --> 00:04:34,958 Консоль не была очищена. 58 00:04:34,959 --> 00:04:40,718 Это напрягает, так как часто запускаю консоль в процессе кодинга 59 00:04:40,719 --> 00:04:43,959 Для очистки консоли напишем 60 00:04:45,239 --> 00:04:46,959 reaper. ShowConsoleMsg() 61 00:04:48,439 --> 00:04:50,919 с кавычками вместо переменной. 62 00:04:50,920 --> 00:04:53,160 Этим мы очистим консоль. 63 00:04:54,239 --> 00:04:58,238 Пример. Если я удалю всё это и нажму save + run, 64 00:04:58,239 --> 00:05:00,198 консоль очистится. 65 00:05:00,199 --> 00:05:01,199 Если я восстановлю всё обратно 66 00:05:03,160 --> 00:05:07,238 две линии вернутся назад, 67 00:05:07,239 --> 00:05:08,639 Если я нажму "Start". 68 00:05:09,800 --> 00:05:12,999 Ничего не изменится, так как консоль очищена 69 00:05:13,000 --> 00:05:16,199 и strings переменные отобразятся снова. 70 00:05:17,439 --> 00:05:21,879 Теперь я хочу создать промежуток между двумя переменными. 71 00:05:21,880 --> 00:05:28,358 Пишем reaper. ShowConsoleMsg() 72 00:05:28,359 --> 00:05:35,639 и в качестве параметра напишем "\n". 73 00:05:35,640 --> 00:05:38,358 Этот код создаёт разделитель 74 00:05:38,359 --> 00:05:42,159 Разделительная линия теперь между двух string переменных 75 00:05:42,160 --> 00:05:46,039 Вместо того, чтобы писать несколько функций 76 00:05:46,040 --> 00:05:48,360 т.е. ShowConsoleMsg несколько раз 77 00:05:48,361 --> 00:05:53,319 Я могу написать это в одной функции. 78 00:06:00,040 --> 00:06:02,200 Т.е. выполнить это одновременно 79 00:06:02,201 --> 00:06:06,639 Что это даёт: 80 00:06:08,520 --> 00:06:13,838 если я нажимаю "save + run", получаю тот же результат 81 00:06:13,839 --> 00:06:20,399 Я могу также добавить другие strings после этого. 82 00:06:20,400 --> 00:06:26,800 Например, "I'm fine, thank you" 83 00:06:29,400 --> 00:06:32,838 Разделитель не был добавлен, могу добавить его 84 00:06:32,839 --> 00:06:36,799 Или в начале, например. 85 00:06:36,800 --> 00:06:41,679 Можно и здесь, вывод будет тем же 86 00:06:41,680 --> 00:06:45,080 или как мы сделали раньше 87 00:06:49,119 --> 00:06:51,759 Всё это будет иметь один результат. 88 00:06:52,446 --> 00:07:00,365 Чтобы постоянно не писать длинное "reaper.ShowConsoleMsg" каждый раз 89 00:07:00,366 --> 00:07:03,445 и постоянно добавлять разделители, 90 00:07:03,446 --> 00:07:09,125 я могу создать функцию, которую я назову "Msg" 91 00:07:09,126 --> 00:07:14,326 Она будет иметь один параметр 92 00:07:18,646 --> 00:07:20,205 Функция должна заканчиваться на "end" 93 00:07:20,206 --> 00:07:24,205 Напишу содержание - то, что функция будет выполнять при вызове. 94 00:07:24,206 --> 00:07:29,886 Она будет показывать то, что мы указали в её параметрах 95 00:07:30,886 --> 00:07:34,685 И добавлю разделитель. 96 00:07:34,686 --> 00:07:35,766 Это означает, 97 00:07:37,606 --> 00:07:40,286 что если я вызываю функцию 98 00:07:42,366 --> 00:07:45,365 вместе с её указанными параметрами 99 00:07:45,366 --> 00:07:46,366 string переменной в данном случае, 100 00:07:50,086 --> 00:07:51,086 и string2 101 00:07:55,286 --> 00:07:57,685 Здесь мы видим ошибку 102 00:07:57,686 --> 00:07:59,765 "reaper. ShowConsole is unknown" 103 00:07:59,766 --> 00:08:03,886 Я забыл дописать "Msg" в имя встроенной функции 104 00:08:04,926 --> 00:08:07,645 теперь разделители добавляются авоматически 105 00:08:07,646 --> 00:08:10,285 Не буду это переписывать 106 00:08:10,286 --> 00:08:12,086 Просто продублирую 107 00:08:14,406 --> 00:08:16,885 Как вы видите, разделители добавляются автоматически, 108 00:08:16,886 --> 00:08:19,286 это ускоряет процесс кодинга. 109 00:08:21,286 --> 00:08:28,445 ShowConsoleMsg может принимать числа. 110 00:08:28,446 --> 00:08:30,685 Если я напишу "6", 111 00:08:30,686 --> 00:08:34,325 вы увидите, что выход консоли - "6". 112 00:08:34,326 --> 00:08:37,445 Но если переменной, которую мы хотим показать, не существует 113 00:08:37,446 --> 00:08:41,164 например, string3, 114 00:08:41,166 --> 00:08:43,845 то я получу ошибку, которая говорит мне, 115 00:08:43,846 --> 00:08:49,805 что я пытаюсь соединить не существующее значение со string. 116 00:08:49,806 --> 00:08:54,245 Nil - это тип переменной в LUA, которая определяет, 117 00:08:54,246 --> 00:08:58,726 что переменная не была обозначена ранее, или её значение nil. 118 00:08:59,766 --> 00:09:06,285 Я получу тот же результат, если поставлю nil в качестве параметра. 119 00:09:06,286 --> 00:09:08,365 Как вы видите, ошибка. 120 00:09:08,366 --> 00:09:11,446 то же самое будет с string3... 121 00:09:14,966 --> 00:09:17,206 значение которой nil 122 00:09:19,006 --> 00:09:24,605 Важно избегать таких типов сообщений в скрипте, 123 00:09:24,606 --> 00:09:27,086 Это означает, что скрипт имеет баг, и не выполнится полностью. 124 00:09:27,886 --> 00:09:30,765 Чтобы быть уверенными в том, что наш скрипт работает, 125 00:09:30,766 --> 00:09:32,965 мы используем lua функцию (не рипера), 126 00:09:32,966 --> 00:09:40,085 с помощью которой мы конвертируем используемый параметр. 127 00:09:40,086 --> 00:09:44,005 Если я запущу скрипт заново, "nil" отобразится как текст, 128 00:09:44,006 --> 00:09:45,845 и ошибки больше не будет. 129 00:09:45,846 --> 00:09:50,606 Наша функция готова для того, чтобы быть использованной в следующем скрипте.