[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:02.24,Default,,0000,0000,0000,,Привет, это X-Raym. Dialogue: 0,0:00:02.24,0:00:06.72,Default,,0000,0000,0000,,И это руководство по \Nнаписанию скриптов в Reaper 5. Dialogue: 0,0:00:06.72,0:00:09.96,Default,,0000,0000,0000,,Полагаю, вы \Nуже наслышаны о REAPER, Dialogue: 0,0:00:09.96,0:00:12.52,Default,,0000,0000,0000,,среда для различных манипуляций с аудио. Dialogue: 0,0:00:12.52,0:00:19.60,Default,,0000,0000,0000,,И эта серия руководств\N"Основы ReaScript" Dialogue: 0,0:00:19.60,0:00:23.44,Default,,0000,0000,0000,,введёт вас в курс того, \Nчто в скриптах происходит. Dialogue: 0,0:00:23.44,0:00:27.12,Default,,0000,0000,0000,,Или, другими словами, \Nнаучить писать скрипты. Dialogue: 0,0:00:27.12,0:00:33.12,Default,,0000,0000,0000,,Рекомендую прочитать интервью, \Nкоторое я дал The REAPER Blog. Dialogue: 0,0:00:33.12,0:00:40.20,Default,,0000,0000,0000,,Там я поясняю всё, \Nчто нужно знать в первую очередь Dialogue: 0,0:00:40.20,0:00:45.40,Default,,0000,0000,0000,,Цель этого видео - начать кодить Dialogue: 0,0:00:45.40,0:00:49.76,Default,,0000,0000,0000,,практикованием. Dialogue: 0,0:00:49.76,0:00:52.96,Default,,0000,0000,0000,,Мы сделаем это за несколько шагов. Dialogue: 0,0:00:52.96,0:00:55.80,Default,,0000,0000,0000,,Мы увидим в первом видео, Dialogue: 0,0:00:55.80,0:00:58.32,Default,,0000,0000,0000,,как использовать консоль и зачем.\N Dialogue: 0,0:00:58.32,0:01:03.04,Default,,0000,0000,0000,,Мы создадим новый экшн / скрипт Dialogue: 0,0:01:03.04,0:01:08.68,Default,,0000,0000,0000,,запустив окно с экшнами, \Nзатем кликнув ReaScript -> New Dialogue: 0,0:01:08.68,0:01:12.88,Default,,0000,0000,0000,,Откроется папка с \Nпользовательскими скриптами Dialogue: 0,0:01:12.88,0:01:15.20,Default,,0000,0000,0000,,и я введу имя нового скрипта.\N Dialogue: 0,0:01:15.20,0:01:19.68,Default,,0000,0000,0000,,"Мой новый скрипт" Dialogue: 0,0:01:19.68,0:01:24.72,Default,,0000,0000,0000,,\NЗатем допишу расширение, ".lua". Dialogue: 0,0:01:24.72,0:01:29.20,Default,,0000,0000,0000,,Расширение определяет, какой язык я хочу \Nиспользовать для написания этого с крипта. Dialogue: 0,0:01:29.20,0:01:33.08,Default,,0000,0000,0000,,Существует два языка, встроенные \Nв REAPER - это LUA и EEL Dialogue: 0,0:01:33.08,0:01:37.52,Default,,0000,0000,0000,,Писать скрипты также можно на Python, \Nдля этого требуются сторонние библиотеки Dialogue: 0,0:01:37.52,0:01:41.60,Default,,0000,0000,0000,,Мы выберем встроенные \Nинтерпретаторы языков, Dialogue: 0,0:01:41.60,0:01:44.68,Default,,0000,0000,0000,,кроме того, с ними кодить проще. Dialogue: 0,0:01:44.68,0:01:50.04,Default,,0000,0000,0000,,Они также более гибкие и \Nбыстры в исполнении. Dialogue: 0,0:01:51.72,0:01:54.12,Default,,0000,0000,0000,,Если я нажму Save, появится окно Dialogue: 0,0:01:54.12,0:01:57.28,Default,,0000,0000,0000,,"Среда для разработки ReaScript ", Dialogue: 0,0:01:57.28,0:02:01.52,Default,,0000,0000,0000,,в которой вы можете писать \Nскрипт прямо внутри REAPER, Dialogue: 0,0:02:01.52,0:02:04.88,Default,,0000,0000,0000,,что очень круто Dialogue: 0,0:02:04.88,0:02:08.24,Default,,0000,0000,0000,,Это новая фишка в REAPER 5, Dialogue: 0,0:02:08.24,0:02:10.88,Default,,0000,0000,0000,,как и интегиированный интерпретатор lua. Dialogue: 0,0:02:10.88,0:02:16.84,Default,,0000,0000,0000,,Начнём писать скрипт, который покажет \Nнам сообщение в консоли. Dialogue: 0,0:02:16.84,0:02:21.52,Default,,0000,0000,0000,,Консоль призвана помочь в \Nразработке скрипта. Dialogue: 0,0:02:21.52,0:02:26.44,Default,,0000,0000,0000,,Для того, чтобы её открыть нам нужна \Nфункция "ShowConsoleMsg()" Dialogue: 0,0:02:31.88,0:02:35.12,Default,,0000,0000,0000,,Так как это встроенная функция REAPER, Dialogue: 0,0:02:35.12,0:02:39.04,Default,,0000,0000,0000,,нам нужно написать префикс "reaper." Dialogue: 0,0:02:42.16,0:02:47.96,Default,,0000,0000,0000,,В качестве параметра, мы пишем \Nstring переменную в кавычках Dialogue: 0,0:02:53.48,0:02:59.48,Default,,0000,0000,0000,,Ctrl+S сохраняет и запускает скрипт. Dialogue: 0,0:02:59.48,0:03:03.68,Default,,0000,0000,0000,,Консоль открылась, как вы видите. Dialogue: 0,0:03:03.68,0:03:06.24,Default,,0000,0000,0000,,С тем сообщением, которые мы написали. Dialogue: 0,0:03:06.24,0:03:09.20,Default,,0000,0000,0000,,Если я нажму Start снова, Dialogue: 0,0:03:09.20,0:03:16.04,Default,,0000,0000,0000,,сообщение снова появится после того, \Nчто у нас уже было в консоли. Dialogue: 0,0:03:16.04,0:03:19.12,Default,,0000,0000,0000,,Для очистки консоли мы можем\Nнажать "Clear". Dialogue: 0,0:03:19.12,0:03:25.04,Default,,0000,0000,0000,,Идея консоли в том, чтобы показывать \Nпеременную и её значение. Dialogue: 0,0:03:27.32,0:03:30.32,Default,,0000,0000,0000,,Создадим переменную. Dialogue: 0,0:03:30.32,0:03:37.96,Default,,0000,0000,0000,,Пусть это будет string переменная \N"Hello world". Dialogue: 0,0:03:37.96,0:03:45.96,Default,,0000,0000,0000,,Здесь мы заменяем переменную \Nstring на имя переменной. Dialogue: 0,0:03:46.04,0:03:52.04,Default,,0000,0000,0000,,Теперь отображается значение переменной\Nв консоли. Dialogue: 0,0:03:52.04,0:03:54.48,Default,,0000,0000,0000,,Как и ранее. Dialogue: 0,0:03:54.48,0:04:00.88,Default,,0000,0000,0000,,Теперь, чтобы показать вторую стркоу Dialogue: 0,0:04:00.88,0:04:08.88,Default,,0000,0000,0000,,создадим вторую переменную\Nи назовём её "How are you today?" Dialogue: 0,0:04:12.68,0:04:16.76,Default,,0000,0000,0000,,Просто продублируем функцию. Dialogue: 0,0:04:16.76,0:04:21.88,Default,,0000,0000,0000,,И выберем вторую переменную как параметр. Dialogue: 0,0:04:21.88,0:04:23.08,Default,,0000,0000,0000,,Если я вывожу результат, Dialogue: 0,0:04:25.48,0:04:30.100,Default,,0000,0000,0000,,вы видите, что значения \Nидут один за другим. Dialogue: 0,0:04:31.00,0:04:34.96,Default,,0000,0000,0000,,Консоль не была очищена. Dialogue: 0,0:04:34.96,0:04:40.72,Default,,0000,0000,0000,,Это напрягает, так как часто запускаю\Nконсоль в процессе кодинга Dialogue: 0,0:04:40.72,0:04:43.96,Default,,0000,0000,0000,,Для очистки консоли напишем Dialogue: 0,0:04:45.24,0:04:46.96,Default,,0000,0000,0000,,reaper. ShowConsoleMsg() Dialogue: 0,0:04:48.44,0:04:50.92,Default,,0000,0000,0000,,с кавычками вместо переменной. Dialogue: 0,0:04:50.92,0:04:53.16,Default,,0000,0000,0000,,Этим мы очистим консоль. Dialogue: 0,0:04:54.24,0:04:58.24,Default,,0000,0000,0000,,Пример. Если я удалю всё\Nэто и нажму save + run, Dialogue: 0,0:04:58.24,0:05:00.20,Default,,0000,0000,0000,,консоль очистится. Dialogue: 0,0:05:00.20,0:05:01.20,Default,,0000,0000,0000,,Если я восстановлю всё обратно Dialogue: 0,0:05:03.16,0:05:07.24,Default,,0000,0000,0000,,две линии вернутся назад, Dialogue: 0,0:05:07.24,0:05:08.64,Default,,0000,0000,0000,,Если я нажму "Start". Dialogue: 0,0:05:09.80,0:05:12.100,Default,,0000,0000,0000,,Ничего не изменится, \Nтак как консоль очищена Dialogue: 0,0:05:13.00,0:05:16.20,Default,,0000,0000,0000,,и strings переменные отобразятся снова. Dialogue: 0,0:05:17.44,0:05:21.88,Default,,0000,0000,0000,,Теперь я хочу создать промежуток\Nмежду двумя переменными. Dialogue: 0,0:05:21.88,0:05:28.36,Default,,0000,0000,0000,,Пишем reaper. ShowConsoleMsg() Dialogue: 0,0:05:28.36,0:05:35.64,Default,,0000,0000,0000,,и в качестве параметра напишем "\n". Dialogue: 0,0:05:35.64,0:05:38.36,Default,,0000,0000,0000,,Этот код создаёт разделитель Dialogue: 0,0:05:38.36,0:05:42.16,Default,,0000,0000,0000,,Разделительная линия теперь между двух\Nstring переменных Dialogue: 0,0:05:42.16,0:05:46.04,Default,,0000,0000,0000,,Вместо того, чтобы писать несколько \Nфункций Dialogue: 0,0:05:46.04,0:05:48.36,Default,,0000,0000,0000,,т.е. ShowConsoleMsg несколько раз Dialogue: 0,0:05:48.36,0:05:53.32,Default,,0000,0000,0000,,Я могу написать это в одной функции. Dialogue: 0,0:06:00.04,0:06:02.20,Default,,0000,0000,0000,,Т.е. выполнить это одновременно Dialogue: 0,0:06:02.20,0:06:06.64,Default,,0000,0000,0000,,Что это даёт: Dialogue: 0,0:06:08.52,0:06:13.84,Default,,0000,0000,0000,,если я нажимаю "save + run",\Nполучаю тот же результат Dialogue: 0,0:06:13.84,0:06:20.40,Default,,0000,0000,0000,,Я могу также добавить другие \Nstrings после этого. Dialogue: 0,0:06:20.40,0:06:26.80,Default,,0000,0000,0000,,Например, "I'm fine, thank you" Dialogue: 0,0:06:29.40,0:06:32.84,Default,,0000,0000,0000,,Разделитель не был добавлен, \Nмогу добавить его Dialogue: 0,0:06:32.84,0:06:36.80,Default,,0000,0000,0000,,Или в начале, например. Dialogue: 0,0:06:36.80,0:06:41.68,Default,,0000,0000,0000,,Можно и здесь, вывод будет тем же Dialogue: 0,0:06:41.68,0:06:45.08,Default,,0000,0000,0000,,или как мы сделали раньше Dialogue: 0,0:06:49.12,0:06:51.76,Default,,0000,0000,0000,,Всё это будет иметь один результат. Dialogue: 0,0:06:52.45,0:07:00.36,Default,,0000,0000,0000,,Чтобы постоянно не писать длинное\N"reaper.ShowConsoleMsg" каждый раз Dialogue: 0,0:07:00.37,0:07:03.44,Default,,0000,0000,0000,,и постоянно добавлять разделители, Dialogue: 0,0:07:03.45,0:07:09.12,Default,,0000,0000,0000,,я могу создать функцию, \Nкоторую я назову "Msg" Dialogue: 0,0:07:09.13,0:07:14.33,Default,,0000,0000,0000,,Она будет иметь один параметр Dialogue: 0,0:07:18.65,0:07:20.20,Default,,0000,0000,0000,,Функция должна заканчиваться на "end" Dialogue: 0,0:07:20.21,0:07:24.20,Default,,0000,0000,0000,,Напишу содержание - то, что функция будет \Nвыполнять при вызове. Dialogue: 0,0:07:24.21,0:07:29.89,Default,,0000,0000,0000,,Она будет показывать то, \Nчто мы указали в её параметрах Dialogue: 0,0:07:30.89,0:07:34.68,Default,,0000,0000,0000,,И добавлю разделитель. Dialogue: 0,0:07:34.69,0:07:35.77,Default,,0000,0000,0000,,Это означает, Dialogue: 0,0:07:37.61,0:07:40.29,Default,,0000,0000,0000,,что если я вызываю функцию Dialogue: 0,0:07:42.37,0:07:45.36,Default,,0000,0000,0000,,вместе с её указанными параметрами Dialogue: 0,0:07:45.37,0:07:46.37,Default,,0000,0000,0000,,string переменной в данном случае, Dialogue: 0,0:07:50.09,0:07:51.09,Default,,0000,0000,0000,,и string2 Dialogue: 0,0:07:55.29,0:07:57.68,Default,,0000,0000,0000,,Здесь мы видим ошибку Dialogue: 0,0:07:57.69,0:07:59.76,Default,,0000,0000,0000,,"reaper. ShowConsole is unknown" Dialogue: 0,0:07:59.77,0:08:03.89,Default,,0000,0000,0000,,Я забыл дописать "Msg" в имя встроенной функции Dialogue: 0,0:08:04.93,0:08:07.64,Default,,0000,0000,0000,,теперь разделители добавляются авоматически Dialogue: 0,0:08:07.65,0:08:10.28,Default,,0000,0000,0000,,Не буду это переписывать Dialogue: 0,0:08:10.29,0:08:12.09,Default,,0000,0000,0000,,Просто продублирую Dialogue: 0,0:08:14.41,0:08:16.88,Default,,0000,0000,0000,,Как вы видите, разделители добавляются автоматически, Dialogue: 0,0:08:16.89,0:08:19.29,Default,,0000,0000,0000,,это ускоряет процесс кодинга. Dialogue: 0,0:08:21.29,0:08:28.44,Default,,0000,0000,0000,,ShowConsoleMsg может принимать числа. Dialogue: 0,0:08:28.45,0:08:30.68,Default,,0000,0000,0000,,Если я напишу "6", Dialogue: 0,0:08:30.69,0:08:34.32,Default,,0000,0000,0000,,вы увидите, что выход консоли - "6". Dialogue: 0,0:08:34.33,0:08:37.44,Default,,0000,0000,0000,,Но если переменной, которую мы \Nхотим показать, не существует Dialogue: 0,0:08:37.45,0:08:41.16,Default,,0000,0000,0000,,например, string3, Dialogue: 0,0:08:41.17,0:08:43.84,Default,,0000,0000,0000,,то я получу ошибку, которая \Nговорит мне, Dialogue: 0,0:08:43.85,0:08:49.80,Default,,0000,0000,0000,,что я пытаюсь соединить не существующее\Nзначение со string. Dialogue: 0,0:08:49.81,0:08:54.24,Default,,0000,0000,0000,,Nil - это тип переменной в LUA, которая\Nопределяет, Dialogue: 0,0:08:54.25,0:08:58.73,Default,,0000,0000,0000,,что переменная не была обозначена ранее,\Nили её значение nil. Dialogue: 0,0:08:59.77,0:09:06.28,Default,,0000,0000,0000,,Я получу тот же результат, если поставлю \Nnil в качестве параметра. Dialogue: 0,0:09:06.29,0:09:08.36,Default,,0000,0000,0000,,Как вы видите, ошибка. Dialogue: 0,0:09:08.37,0:09:11.45,Default,,0000,0000,0000,,то же самое будет с string3... Dialogue: 0,0:09:14.97,0:09:17.21,Default,,0000,0000,0000,,значение которой nil Dialogue: 0,0:09:19.01,0:09:24.60,Default,,0000,0000,0000,,Важно избегать таких типов \Nсообщений в скрипте, Dialogue: 0,0:09:24.61,0:09:27.09,Default,,0000,0000,0000,,Это означает, что скрипт имеет баг, \Nи не выполнится полностью. Dialogue: 0,0:09:27.89,0:09:30.76,Default,,0000,0000,0000,,Чтобы быть уверенными в том, \Nчто наш скрипт работает, Dialogue: 0,0:09:30.77,0:09:32.96,Default,,0000,0000,0000,,мы используем lua функцию (не рипера), Dialogue: 0,0:09:32.97,0:09:40.08,Default,,0000,0000,0000,,с помощью которой мы конвертируем \Nиспользуемый параметр. Dialogue: 0,0:09:40.09,0:09:44.00,Default,,0000,0000,0000,,Если я запущу скрипт заново, "nil" отобразится как текст, Dialogue: 0,0:09:44.01,0:09:45.84,Default,,0000,0000,0000,,и ошибки больше не будет. Dialogue: 0,0:09:45.85,0:09:50.61,Default,,0000,0000,0000,,Наша функция готова для того, чтобы быть\Nиспользованной в следующем скрипте.