OSC
La pantalla OSC es donde hablas Open Sound Control (OSC 1.0) por UDP a mano. Tiene tres partes:
- Emisor: un mensaje, argumentos con tipo, enviado cuando pulsas Enter.
- Monitor: escucha en un puerto y decodifica cada paquete que llega.
- Generador de señal: envía un valor que sigue una forma de onda, muchas veces por segundo, y lo dibuja.
Signal Lab codifica y decodifica OSC por sí mismo. Lo que envía es lo que el Inspector muestra, byte a byte.
Enviar un mensaje
- Abre OSC.
- En Host:puerto de destino, escribe la dirección IP o el nombre de host del dispositivo y su puerto, por ejemplo
127.0.0.1:9000ostage-mixer.local:9000. - En Dirección OSC, escribe la dirección que espera el dispositivo, por ejemplo
/mixer/fader/1. - En Argumentos, define el tipo y el valor de cada argumento. Pulsa + argumento para añadir otro; ✕ quita uno.
- Pulsa Enviar, o Enter en cualquier campo del emisor.
La línea bajo los botones dice lo que salió: la dirección, su tamaño en bytes y el destino. Volver a enviar el mismo mensaje suma (×2, ×3…), así que puedes ver que un envío repetido hizo algo. Un fallo se muestra ahí en su lugar, y en la consola.
El destino, la dirección y los argumentos se conservan cuando cambias de pantalla y cuando reinicias la aplicación.
Campos
| Campo | Qué | Predeterminado |
|---|---|---|
| Host:puerto de destino | IP:port o host:port del receptor. Una dirección IPv6 va entre corchetes: [::1]:9000. Un nombre de host se resuelve cada vez que envías; cuando tiene una dirección IPv4, se usa esa (así localhost llega a un receptor que escucha en 127.0.0.1), si no, su IPv6. Un destino sin puerto se rechaza. | 127.0.0.1:9000 |
| Dirección OSC | La dirección OSC, que empieza por /, con las partes separadas por /. Una sin la / inicial se rechaza antes de enviar nada. | /hello/avatar/1 |
| Argumentos | Valores con tipo tras la dirección, en orden. Un mensaje puede no tener ninguno. | un float, 1.0 |
Tipos de argumento
El tipo de cada argumento forma parte del mensaje (su etiqueta de tipo), así que un dispositivo que espera un float puede ignorar un int con el mismo valor.
| Tipo en la lista | Etiqueta OSC | Valor | Cómo lo escribes |
|---|---|---|---|
int | i | entero con signo de 32 bits | un número entero |
float | f | coma flotante de 32 bits | un número, 0.75 |
str | s | texto | cualquier texto, enviado como UTF-8 |
bool | T / F | verdadero o falso | true o false de una lista; no lleva bytes, solo la etiqueta |
long | h | entero con signo de 64 bits | un número entero |
double | d | coma flotante de 64 bits | un número |
nil | N | nada | ningún valor |
blob | b | bytes | no se escribe aquí: aparece, de solo lectura y en hex, cuando abres una señal que tiene uno |
Un campo numérico que no contiene un número envía 0.
TIP
Un true de OSC es la etiqueta T, no el texto "true". Un dispositivo que espera un bool ignora en silencio una cadena.
Bundles
El emisor envía mensajes sueltos, no bundles. Cuando llega un bundle (#bundle), el monitor, las esperas de los experimentos y los emuladores lo desempaquetan: cada mensaje que contiene se trata por su cuenta, y su etiqueta de tiempo se ignora.
Observar un puerto
Para ver lo que envía un dispositivo o un controlador de espectáculo:
- En Dirección de escucha, escribe la dirección y el puerto donde escuchar.
0.0.0.0:9000(el predeterminado) escucha en todas las tarjetas de red;127.0.0.1:9000solo en este equipo. - Pulsa Escuchar. El campo se bloquea mientras el monitor funciona.
- Apunta el emisor a la dirección IP de este equipo y a ese puerto.
Cada paquete se convierte en una fila, el más reciente arriba:
| Columna | Qué |
|---|---|
| Hora | Cuándo llegó, al milisegundo |
| Origen | El IP:port del emisor |
| Dirección | La dirección OSC, o (error de decodificación) cuando el paquete no es OSC válido |
| Args | Los valores de los argumentos; un blob se muestra como blob[n], nil como nil. Para un paquete que no se pudo decodificar, el motivo. |
Un bundle da una fila por mensaje. La lista conserva las 300 filas más recientes; Borrar la vacía. Pulsa Detener para cerrar el puerto. El monitor es también una tarea en la franja de la consola, así que se puede detener desde ahí.
El monitor lee paquetes de hasta 64 KiB. Decodifica las etiquetas i f s S b h d T F N I (S se lee como texto, I como nil); un paquete con cualquier otra etiqueta, o cortado, se muestra como un error de decodificación en lugar de descartarse.
Convertir un mensaje en una espera
Cada fila tiene un botón ⇠, Esperar esto. Añade un paso Esperar OSC al experimento abierto que escucha en el Dirección de escucha del monitor para esta dirección, con una regla "es igual a" por cada argumento de texto, entero y verdadero/falso — los float, blob y nil no tienen ninguna — hasta 16 reglas. Su tiempo de espera es 2000 ms. El editor se abre con el nuevo paso seleccionado.
WARNING
Detén el monitor antes de ejecutar ese experimento. La ejecución abre el mismo puerto ella misma, y dos escuchas no pueden compartirlo.
Dirigir una onda
El Generador de señal envía un mensaje tras otro a una dirección, con un único argumento cuyo valor sigue una forma de onda — un fader, un nivel de luz, una posición. Úsalo para ver cómo sigue un dispositivo un valor en movimiento, o para cargar un receptor con un flujo constante.
- Define Host:puerto de destino y Dirección. Ambos se comprueban cuando pulsas Iniciar generador, como los comprueba el emisor.
- Elige una Forma de onda, su Frec. (Hz) y la Tasa (pps).
- Define Mín. y Máx., el rango del valor.
- Pulsa Iniciar generador. Funciona hasta que pulses Detener generador o detengas su tarea en la franja de la consola.
| Campo | Qué | Predeterminado |
|---|---|---|
| Host:puerto de destino | IP:port o host:port del receptor; un nombre se resuelve una vez, cuando arranca el generador | 127.0.0.1:9000 |
| Dirección | La dirección a la que se envía cada mensaje; empieza por / | /hello/lfo |
| Forma de onda | La forma del valor a lo largo del tiempo (abajo) | senoidal |
| Frec. (Hz) | Ciclos de la forma de onda por segundo | 1 |
| Tasa (pps) | Mensajes por segundo, de 0,1 a 5000; un valor fuera se ajusta a ese rango | 60 |
| Mín., Máx. | El valor más bajo y el más alto. Si Máx. es menor que Mín., el valor no se mueve. | 0, 1 |
| enviar como int | Redondear al número entero más cercano y enviar un int en lugar de un float | desactivado |
| Forma de onda | Qué hace el valor en cada ciclo |
|---|---|
| senoidal | Oscila suavemente entre Mín. y Máx., empezando en el medio y subiendo |
| triangular | Sube de Mín. a Máx., luego baja de nuevo a Mín., empezando en Mín. |
| diente de sierra | Una sierra descendente: empieza en Máx., baja a Mín. y salta de nuevo a Máx. |
| rampa | Una sierra ascendente: empieza en Mín., sube a Máx. y salta de nuevo a Mín. |
| cuadrada | Máx. durante la primera mitad, Mín. durante la segunda |
| aleatoria | Un valor aleatorio nuevo entre Mín. y Máx. con cada mensaje; la frecuencia no se usa |
| constante | Máx., siempre; la frecuencia no se usa |
El osciloscopio
Junto a los campos, el osciloscopio dibuja el valor tal como se envía: los últimos 300 puntos, escalados para encajar. Debajo están la forma de onda, la frecuencia y la tasa, y el último valor enviado. El osciloscopio se actualiza unas 30 veces por segundo por rápido que envíe el generador, así que a tasas altas muestra una muestra de los mensajes, no cada uno.
Si un envío falla, el generador se detiene y la consola dice por qué.
En el Inspector
Con la captura activada (Activar captura en el Inspector), el tráfico OSC aparece con el protocolo osc:
| Origen | Qué | Notas |
|---|---|---|
osc-send | Cada mensaje que envían el emisor, una señal de la biblioteca, un paso Mensaje OSC o signallab send osc | Un paso que espera una respuesta se muestra como experiment |
osc-monitor | Cada paquete que recibe el monitor | Un bundle se resume por su primer mensaje y +n more in bundle; un paquete mal formado tiene el veredicto decode error: … |
osc-gen | Los mensajes del generador | Se captura como máximo uno cada 100 ms, con el veredicto sampled; el siguiente después de los mensajes omitidos añade cuántos no se dibujaron, como sampled · +5 not shown |
Cada trama conserva los bytes con los que se construyó. Consulta Inspector.
Guardar y reutilizar
- Guardar como señal. Guardar… bajo los botones guarda el mensaje — destino, dirección y argumentos — en la biblioteca de señales, en una carpeta que elijas. A partir de entonces el emisor queda vinculado a esa señal: Guardar (o Ctrl+S en el emisor) la actualiza, Guardar como… hace una copia, y la etiqueta a su lado la abre en Señales. Envíala más tarde desde Señales o con Ctrl+K desde cualquier pantalla. Consulta Señales.
- Añadir a un experimento. Al experimento añade un paso Mensaje OSC con el mismo destino, dirección y argumentos al experimento abierto — justo antes de Fin, o después del paso seleccionado — y lo abre. Mientras el experimento se ejecuta, no se puede añadir nada; la consola lo dice.
En experimentos
| Paso | Qué hace |
|---|---|
| Mensaje OSC | Envía un mensaje. Su destino, dirección y argumentos de texto aceptan {{templates}}. Con esperar una respuesta envía desde un puerto propio y espera ahí la respuesta en el mismo paso. Detalles |
| Esperar OSC | Espera un mensaje cuya dirección coincide con un patrón y cuyos argumentos pasan las reglas. Detalles |
| Emulador | Un dispositivo OSC que responde según reglas durante toda la ejecución. Consulta Emuladores. |
El paso de mensaje OSC acepta IP:port o host:port como la pantalla, y su dirección debe empezar por /. Un nombre de host se resuelve cada vez que el paso envía.
Patrones de dirección
Esperar OSC, la respuesta de Mensaje OSC y las reglas de un emulador OSC comparan direcciones con patrones OSC 1.0:
| Patrón | Coincide con |
|---|---|
* | cualquier serie de caracteres, también ninguno |
? | exactamente un carácter |
[0-9], [a-c] | un carácter del conjunto o rango |
[!0-9] | un carácter que no está en el conjunto |
{ping,pong} | una de las palabras |
Los comodines se quedan dentro de una parte entre barras: /cue/* coincide con /cue/7 pero no con /cue/7/go, y un patrón solo coincide con una dirección con el mismo número de partes. La comparación distingue mayúsculas de minúsculas. Un patrón empieza por /, no tiene ninguna parte vacía (//), ni espacios, ni # ni caracteres fuera de ASCII, y tiene como máximo 512 caracteres.
Las reglas de argumentos comparan el argumento número 0–63 con un valor (es igual a, menor que, contiene, coincide con una expresión regular, etc.); una espera tiene como máximo 16. Cuando llega un bundle, la espera lo toma si cualquiera de sus mensajes coincide. Consulta Datos y plantillas para saber qué da un mensaje coincidente a los pasos siguientes.
Desde la línea de comandos
signallab send osc envía un mensaje como lo hace el emisor:
signallab send osc 127.0.0.1:9000 /cue/go f:0.75 s:main✔ sent /cue/go (24 bytes) → 127.0.0.1:9000Cada argumento es tag:value: i:3, f:0.5, d:1.5, h:64, s:text, b:de ad be ef (bytes en hex), o T, F, N solos. Sin etiqueta, un número entero es i, un número con punto decimal es f, y cualquier otra cosa es s; escribe s:7 para enviar el texto 7. El destino es IP:port o host:port. Sale con 0 cuando el mensaje salió, 1 cuando el envío falló (un nombre de host que no resuelve incluido), y 2 cuando un argumento, la dirección o el destino no son válidos. signallab fire envía una señal guardada. Consulta Línea de comandos.
TIP
En Git Bash en Windows, un argumento que empieza por / se convierte en una ruta de archivo antes de que signallab lo vea. Ejecuta el comando con MSYS_NO_PATHCONV=1 delante, o usa PowerShell o cmd.
Problemas
| Lo que ves | Causa habitual |
|---|---|
… is not a valid address al enviar | El destino no tiene puerto, o no es ni IP:port ni host:port. |
Cannot resolve … al enviar | El nombre de host no resuelve en este equipo. Compruébalo, o usa la dirección IP. |
OSC addresses start with / (…) | La dirección no tiene la / inicial. |
| El mensaje se envía pero el dispositivo no hace nada | Puerto o dirección equivocados; un tipo distinto del que espera (int en lugar de float, un texto "true" en lugar de un bool). Obsérvalo en el Inspector, o apunta el destino al monitor de este equipo para ver qué sale. |
… is already in use by another program en Escuchar | Otro programa — o un experimento, emulador o un segundo monitor en marcha — tiene el puerto. |
… is not an address of this computer | La IP de Dirección de escucha pertenece a otro equipo. Usa 0.0.0.0 o una de las direcciones de este equipo. |
| Los paquetes de otros equipos nunca llegan | En Windows, el firewall puede impedirlo: permite Signal Lab cuando la aplicación lo ofrezca. El tráfico local (127.0.0.1) no se ve afectado. Consulta Solución de problemas. |
| Filas (error de decodificación) | El emisor no habla OSC 1.0 en ese puerto, o usa una etiqueta de tipo que Signal Lab no decodifica. |
En un servidor, la pantalla funciona en la red del servidor: 127.0.0.1 es el servidor mismo, y el monitor escucha en los puertos del servidor. Consulta Servidor.
Cada mensaje de error está en Mensajes de error.