Перейти к содержанию
Материалы раздела

OSC

Модуль для генерации сообщений в OSC-формате. Основан на коде TinyOSC.

make(addr, format, data..)

Генерация строки согласно формату osc.

Аргументы:

  • addr - путь osc
  • format - формат osc (см. ниже)
  • data - параметры согласно format через запятую.

Возвращает: строку или исключение.

Возможные параметры для format:

  • f: float
  • d: double (только в сборке с 64-битным lua_Number)
  • i: int32
  • h: int64 (только в сборке с 64-битным lua_Integer)
  • s: string
  • t: timetag (только в сборке с 64-битным lua_Integer)
  • b: blob, передаётся Lua-строкой
  • m: MIDI, строка из 4 байт или таблица из 4 байт
  • T: true
  • F: false
  • I: infinitum
  • N: nil

Стандартные профили Lua RTOS используют 32-битные lua_Number и lua_Integer, поэтому теги d, h и t в них отвергаются явным исключением как непредставимые. Они доступны только в профиле с CONFIG_LUA_RTOS_LUA_USE_NUM_64BIT. Даже в таком профиле timetag должен помещаться в положительный диапазон lua_Integer.

Размер сообщения, создаваемого osc.make(), включая адрес, type tags, выравнивание и данные, не должен превышать 1024 байта.

osc.make(
    "/ping", -- the address
    "fsi",   -- the format; 'f':32-bit float, 's':ascii string, 'i':32-bit integer
    1.0, "hello", 2)

print(s)

Печать в консоль сгенерированного сообщения (для отладочных целей).

osc.print(osc.make("/ping", "si", "hi", 4))
[20 bytes] /ping si hi 4

parse(buffer)

Разбор полученного OSC-сообщения.

Аргументы:

  • buffer - строка с OSC-сообщением

Возвращает несколько значений:

  1. address (string) - OSC адрес
  2. format (string) - строка формата
  3. arg1, arg2, … - аргументы согласно формату

Типы аргументов:

ФорматLua-тип
fnumber (float)
dnumber (double; только 64-битная сборка Lua)
iinteger
hinteger (int64; только 64-битная сборка Lua)
tinteger (timetag; только 64-битная сборка Lua)
sstring
bstring (blob)
mtable {b1, b2, b3, b4} (MIDI)
Tboolean (true)
Fboolean (false)
Nnil
Inumber (infinity)
local msg = osc.make("/test", "ifs", 42, 3.14, "hello")
local addr, fmt, val1, val2, val3 = osc.parse(msg)
-- addr = "/test"
-- fmt = "ifs"
-- val1 = 42
-- val2 = 3.14
-- val3 = "hello"