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-сообщением
Возвращает несколько значений:
- address (string) - OSC адрес
- format (string) - строка формата
- arg1, arg2, … - аргументы согласно формату
Типы аргументов:
| Формат | Lua-тип |
|---|---|
| f | number (float) |
| d | number (double; только 64-битная сборка Lua) |
| i | integer |
| h | integer (int64; только 64-битная сборка Lua) |
| t | integer (timetag; только 64-битная сборка Lua) |
| s | string |
| b | string (blob) |
| m | table {b1, b2, b3, b4} (MIDI) |
| T | boolean (true) |
| F | boolean (false) |
| N | nil |
| I | number (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"