Broadcast Core manuális indítása és tesztelése

A fejlesztés korai szakaszában a már működő SuperCollider – JACK – Darkice szolgáltatás-együttes indítása és tesztelése. Az indítási folyamat lépéseinek sorrendjét tartani kell. Amíg a SuperCollider nem bootolt be, addig a JACK nem tud hozzá csatlakozni. A JACK fogja a SuperCollider által lejátszott audio fájlt a Darkice-nak biztosítani.

A Darkice szerver indítása nem szükséges, mert szolgáltatásként elindul a szerverrel együtt. Az mtm nevű felhasználóhoz kapcsolt szolgáltatás a megfelelő jogosultságokkal. A konfigurációs fájl is az mtm felhasználó home könyvtárában található. Az mtm felhasználó tudja is indítani a Darkice szolgáltatást.

service darkice stat | stop | status

Minden parancs az mtm felhasználónévvel bejelentkezve adható ki!

1. SuperCollider indítása

bash:
sclang

2. SuperCollider szerver bootolása

supercollider:
s.boot;

3. JACK szolgáltatás indítása

Mivel az SuperCollider nem lép ki promptba az sclang-ból, ezért ezt egy másik terminálablakban kell végrehajtani.

A JACK szolgáltatáshoz ismerni kell a SuperCollider audio out csatornájának azonosítóját (portját). Ez viszont minden Darkice indításkor megváltozhat.

A JACK indításához írt bash script paramétereként kell megadni az SC audio out csatorna azonosítóját, de ha nem ismered, akkor csak paraméterként indítsd el a bash scriptet, és a hibaüzenetek közt kiírja azt is, hogy milyen azonosítóval érhető el az out csatona.

A parancsot az mtm felhasználó home könyvtárában kell kiadni.

bash:
./jack.sh <audio out azonosítója>

A SuperCollider innentől kell, hogy tudjon hangot kiadni az IceCast2 szerver felé. Ha tesztelésre van szükség, akkor az sclang-ban kiadható egy parancs, mely egy 440Hz-es hangot küld, 30%-os hangerővel, sztereó csatornán keresztül a JACK felé.

supercollider:
{ SinOsc.ar(440, 0, 0.3).dup }.play;

Böngészőben megnyitható a következő címen a stream:

Web:
http://192.168.66.12:8000/mtm.mp3

Az sclang-ban megállítható a teszthang a következő parancsokkal:

supercollider:
s.freeAll;

4. A SuperCollider script betöltése sclangban.

supercollider:
"/home/mtm/html/mtm.project/systems/broadcast/core/scd/scplay3.1.scd".load;

5. OCS vezérlő betöltése – Node.JS script WebSocketServer

A script könyvtára: /home/mtm/html/mtm.project/systems/broadcast/core/ocs

Script: wss_osc.js

Ennek indítása a előtt meg kell győződni arról, hogy a scriptben lévő portok megfelelően vannak beállítva. Az OSC parancsokat az SuperCollider egy meghatározott porton fogadja. Hogy melyik porton az lellenőrizhető az sclang-ban kiadott paranccsal:

supercollider:
NetAddr.langPort
wss_osc.js
remoteAddress: "127.0.0.1",
remotePort: 57122 // SC alapértelmezett OSC portja

A remotePort értéke egyenlő kell, hogy legyen az sclang-ban kapott értékkel.

Ha rendben van a következő paranccsal indítható a wss_osc.js

bash:
pm2 start wss_osc.js --name osc-controller

OSC WSS port: 8080

Ebben a könyvtárban az ./start_osc.sh bash script is ezt a parancsot adja ki.

6. OSC vezérlő tesztelése

Ubuntu Server terminálablakából a wscat segítéségvel. A wscat alkalmas a WebSocket szerverkkel kommunikálni, így JSON objektumokat küldhetünk az OSC vezérlőnek úgy, ahogyan a SuperCollid script várja. A wscat a Node.JS része, így npm használatával telepíthető, ha még nem lenne elérhető. Érdemes globális telepítést indítani, hogy bármelyik virtuális környezetben elérhető legyen.

Telepítése:

bash:
npm install -g wscat

A -g opció jelenti a globális telepítést.

A wscat indítása:

bash:
wscat -c ws://127.0.0.1:8080

Példa a JSON objektumokban küldhető parancsokra:

wscat:
{"command": "setFile", "filePath": "/mnt/ramdrive/temp/001.wav", "bufferName": "p1"}
{"command": "setFile", "filePath": "/mnt/ramdrive/temp/020.wav", "bufferName": "p2"}
{"command": "setFile", "filePath": "/mnt/ramdrive/temp/018.wav", "bufferName": "p3"}
{"command": "play", "bufferName": "p1"}
{"command": "play", "bufferName": "p2"}
{"command": "play", "bufferName": "p3"}
{"command": "stop", "fadeTime": 2.0, "bufferName": "p1"}
{"command": "stop", "fadeTime": 7.0, "bufferName": "p2"}
{"command": "stop", "fadeTime": 7.0, "bufferName": "p3"}