본문으로 건너뛰기

OSC ​

OSC 화면은 Open Sound Control(OSC 1.0)을 UDP로 직접 주고받는 곳입니다. 세 부분으로 이루어집니다.

  • 송신: 메시지 하나, 타입이 있는 인수, Enter를 누르면 전송됩니다.
  • 모니터: 포트에서 수신하며 도착하는 모든 패킷을 디코딩합니다.
  • 신호 발생기: 파형을 따르는 값을 초당 여러 번 보내고, 그것을 그립니다.

Signal Lab은 OSC를 직접 인코딩하고 디코딩합니다. 보내는 내용은 인스펙터가 보여 주는 것과 바이트 단위로 같습니다.

메시지 보내기 ​

  1. OSC를 엽니다.
  2. 대상 호스트:포트에 장치의 IP 주소나 호스트 이름과 포트를 입력합니다. 예: 127.0.0.1:9000 또는 stage-mixer.local:9000.
  3. OSC 주소에 장치가 수신하는 주소를 입력합니다. 예: /mixer/fader/1.
  4. 인수 아래에서 각 인수의 타입과 값을 설정합니다. + 인수를 눌러 하나 더 추가하고, ✕는 하나를 제거합니다.
  5. 보내기를 누르거나, 송신 영역의 아무 필드에서 Enter를 누릅니다.

버튼 아래 줄에는 나간 내용이 표시됩니다. 주소, 바이트 단위 크기, 대상입니다. 같은 메시지를 다시 보내면 횟수가 올라가므로(×2, ×3…) 반복 전송이 실제로 동작했는지 확인할 수 있습니다. 실패는 그 대신 그 자리와 콘솔에 표시됩니다.

대상, 주소, 인수는 화면을 전환해도, 앱을 다시 시작해도 유지됩니다.

필드 ​

필드내용기본값
대상 호스트:포트수신자의 IP:port 또는 host:port. IPv6 주소는 대괄호에 넣습니다: [::1]:9000. 호스트 이름은 보낼 때마다 조회되며, IPv4 주소가 있으면 그것을 사용하므로(localhost가 127.0.0.1에서 수신하는 수신자에 도달합니다) 없으면 IPv6 주소를 사용합니다. 포트가 없는 대상은 거부됩니다.127.0.0.1:9000
OSC 주소/로 시작하고 /로 부분을 나눈 OSC 주소. 앞의 /가 없으면 아무것도 보내기 전에 거부됩니다./hello/avatar/1
인수주소 뒤에 순서대로 오는 타입 있는 값. 메시지에 하나도 없을 수 있습니다.float 하나, 1.0

인수 타입 ​

각 인수의 타입은 메시지의 일부이므로(타입 태그), float을 기대하는 장치는 같은 값의 int를 무시할 수 있습니다.

목록의 타입OSC 태그값입력 방법
inti32비트 부호 있는 정수정수
floatf32비트 부동 소수점숫자, 0.75
strs텍스트임의의 텍스트, UTF-8로 전송
boolT / F참 또는 거짓목록에서 true 또는 false; 바이트를 담지 않고 태그만 전합니다
longh64비트 부호 있는 정수정수
doubled64비트 부동 소수점숫자
nilN없음값 없음
blobb바이트여기서는 입력하지 않습니다: blob이 있는 신호를 열면 hex로, 읽기 전용으로 나타납니다

숫자가 아닌 값이 든 숫자 필드는 0을 보냅니다.

TIP

OSC true는 텍스트 "true"가 아니라 태그 T입니다. bool을 기다리는 장치는 문자열을 조용히 무시합니다.

번들 ​

송신 영역은 단일 메시지를 보내며 번들은 보내지 않습니다. 번들(#bundle)이 도착하면 모니터, 실험의 대기, 에뮬레이터가 그것을 풀어냅니다. 안의 각 메시지는 따로 처리되고, 시간 태그는 무시됩니다.

포트 관찰하기 ​

장치나 쇼 컨트롤러가 보내는 것을 보려면:

  1. 바인드 주소에 수신할 주소와 포트를 입력합니다. 0.0.0.0:9000(기본값)은 모든 네트워크 카드에서 수신하고, 127.0.0.1:9000은 이 컴퓨터에서만 수신합니다.
  2. 수신 대기을 누릅니다. 모니터가 실행되는 동안 필드는 잠깁니다.
  3. 송신 영역을 이 컴퓨터의 IP 주소와 그 포트로 향하게 합니다.

모든 패킷이 한 행이 되며, 최신이 위에 옵니다:

열내용
시간도착한 시각, 밀리초까지
보낸 곳보낸 쪽의 IP:port
주소OSC 주소, 또는 패킷이 유효한 OSC가 아닐 때 (디코딩 오류)
인수인수 값; blob은 blob[n], nil은 nil로 표시됩니다. 디코딩할 수 없었던 패킷이면 그 이유.

번들은 메시지마다 한 행을 줍니다. 목록은 최근 300행을 유지하고, 지우기가 비웁니다. 중지을 누르면 포트가 닫힙니다. 모니터는 콘솔 표시줄의 작업이기도 하므로 거기서도 중지할 수 있습니다.

모니터는 최대 64 KiB의 패킷을 읽습니다. i f s S b h d T F N I 태그를 디코딩하며(S는 텍스트로, I는 nil로 읽습니다). 다른 태그가 있거나 잘린 패킷은 버리지 않고 디코딩 오류로 표시합니다.

메시지를 대기로 바꾸기 ​

각 행에는 ⇠ 버튼(이 메시지 대기)이 있습니다. 열려 있는 실험에 OSC 대기 단계를 추가하며, 이 주소에 대해 모니터의 바인드 주소에서 수신하고, 각 텍스트·정수·참/거짓 인수에 "같음" 규칙을 둡니다(float, blob, nil에는 없음) — 규칙은 최대 16개입니다. 시간 제한은 2000 ms입니다. 편집기는 새 단계가 선택된 채로 열립니다.

WARNING

그 실험을 실행하기 전에 모니터를 중지하십시오. 실행도 같은 포트를 열며, 두 수신자가 같은 포트를 공유할 수 없습니다.

파형 보내기 ​

신호 발생기는 한 주소로 메시지를 잇달아 보내며, 하나의 인수 값이 파형을 따릅니다 — 페이더, 조명 레벨, 위치. 장치가 움직이는 값을 어떻게 따르는지 보거나, 수신자에 꾸준한 스트림을 가할 때 사용합니다.

  1. 대상 호스트:포트과 주소를 설정합니다. 둘 다 발생기 시작을 누를 때 송신 영역과 같은 방식으로 검사됩니다.
  2. 파형, 주파수(Hz), 속도(pps)를 고릅니다.
  3. 최소과 최대, 값의 범위를 설정합니다.
  4. 발생기 시작을 누릅니다. 발생기 중지을 누르거나 콘솔 표시줄에서 작업을 중지할 때까지 실행됩니다.
필드내용기본값
대상 호스트:포트수신자의 IP:port 또는 host:port; 이름은 생성기가 시작될 때 한 번 조회됩니다127.0.0.1:9000
주소모든 메시지를 보낼 주소; /로 시작합니다/hello/lfo
파형시간에 따른 값의 모양(아래)사인
주파수(Hz)초당 파형 주기1
속도(pps)초당 메시지 수, 0.1~5000; 범위를 벗어난 값은 그 범위로 고정됩니다60
최소, 최대가장 낮은 값과 가장 높은 값. Max가 Min보다 낮으면 값이 움직이지 않습니다.0, 1
int로 보내기가장 가까운 정수로 반올림하고 float 대신 int를 보냅니다꺼짐
파형각 주기에서 값이 하는 일
사인Min과 Max 사이를 부드럽게 오가며, 가운데에서 시작해 올라갑니다
삼각Min에서 Max로 올라갔다가 다시 Min으로 내려가며, Min에서 시작합니다
톱니내려가는 톱니: Max에서 시작해 Min으로 내려간 뒤 Max로 다시 뜁니다
램프올라가는 톱니: Min에서 시작해 Max로 올라간 뒤 Min으로 다시 뜁니다
사각전반부는 Max, 후반부는 Min
랜덤메시지마다 Min과 Max 사이의 새 임의 값; 주파수는 쓰이지 않습니다
상수매번 Max; 주파수는 쓰이지 않습니다

스코프 ​

필드 옆에서 스코프는 보내는 대로 값을 그립니다. 최근 300개 점을 화면에 맞게 조정해 표시합니다. 그 아래에는 파형, 주파수, 속도, 마지막으로 보낸 값이 있습니다. 스코프는 생성기가 얼마나 빠르게 보내든 약 초당 30회 갱신되므로, 높은 속도에서는 메시지 하나하나가 아니라 표본을 보여 줍니다.

전송이 실패하면 생성기가 멈추고 콘솔이 이유를 알려 줍니다.

인스펙터에서 ​

캡처가 켜져 있으면(인스펙터의 캡처 켜기), OSC 트래픽이 osc 프로토콜로 나타납니다:

출처내용비고
osc-send송신 영역, 라이브러리 신호, OSC 메시지 단계 또는 signallab send osc가 보내는 모든 메시지회신을 기다리는 단계는 experiment로 나타납니다
osc-monitor모니터가 받는 모든 패킷번들은 첫 메시지와 +n more in bundle로 요약됩니다; 잘못된 패킷은 decode error: … 판정을 받습니다
osc-gen생성기의 메시지100 ms마다 최대 하나가 sampled 판정으로 캡처됩니다; 건너뛴 메시지 뒤의 다음 것은 그리지 않은 수를 sampled · +5 not shown으로 덧붙입니다

각 프레임은 만들어질 때 사용한 바이트를 보관합니다. 인스펙터를 참고하십시오.

저장하고 재사용하기 ​

  • 신호로 저장. 버튼 아래의 저장…는 메시지(대상, 주소, 인수)를 선택한 폴더의 신호 라이브러리에 보관합니다. 이후 송신 영역은 그 신호와 연결됩니다: 저장 (또는 송신 영역의 Ctrl+S)는 신호를 갱신하고, 다른 이름으로 저장…는 사본을 만들며, 옆의 칩은 신호에서 엽니다. 나중에 신호나 아무 화면에서 Ctrl+K로 보내십시오. 신호를 참고하십시오.
  • 실험에 추가. 실험에 추가는 같은 대상, 주소, 인수를 가진 OSC 메시지 단계를 열려 있는 실험에 추가하고(End 바로 앞, 또는 선택한 단계 뒤) 엽니다. 실험이 실행되는 동안에는 아무것도 추가할 수 없으며, 콘솔이 그렇게 알려 줍니다.

실험에서 ​

단계하는 일
OSC 메시지메시지 하나를 보냅니다. 대상, 주소, 텍스트 인수는 {{templates}}를 받습니다. 회신 대기를 켜면 자체 포트에서 보내고 같은 단계에서 그곳에서 답을 기다립니다. 자세히
OSC 대기주소가 패턴과 일치하고 인수가 규칙을 통과하는 메시지를 기다립니다. 자세히
에뮬레이터실행 내내 규칙에 따라 응답하는 OSC 장치. 에뮬레이터를 참고하십시오.

OSC 메시지 단계는 화면과 같이 IP:port 또는 host:port를 받으며, 주소는 /로 시작해야 합니다. 호스트 이름은 단계가 보낼 때마다 조회됩니다.

주소 패턴 ​

OSC 대기, OSC 메시지의 회신, OSC 에뮬레이터의 규칙은 OSC 1.0 패턴으로 주소를 일치시킵니다:

패턴일치
*임의의 문자열, 없음도 포함
?정확히 한 글자
[0-9], [a-c]집합이나 범위에서 한 글자
[!0-9]집합에 없는 한 글자
{ping,pong}단어 중 하나

와일드카드는 슬래시 사이의 한 부분 안에 머뭅니다: /cue/*는 /cue/7과 일치하지만 /cue/7/go와는 일치하지 않으며, 패턴은 부분 수가 같은 주소에만 일치합니다. 대소문자를 구분합니다. 패턴은 /로 시작하고, 빈 부분(//)이 없고, 공백과 #, ASCII 밖의 문자가 없으며, 최대 512자입니다.

인수 규칙은 0–63번 인수를 값과 비교합니다(같음, 작음, 포함, 정규식 일치 등). 대기는 최대 16개를 둡니다. 번들이 도착하면 안의 어떤 메시지든 일치할 때 대기가 그것을 받습니다. 일치한 메시지가 이후 단계에 무엇을 주는지는 데이터와 템플릿을 참고하십시오.

명령줄에서 ​

signallab send osc는 송신 영역처럼 메시지 하나를 보냅니다:

bash
signallab send osc 127.0.0.1:9000 /cue/go f:0.75 s:main
text
✔ sent /cue/go (24 bytes) → 127.0.0.1:9000

각 인수는 tag:value입니다: i:3, f:0.5, d:1.5, h:64, s:text, b:de ad be ef(hex 바이트), 또는 단독으로 T, F, N. 태그가 없으면 정수는 i, 소수점이 있는 숫자는 f, 그 밖의 것은 s입니다; 텍스트 7을 보내려면 s:7로 씁니다. 대상은 IP:port 또는 host:port입니다. 메시지가 나가면 0으로, 전송에 실패하면(해석되지 않는 호스트 이름 포함) 1로, 인수나 주소나 대상이 잘못되면 2로 종료합니다. signallab fire는 저장한 신호를 보냅니다. 명령줄을 참고하십시오.

TIP

Windows의 Git Bash에서는 /로 시작하는 인수가 signallab이 보기 전에 파일 경로로 바뀝니다. 명령 앞에 MSYS_NO_PATHCONV=1을 두고 실행하거나, PowerShell이나 cmd를 사용하십시오.

문제 ​

보이는 것흔한 원인
보낼 때 … is not a valid address대상에 포트가 없거나, IP:port도 host:port도 아닙니다.
보낼 때 Cannot resolve …이 컴퓨터에서 호스트 이름이 해석되지 않습니다. 확인하거나 IP 주소를 사용하십시오.
OSC addresses start with / (…)주소에 앞의 /가 없습니다.
메시지는 전송되지만 장치가 아무것도 하지 않음포트나 주소가 틀렸거나, 장치가 기대하는 것과 다른 타입입니다(float 대신 int, bool 대신 텍스트 "true"). 인스펙터에서 보거나, 대상을 이 컴퓨터의 모니터로 향해 나가는 내용을 확인하십시오.
수신 대기에서 … is already in use by another program다른 프로그램, 또는 실행 중인 실험이나 에뮬레이터나 두 번째 모니터가 포트를 쓰고 있습니다.
… is not an address of this computer바인드 주소 IP가 다른 컴퓨터의 것입니다. 0.0.0.0이나 이 컴퓨터의 주소 중 하나를 사용하십시오.
다른 컴퓨터의 패킷이 도착하지 않음Windows에서는 방화벽이 막을 수 있습니다: 앱이 요청하면 Signal Lab을 허용하십시오. 로컬 트래픽(127.0.0.1)은 영향을 받지 않습니다. 문제 해결을 참고하십시오.
(디코딩 오류) 행보낸 쪽이 그 포트에서 OSC 1.0을 말하지 않거나, Signal Lab이 디코딩하지 않는 타입 태그를 씁니다.

서버에서는 이 화면이 서버의 네트워크에서 동작합니다: 127.0.0.1은 서버 자신이고, 모니터는 서버의 포트에서 수신합니다. 서버를 참고하십시오.

모든 오류 메시지는 오류 메시지에 정리되어 있습니다.