Skip to content

오디오 ​

로봇은 마이크로 녹음하고 스피커로 음원 파일을 재생합니다. 녹음과 재생은 8081 포트, 녹음 파일 다운로드는 8080 포트로 보내는 HTTP 요청입니다. 둘 다 로봇 웹 계정(rb / rainbow2026)으로 HTTP Basic 인증을 하고, 본문은 JSON 입니다.

쓰이는 마이크와 스피커 ​

로봇은 마이크와 스피커를 하나씩만 쓰며, 어느 것을 쓸지 스스로 정합니다.

로봇마이크스피커
PTZ 페이로드 장착PTZ 카메라 마이크PTZ 카메라 스피커
PTZ 페이로드 없음로봇 오디오 입력에 꽂은 마이크로봇 스피커

PTZ 카메라가 켜지거나 빠지면 약 5초 안에 전환됩니다. 녹음·재생 전에 쓰이는 장치를 확인하세요. input 과 output 이 ptz, robot, none 중 하나로 나옵니다.

bash
curl -u rb:rainbow2026 http://192.168.0.10:8081/api/audio/status
  • 로봇 마이크 — 로봇 오디오 입력은 아무것도 꽂지 않아도 장치로 잡히므로 mic_present 만으로는 마이크가 있는지 알 수 없습니다. mic_signal 을 보세요. 소리가 들어오면 1, 거의 무음이라 잭이 비었을 수 있으면 0 입니다. 상태를 조회할 때 1분에 한 번까지만 다시 재므로, 마이크를 꽂고 1분 뒤에 확인하세요. 마이크는 녹음을 시작하기 전에 꽂으세요 — 녹음 중에 빼면 나머지는 무음으로 저장됩니다.
  • 로봇 스피커 — 스피커 앰프가 꺼져 있으면 소리가 나지 않습니다. 정비 → 전원 / 시스템에서 스피커 앰프 (12V)(CAN-FD 로봇은 스피커 앰프)를 켜세요 — 정비를 참고하세요. PTZ 카메라 스피커는 자체 앰프가 있습니다.

녹음 ​

  1. 녹음을 시작합니다. 로봇이 응답한 순간부터 녹음되므로 응답을 받은 뒤 말하세요. 응답에 파일 경로가 담겨 옵니다.

    bash
    curl -u rb:rainbow2026 -X PUT http://192.168.0.10:8081/api/audio/record \
         -H 'Content-Type: application/json' -d '{"state":"start","source":"mic"}'
    # {"path":"20261026/mic_20261026_143000.wav", ...}

    마이크가 없으면 no microphone 으로 실패합니다.

  2. 녹음을 끝냅니다. 이렇게 해야 파일이 완성됩니다 — 녹음 중인 파일은 길이가 0초로 읽힙니다.

    bash
    curl -u rb:rainbow2026 -X PUT http://192.168.0.10:8081/api/audio/record \
         -H 'Content-Type: application/json' -d '{"state":"stop"}'
  3. 파일을 받습니다. 같은 포트의 GET /api/audio/list 가 녹음 목록을 돌려줍니다.

    bash
    curl -u rb:rainbow2026 -o rec.wav \
         'http://192.168.0.10:8080/api/audio/file?path=20261026/mic_20261026_143000.wav'

파일 하나는 30분이 지나면 닫힙니다. 녹음 중에 다시 시작하면 앞 파일을 닫고 새 파일로 녹음합니다.

음원 재생 ​

  1. 파일을 base64 로 나눠 올립니다. 조각마다 바이트 offset 과 파일 전체 크기 total 을 함께 보내며, 전체 50 MB 까지입니다. 마지막 조각이 도착하면 로봇이 재생용으로 변환하고 경로를 돌려줍니다. 10분을 넘는 부분은 잘립니다.

    bash
    curl -u rb:rainbow2026 -X POST http://192.168.0.10:8081/api/audio/upload \
         -H 'Content-Type: application/json' \
         -d '{"name":"alarm","offset":0,"total":<bytes>,"data":"<base64>"}'
    # 마지막 조각: {"path":"library/alarm.wav", ...}
  2. 재생합니다. "loop":true 면 최대 30분까지 반복합니다.

    bash
    curl -u rb:rainbow2026 -X PUT http://192.168.0.10:8081/api/audio/play \
         -H 'Content-Type: application/json' -d '{"path":"library/alarm.wav","loop":false}'
  3. 같은 요청에 {"state":"stop"} 을 보내 멈춥니다. 다른 파일을 재생하면 재생 중이던 파일을 대신합니다.

WARNING

재생은 운용 앱의 워키토키와 스피커 하나를 같이 씁니다. 운용 앱이 연결돼 있다가 끊기면 재생도 함께 멈춥니다.

PTZ 카메라로 실시간 음성 ​

로봇 자체 인터페이스는 파일 녹음·재생만 합니다. 실시간 음성은 PTZ 카메라(192.168.0.100)를 직접 사용하세요.

  • 마이크 — 카메라의 profile4 RTSP 스트림 (rtsp://<user>:<password>@192.168.0.100:554/profile4/media.smp)에 마이크 트랙이 들어 있습니다. 이를 받거나, 스트림을 저장해 녹음합니다.
  • 스피커 — 카메라의 ONVIF 오디오 백채널을 엽니다. 같은 profile4 에 Require: www.onvif.org/ver20/backchannel 헤더를 붙여 접속하고 sendonly 트랙을 SETUP 한 뒤 PLAY 합니다. PLAY 응답 뒤에 보내는 소리는 바로 나옵니다. G.711 μ-law(PCMU) 8 kHz 를 20 ms 마다 160바이트씩 보내고, 말이 없는 동안에도 무음 프레임을 계속 보내세요. 다 쓰면 세션을 닫습니다(TEARDOWN).

카메라 스피커는 25 W 입니다. 오디오 설정은 SUNAPI 레퍼런스를 참고하세요.

로봇도 파일 재생과 운용 앱의 워키토키에 같은 백채널을 쓰므로 둘을 동시에 쓰지 마세요. 로봇은 소리가 끝나고 2초 뒤 백채널을 닫습니다. 카메라 계정과 SUNAPI 는 PTZ 카메라를 참고하세요.

This user manual is intended for RBQ users.