MAC
Чтобы сделать такую же проверку в операционной системе MAC OS, необходимо открыть приложение терминала. Для этого зайдите в папку с вашими установленными приложениями и откройте приложение Terminal. Для проверки соединения с клиентом введите команду ping -c4 192.168.1.201. По итогу вы также получите отчет о пинге адреса. Если все в порядке, то вы не потеряете ни одного пакета, и терминал выдаст сообщение 0.0% packet loss. Это означает, что соединение работает корректно.
Итак, после того как мы подключили все оборудование, проверили подключения между участниками сети и убедились в том, что все работает корректно, можно приступить к настройке OSC.
Как работает OSC
Основываясь на той информации, которую мы разобрали выше, теперь можно более подробно поговорить об OSC и его структуре. Для передачи данных OSC использует транспортный протокол UDP и TCP. Поэтому для передачи и приема сообщений мы должны указывать порт данных и IP адрес клиента и сервера.
OSC очень похоже на MSC сообщения. Отличие в том, что сами сообщения и адрес клиента не регламентируются протоколом, как в MSC. В OSC регламентируется лишь правило описания адреса и сообщения. Любой производитель и программист могут придумать свои наборы сообщений и передать их через OSC.
Итак, мы хотим с одного компьютера через OSC отправить сообщение на другой компьютер. Для этого нужно указать в сообщении IP адрес получателя и его порт. Указание этих параметров зависит от каждого софта отдельно. Позже мы с вами разберем особенности настройки OSC на разных шоу системах.
Хорошо, OSC сообщение мы доставили в нужный порт, и программа клиента прочитала это сообщение. Но как же программе понять, к чему применить это сообщение? Для этого OSC сообщение содержит адрес назначения внутри программы клиента. Это очень похоже на параметр назначения MSC сообщения, к примеру, как Cuelist или Cue. Только, как я уже сказал выше, OSC не имеет жесткой привязки к синтаксису адреса как в MSC, но тем не менее мы должны соблюдать правила описания адреса, которое использует OSC, а именно URL (Uniform Resource Locator). Эту схему описания адреса пути вы используете каждый раз, когда пользуетесь интернет браузером, чтобы попасть на конкретное место в интернет сайте.
Эти пути назначения сообщения могут быть разнообразны в зависимости от того, какой функционал заложил конкретный производитель. К примеру, если вы хотите отправить OSC сообщение на световую консоль ETC Eos, то путь вашего сообщения должен начинаться с /eos, далее нужно указать группу контролируемых параметров пульта, к примеру, /fader, дальше нужно указать номер фейдера /1, и по итогу мы получим полный путь к конкретному фейдеру, который будет выглядеть как: /eos/ fader/1/. Также мы можем указать путь к группам, к спискам сцен и другому содержимому пульта.
Идем дальше. Теперь по аналогии с MSC вы можете предположить, что дальше в сообщении OSC передается команда! Верно, но тут есть своя особенность: в OSC сообщении передается не команда, а аргумент. В чем же отличие команды от аргумента? Дело в том, что аргумент в OSC сообщении – это некий контейнер, который передает данные определенного типа. В последней версии OSC 1.1 вы можете использовать следующие типы данных:
Int32
Integer 32 bit, этот тип данных может хранить в себе натуральное число в диапазоне от -2 147 483 648 до 2 147 483 647. Этот тип используют, когда нужно передать целочисленный номер, как, например, для идентификации номера страницы или фейдера, так как в пульте не существует фейдеров и страниц с номером, к примеру, два с половиной или три целых четырнадцать сотых.
Float32
Float 32 bit, этот тип данных может хранить в себе действительное число c плавающей запятой в диапазоне от -3.4*1038 до +3.4*1038. Этот способ выражения действительного числа отличается от простого целочисленного типа. Но зато он позволяет закодировать более точные данные. Часто этим типом данных кодируют уровни фейдеров, вы можете определить диапазон фейдера от нуля до единицы, а вот точность позиционирования фейдера в этом диапазоне может быть огромной, но зачастую производители ограничиваются двумя знаками после запятой.
String
Этот тип данных передает строку, закодированную в формате ASCII. С помощью этого типа мы можем передать имя объекта или целое сообщение. Очень часто этот тип используется на системах дистанционного управления по OSC. К примеру, пульт может передать по OSC информацию об имени Cuelist, который назначен на конкретный фейдер.
Blob
Binary Large Object. Это тип данных, который передает оригинальный массив байтов. Очень часто его используют для передачи изображений, звука и видео.
Bool
Boolean – это логический тип данных, который может передать либо ложь, либо истину. Самое распространенное его использование – описание состояния переключателя, который может быть либо включенным (истина), либо выключенным (ложь). На самом деле, в типологии OSC этот тип данных разделен на две части, каждая из которых несет в себе конкретное состояние. Я объединил их воедино, дабы облегчить понимание этих типов.
Impulse
Это не совсем тип данных как таковой, так как он не несет в себе информации о состоянии аргумента, он инициализирует событие. В описании OSC протокола этот тип описывается как Bang. Частое его применение, когда вам нужно передать событие о действии, скажем, открытие страницы или любое другое событие без необходимости передачи конкретной информации в аргументе.
Null
Это пустой тип данных, который не содержит в себе ничего. Используется довольно редко, но как дополнительная опция присутствует.
Итак, давайте еще раз вспомним, из чего состоит OSC сообщение. Первая часть – это IP адрес клиента и номер его порта, на который нужно доставить OSC сообщение. Вторая его часть – это адрес. И третья часть – аргумент. Схематически это будет выглядеть следующим образом.
Как видно на схеме, чтобы передать состояние кнопки Flash фейдера номер один на световую консоль Eos, мы должны указать сетевой адрес и порт пульта 192.168.1.101:5004. Далее нужно указать адрес необходимой кнопки, состояние которой мы хотим передать, /eos/fader/1/flash и по итогу передать аргумент типа Boolean, если кнопка должна быть нажата, то аргумент равен True, если кнопка отпущена, то аргумент равен False.
Итак, резюмируем особенности OSC протокола.
• OSC протокол базируется на интерфейсе передачи данных Ethernet. А это дает сразу несколько преимуществ. Для передачи такого сигнала мы можем использовать стандартное сетевое оборудование, которое намного распространеннее и доступнее, чем специализированные карты синхронизаций. По Ethernet мы можем передать сигнал практически на неограниченное расстояние, используя при этом разные способы передачи сигнала, как по радиоканалу, по оптике, так и по витой паре.
• OSC использует протокол передачи данных UDP и TCP. Эти протоколы обязывают нас указывать IP адрес и порт клиента, что дает нам множество преимуществ. К примеру, мы можем на одном сетевом клиенте синхронизировать несколько приложений одновременно, используя один и тот же IP адрес, но при этом разные порты. Это также позволяет нам настраивать сложные маршруты, делить OSC сигнал или получать на одного клиента сообщения с разных источников без использование дополнительного оборудования, так как этот функционал уже заложен в сетевых протоколах группы TCP/IP.