crucialfelix / supercolliderjs

The JavaScript client library for SuperCollider
https://crucialfelix.github.io/supercolliderjs/
MIT License
472 stars 41 forks source link

Supercolliderjs in Docker #109

Open VictorKolb opened 3 years ago

VictorKolb commented 3 years ago

Hello! I'm trying run Supercolliderjs in Docker but got some error:

supercollider_1  | npm run start
supercollider_1  | 
supercollider_1  | > supercollider-docker@1.0.0 start /
supercollider_1  | > node src/index.js
supercollider_1  | 
supercollider_1  | stderr : *** ERROR: open directory failed '/root/.local/share/SuperCollider/synthdefs'
supercollider_1  | stderr : {
supercollider_1  |           "type": "Buffer",
supercollider_1  |           "data": [
supercollider_1  |             67,
supercollider_1  |             97,
supercollider_1  |             110,
supercollider_1  |             110,
supercollider_1  |             111,
supercollider_1  |             116,
supercollider_1  |             32,
supercollider_1  |             99,
supercollider_1  |             111,
supercollider_1  |             110,
supercollider_1  |             110,
supercollider_1  |             101,
supercollider_1  |             99,
supercollider_1  |             116,
supercollider_1  |             32,
supercollider_1  |             116,
supercollider_1  |             111,
supercollider_1  |             32,
supercollider_1  |             115,
supercollider_1  |             101,
supercollider_1  |             114,
supercollider_1  |             118,
supercollider_1  |             101,
supercollider_1  |             114,
supercollider_1  |             32,
supercollider_1  |             115,
supercollider_1  |             111,
supercollider_1  |             99,
supercollider_1  |             107,
supercollider_1  |             101,
supercollider_1  |             116,
supercollider_1  |             32,
supercollider_1  |             101,
supercollider_1  |             114,
supercollider_1  |             114,
supercollider_1  |             32,
supercollider_1  |             61,
supercollider_1  |             32,
supercollider_1  |             78,
supercollider_1  |             111,
supercollider_1  |             32,
supercollider_1  |             115,
supercollider_1  |             117,
supercollider_1  |             99,
supercollider_1  |             104,
supercollider_1  |             32,
supercollider_1  |             102,
supercollider_1  |             105,
supercollider_1  |             108,
supercollider_1  |             101,
supercollider_1  |             32,
supercollider_1  |             111,
supercollider_1  |             114,
supercollider_1  |             32,
supercollider_1  |             100,
supercollider_1  |             105,
supercollider_1  |             114,
supercollider_1  |             101,
supercollider_1  |             99,
supercollider_1  |             116,
supercollider_1  |             111,
supercollider_1  |             114,
supercollider_1  |             121,
supercollider_1  |             10,
supercollider_1  |             67,
supercollider_1  |             97,
supercollider_1  |             110,
supercollider_1  |             110,
supercollider_1  |             111,
supercollider_1  |             116,
supercollider_1  |             32,
supercollider_1  |             99,
supercollider_1  |             111,
supercollider_1  |             110,
supercollider_1  |             110,
supercollider_1  |             101,
supercollider_1  |             99,
supercollider_1  |             116,
supercollider_1  |             32,
supercollider_1  |             116,
supercollider_1  |             111,
supercollider_1  |             32,
supercollider_1  |             115,
supercollider_1  |             101,
supercollider_1  |             114,
supercollider_1  |             118,
supercollider_1  |             101,
supercollider_1  |             114,
supercollider_1  |             32,
supercollider_1  |             114,
supercollider_1  |             101,
supercollider_1  |             113,
supercollider_1  |             117,
supercollider_1  |             101,
supercollider_1  |             115,
supercollider_1  |             116,
supercollider_1  |             32,
supercollider_1  |             99,
supercollider_1  |             104,
supercollider_1  |             97,
supercollider_1  |             110,
supercollider_1  |             110,
supercollider_1  |             101,
supercollider_1  |             108,
supercollider_1  |             10
supercollider_1  |           ]
supercollider_1  |         }
supercollider_1  | Error: Server failed to start in 3000ms
supercollider_1  |     at Timeout._onTimeout (/node_modules/@supercollider/server/lib/server.js:274:28)
supercollider_1  |     at listOnTimeout (internal/timers.js:557:17)
supercollider_1  |     at processTimers (internal/timers.js:500:7)
supercollider_1  | error  : Server exited. Exit code: null signal: SIGABRT

There is repo with reproduction: https://github.com/VictorKolb/supercollider-docker

crucialfelix commented 3 years ago

I'm not sure from looking at the docker file, but I'm guessing it has to do with user permissions.

Try USER ?

VictorKolb commented 3 years ago

Thanks Chris! I tried to use USER root. Now my dockerfile looks like:

FROM ubuntu:18.04

USER root

RUN apt-get update && \
    apt-get install -y software-properties-common gnupg curl && \
    curl -sL https://deb.nodesource.com/setup_14.x | bash && \
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FABAEF95 && \
    add-apt-repository -y ppa:supercollider/ppa && \
    add-apt-repository -y multiverse && \
    apt-get update && \
    apt-get install -y nodejs supercollider make && \
    apt-get clean

COPY ./package.json package.json
COPY ./package-lock.json package-lock.json

RUN npm i

COPY ./src src

COPY ./Makefile Makefile

CMD ["make", "start"]

Error isn't resolved. Maybe I misunderstood something?

VictorKolb commented 3 years ago

Ok, I have moved a little forward. Now I get the error about display when sclang is starting:

Loading config: /.supercollider.yaml
debug  : Start process: /usr/bin/scsynth -u 57110
debug  : {
          "execPath": "/usr/bin/scsynth",
          "args": [
            "-u",
            "57110"
          ],
          "options": {
            "cwd": "/usr/bin",
            "detached": false
          }
        }
debug  : pid: 31
stderr : *** ERROR: open directory failed '/root/.local/share/SuperCollider/synthdefs'
stderr : {
          "type": "Buffer",
          "data": [
            67,
            97,
            110,
            110,
            111,
            116,
            32,
            108,
            111,
            99,
            107,
            32,
            100,
            111,
            119,
            110,
            32,
            56,
            50,
            50,
            56,
            55,
            49,
            51,
            54,
            32,
            98,
            121,
            116,
            101,
            32,
            109,
            101,
            109,
            111,
            114,
            121,
            32,
            97,
            114,
            101,
            97,
            32,
            40,
            67,
            97,
            110,
            110,
            111,
            116,
            32,
            97,
            108,
            108,
            111,
            99,
            97,
            116,
            101,
            32,
            109,
            101,
            109,
            111,
            114,
            121,
            41,
            10
          ]
        }
sendosc: {
          "oscType": "message",
          "address": "/notify",
          "args": [
            1,
            0
          ]
        }
debug  : udp is listening
rcvosc : [
          "/done",
          "/notify",
          0,
          64
        ]
Loading config: /.supercollider.yaml
debug  : {
          "sclang": "/usr/bin/sclang",
          "scsynth": "/usr/bin/scsynth",
          "debug": true,
          "echo": true,
          "stdin": true,
          "failIfSclangConfIsMissing": false,
          "conf": {
            "includePaths": [],
            "excludePaths": [],
            "postInlineWarnings": false
          },
          "sclang_conf": "/usr/local/share/SuperCollider/sclang_conf.yaml"
        }
debug  : {
          "errno": -2,
          "syscall": "open",
          "code": "ENOENT",
          "path": "/usr/local/share/SuperCollider/sclang_conf.yaml"
        }
debug  : compiling class library...
stderr : QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
stderr : qt.qpa.screen: QXcbConnection: Could not connect to display 
        Could not connect to any X display.
        terminate called without an active exception
debug  : exit nullSIGABRT
debug  : close nullSIGABRT
error  : Timeout waiting for sclang to boot pid:44
(node:24) UnhandledPromiseRejectionWarning: CompileError
VictorKolb commented 3 years ago

Ok, my journey is continuing.

Now supercolliderjs isn't connecting to Jack. I notice, when I start supercollider directly like export QT_QPA_PLATFORM=offscreen &&sclang /etc/radio.sc, I can see something like:

JackDriver: connected  system:capture_1 to SuperCollider:in_1
JackDriver: connected  system:capture_2 to SuperCollider:in_2
JackDriver: connected  SuperCollider:out_1 to darkice:left
JackDriver: connected  SuperCollider:out_2 to darkice:right

But when I try export QT_QPA_PLATFORM=offscreen && node index.js this is info didn't appear

VictorKolb commented 3 years ago

Update: If I add s.boot to file /root/.config/SuperCollider/startup.scd supercollider trying booting server

booting server 'localhost' on address: 127.0.0.1:57110

And JackDriver start to connect. But port already used by previous server, started with supercoliderjs, and connect is interrupted.

debug  : JackDriver: client name is 'SuperCollider-01' <--- As you can see, name is SuperCollider-01 instead SuperCollider
debug  : SC_AudioDriver: sample rate = 44100.000000, driver's block size = 1024
debug  : JackDriver: connected  system:capture_1 to SuperCollider-01:in_1
debug  : JackDriver: connected  system:capture_2 to SuperCollider-01:in_2
debug  : JackDriver: connected  SuperCollider-01:out_1 to darkice:left
        JackDriver: connected  SuperCollider-01:out_2 to darkice:right
debug  : Exception in World_OpenUDP: bind: Address already in use

@crucialfelix do you know a way to give a signal to JackDriver about started scsynth?

VictorKolb commented 3 years ago

Ok, all done. If add this to my .supercollider.yaml all works!

env:
  SC_JACK_DEFAULT_OUTPUTS: "darkice:left,darkice:right"

I'll create PR to add docker example.

crucialfelix commented 3 years ago

Hi. You've got a working Dockerfile with ... icecast? How is it communicating with the world?

We should get this on hub.docker.com

I haven't had anytime to work with supercollider.js unfortunately (full time job)