12.1 Получение сообщений через протокол OSC

# Получение сообщений через протокол OSC

По умолчанию при запуске Sonic Pi он прослушивает порт 4560 для входящих сообщений OSC от программ на том же компьютере. Это означает, что без какой-либо дополнительной настройки вы можете отправить Sonic Pi сообщение OSC, и оно будет отображаться в журнале событий, как и входящие MIDI-сообщения. Любое входящее сообщение OSC автоматически добавляется в Time State, и вы можете использовать `get` и` sync` для работы с входящими данными - как с MIDI или синхронизацией `live_loops` - см. Разделы 5.7 и 10.2. Вспомним, как это работает.

## Простой OSC-слушатель

Давайте создадим простой OSC-слушатель:

```
live_loop :foo do
  use_real_time
  a, b, c = sync "/osc*/trigger/prophet"
  synth :prophet, note: a, cutoff: b, sustain: c
end
```

В этом примере мы синхронизируем путь OSC, который описали как `"/osc*/trigger/prophet"`. Это может быть любой допустимый путь OSC (все буквы и цифры поддерживаются, а `/` используется, как и в URL-адресации, для разбиения пути на несколько слов). Префикс `/ osc` добавляется Sonic Pi ко всем входящим сообщениям OSC, поэтому нам нужно отправить сообщение OSC с путем` / trigger / prophet`, чтобы вызванная нами функция `sync` запустила синтезатор prophet.


## Отправка OSC в Sonic Pi

Мы можем отправить OSC в Sonic Pi с любого языка программирования, который имеет библиотеку OSC. Например, если мы отправляем OSC из Python, мы можем сделать что-то вроде этого:

```
from pythonosc import osc_message_builder
from pythonosc import udp_client
sender = udp_client.SimpleUDPClient('127.0.0.1', 4559)
sender.send_message('/trigger/prophet', [70, 100, 8])
```

Или, если мы отправляем OSC из Clojure, мы можем сделать что-то вроде этого из REPL:

```
(use 'overtone.core)
(def c (osc-client "127.0.0.1" 4560))
(osc-send c "/trigger/prophet" 70 100 8)
```

## Получение данных от удаленных машин

Из соображений безопасности, по умолчанию Sonic Pi не позволяет удаленным машинам отправлять ему OSC-сообщения. Однако вы можете включить поддержку удаленных машин в Настройки-> IO-> Сетевой OSC-> Принимать удаленные сообщения OSC. Как только вы включите это, вы сможете получать сообщения OSC с любого компьютера в вашей сети. Обычно отправляющему устройству необходимо знать ваш IP-адрес (уникальный идентификатор вашего компьютера в вашей сети - например, номер телефона или адрес электронной почты). Вы можете узнать IP-адрес своего компьютера, посмотрев раздел IO на панели настроек. (Если ваш компьютер имеет более одного IP-адреса, при наведении курсора мыши на указанный адрес появится список всех известных адресов).

Обратите внимание, что некоторые программы, такие как TouchOSC для iPhone и Android, поддерживают отправку OSC в качестве стандартной функции. Так, включив опцию прослушивания входящих сообщений от удаленных машин и зная свой IP-адрес, вы можете мгновенно начать отправку сообщений из приложений, вроде TouchOSC, которые позволяют создавать собственные сенсорные элементы управления с помощью слайдеров, кнопок, валкодеров и т. Д. Это может предоставить вам огромный диапазон вариантов ввода управляющих данных.
