supriya-project / supriya

A Python API for SuperCollider
http://supriya-project.github.io/supriya
MIT License
250 stars 29 forks source link

Supriya on Raspberry PI #249

Closed josiah-wolf-oberholtzer closed 2 years ago

josiah-wolf-oberholtzer commented 2 years ago

Python 3.7 sunsets on June 27 2023: https://endoflife.date/python

Remove Python 3.7 support at that time:

shakfu commented 2 years ago

I changed the code to make it python3.7 friendly as per the attached diff, but I'm getting an error at supriya.Server.boot():

Python 3.7.3 (default, Jan 22 2021, 20:04:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.31.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import supriya

In [2]: server = supriya.Server().boot()
Timed out: NotifyRequest(
    notify_status=True,
)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-5609ead0abe7> in <module>
----> 1 server = supriya.Server().boot()

~/tmp/supriya/supriya/realtime/servers.py in boot(self, ip_address, port, scsynth_path, options, **kwargs)
   1037         self._is_owner = True
   1038         self._port = port
-> 1039         self._connect()
   1040         return self
   1041

~/tmp/supriya/supriya/realtime/servers.py in _connect(self)
    638         self._is_running = True
    639         self._setup_osc_callbacks()
--> 640         self._setup_notifications()
    641         self._setup_allocators()
    642         self._setup_proxies()

~/tmp/supriya/supriya/realtime/servers.py in _setup_notifications(self)
    775             self._shutdown()
    776             raise supriya.exceptions.TooManyClients
--> 777         if len(response.action) == 2:  # supernova doesn't provide a max logins value
    778             self._client_id, self._maximum_logins = response.action[1], 1
    779         else:

AttributeError: 'NoneType' object has no attribute 'action'

Is supernova required? I compiled supercollider without supernova in my case.

supriya_py3.7.diff.txt

josiah-wolf-oberholtzer commented 2 years ago

No, supernova is not required.

What version of SuperCollider are you using? Supriya automatically builds and tests against Python 3.7/3.8/3.9 and a build from SuperCollider's main. Those tests all include interaction with a live SuperCollider server, so I suspect something is broken in your environment.

josiah-wolf-oberholtzer commented 2 years ago

If you're installing SuperCollider from APT, it's probably ancient. SC hasn't had an APT release in years and years, and I think the API has changed a little bit.

shakfu commented 2 years ago

I actually built supercollider from the main GitHub branch. I have tested it independently and it works fine with jackd2

Here are some more extensive tests to show the failures:

$ sclang
compiling class library...
        Found 738 primitives.
        Compiling directory '/usr/local/share/SuperCollider/SCClassLibrary'
        Compiling directory '/usr/local/share/SuperCollider/Extensions'
        Compiling directory '/home/pi/.local/share/SuperCollider/Extensions'
        numentries = 1119840 / 12604416 = 0.089
        4224 method selectors, 2984 classes
        method table size 8308076 bytes, big table size 50417664
        Number of Symbols 11858
        Byte Code Size 331857
        compiled 466 files in 1.10 seconds

Info: 4 methods are currently overwritten by extensions. To see which, execute:
MethodOverride.printAll

compile done
localhost : setting clientID to 0.
internal : setting clientID to 0.
Couldn't set realtime scheduling priority 1: Operation not permitted
Class tree inited in 0.07 seconds

*** Welcome to SuperCollider 3.13.0-dev. *** For help type ctrl-c ctrl-h (Emacs) or :SChelp (vim) or ctrl-U (sced/gedit).
Couldn't set realtime scheduling priority 1: Operation not permitted

I then boot the server

sc3> s.boot
-> localhost
sc3> Booting server 'localhost' on address 127.0.0.1:57110.
Found 74 LADSPA plugins
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jackdmp 1.9.20
Copyright 2001-2005 Paul Davis and others.
Copyright 2004-2016 Grame.
Copyright 2016-2021 Filipe Coelho.
jackdmp comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details
JACK server starting in realtime mode with priority 75
self-connect-mode is "Don't restrict self connect requests"
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
creating alsa driver ... hw:0|hw:0|1024|3|44100|0|0|nomon|swmeter|-|32bit
ALSA: Cannot open PCM device alsa_pcm for capture. Falling back to playback-only mode
configuring for 44100Hz, period = 1024 frames (23.2 ms), buffer = 3 periods
ALSA: final selected sample format for playback: 32bit integer little-endian
ALSA: use 3 periods for playback
Cannot use real-time scheduling (RR/75) (1: Operation not permitted)
AcquireSelfRealTime error
JackDriver: client name is 'SuperCollider'
SC_AudioDriver: sample rate = 44100.000000, driver's block size = 1024
Cannot use real-time scheduling (RR/70) (1: Operation not permitted)
JackClient::AcquireSelfRealTime error
JackDriver: connected  SuperCollider:out_1 to system:playback_1
JackDriver: connected  SuperCollider:out_2 to system:playback_2
SuperCollider 3 server ready.
JackDriver: max output latency 69.7 ms
Requested notification messages from server 'localhost'
localhost: server process's maxLogins (1) matches with my options.
localhost: keeping clientID (0) as confirmed by server process.
Shared memory server interface initialized

On the python side:

Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import supriya
>>> server = supriya.Server().boot()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pi/tmp/supriya/supriya/realtime/servers.py", line 1035, in boot
    self._process_protocol.boot(self._options, scsynth_path, port)
  File "/home/pi/tmp/supriya/supriya/realtime/protocols.py", line 55, in boot
    raise supriya.exceptions.ServerCannotBoot(line)
supriya.exceptions.ServerCannotBoot: *** ERROR: failed to open UDP socket: address in use.
>>>

After the above failed python attempt, the supercollider log reads as follows:

sc3> JackEngine::XRun: client = SuperCollider-01 was not finished, state = Triggered
JackAudioDriver::ProcessGraphAsyncMaster: Process error
Cannot read socket fd = 16 err = Connection reset by peer
Could not read notification result
ClientNotify fails name = SuperCollider-01 notification = 18 val1 = 0 val2 = 0
Cannot write socket fd = 16 err = Broken pipe
CheckRes error
Could not write notification
ClientNotify fails name = SuperCollider-01 notification = 18 val1 = 1 val2 = 0
Cannot write socket fd = 16 err = Broken pipe
CheckRes error
Could not write notification
ClientNotify fails name = SuperCollider-01 notification = 4 val1 = 0 val2 = 0
Cannot write socket fd = 16 err = Broken pipe
CheckRes error
Could not write notification
ClientNotify fails name = SuperCollider-01 notification = 3 val1 = 0 val2 = 0
JackEngine::XRun: client = SuperCollider-01 was not finished, state = Triggered
JackAudioDriver::ProcessGraphAsyncMaster: Process error

If I quite the supercollider server and try to run server = supriya.Server().boot() I get the same AttributeError: 'NoneType' object has no attribute 'action' error.

It's a strange one.

I'll have to test this on a mac and see what I get.

josiah-wolf-oberholtzer commented 2 years ago

supriya.exceptions.ServerCannotBoot: *** ERROR: failed to open UDP socket: address in use. means another server or process is already running on that port when you're trying to start your own scsynth process. Are you trying to connect to an existing scsynth process? We have Server.connect() for that use case.

shakfu commented 2 years ago

I did a git pull on your current changes.

I tried to Server.connect() even with setting s.options.maxLogins = 8; as per this advice, but it didn't work either.

I went back to the base case when I don't have sclang running and and have not booted a server, and I'm just using supriya to boot scsynth server. I placed some print statements around line 773 of supriya/supriya/realtime/servers.py:

    def _setup_notifications(self):
        request = NotifyRequest(True)
        print('request:', request)
        response = request.communicate(server=self)
        print('response:', response)
        if isinstance(response, FailResponse):
            self._shutdown()
            raise supriya.exceptions.TooManyClients
        if len(response.action) == 2:  # supernova doesn't provide a max logins value
            self._client_id, self._maximum_logins = response.action[1], 1
        else:
            self._client_id, self._maximum_logins = response.action[1:3]

When I try to boot in this case:

request: NotifyRequest(
    notify_status=True,
)
Timed out: NotifyRequest(
    notify_status=True,
)
response: None
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-5609ead0abe7> in <module>
----> 1 server = supriya.Server().boot()

~/tmp/supriya/supriya/realtime/servers.py in boot(self, ip_address, port, scsynth_path, options, **kwargs)
   1039         self._is_owner = True
   1040         self._port = port
-> 1041         self._connect()
   1042         return self
   1043

~/tmp/supriya/supriya/realtime/servers.py in _connect(self)
    638         self._is_running = True
    639         self._setup_osc_callbacks()
--> 640         self._setup_notifications()
    641         self._setup_allocators()
    642         self._setup_proxies()

~/tmp/supriya/supriya/realtime/servers.py in _setup_notifications(self)
    777             self._shutdown()
    778             raise supriya.exceptions.TooManyClients
--> 779         if len(response.action) == 2:  # supernova doesn't provide a max logins value
    780             self._client_id, self._maximum_logins = response.action[1], 1
    781         else:

AttributeError: 'NoneType' object has no attribute 'action'
josiah-wolf-oberholtzer commented 2 years ago

What version of SuperCollider are you running?

shakfu commented 2 years ago

sclang 3.13.0-dev (Built from branch 'develop' [25aa4fe]) scsynth 3.13.0-dev (Built from branch 'develop' [25aa4fe])

josiah-wolf-oberholtzer commented 2 years ago

OK, cool. Some suggestions...

1) Use logging to get more information out of supriya:

import logging
logging.basicConfig()
logging.getLogger("supriya.server").setLevel(logging.DEBUG)  # will show scsynth output and lifecycle info
logging.getLogger("supriya.osc").setLevel(logging.DEBUG)  # will show OSC communications
# optionally: logging.getLogger("supriya.udp").setLevel(logging.DEBUG)  # this dumps out UDP packets; very verbose

2) Make the scenario simpler: don't boot scsynth via sclang, but just via Supriya. Let's verify that Supriya can interact with scsynth on your system at all before we introduce the complications of connecting to a running server. Setup logging as above, then - without supercollider already running - send me the output when you import supriya; supriya.Server().boot()

3) Then revisit the scenario of connecting to an existing server. Again, setup the logging before interacting with Supriya, then send me the complete output when you attempt to connect to the already-running scsynth process.

josiah-wolf-oberholtzer commented 2 years ago

For example:

>>> import logging
>>> logging.basicConfig()
>>> logging.getLogger("supriya.server").setLevel(logging.DEBUG)  # will show scsynth output and lifecycle info
>>> logging.getLogger("supriya.osc").setLevel(logging.DEBUG)  # will show OSC communications
>>> import supriya
/Users/josiah/.virtualenvs/supriya/lib/python3.9/site-packages/setuptools/dist.py:723: UserWarning: Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead
  warnings.warn(
>>> supriya.Server().boot()
INFO:supriya.server.protocol:Boot: /Users/josiah/Source/github.com/josiah-wolf-oberholtzer/supercollider/build/Install/SuperCollider/SuperCollider.app/Contents/Resources/scsynth -R 0 -l 1 -u 57110
INFO:supriya.server.protocol:Boot: Number of Devices: 3
INFO:supriya.server.protocol:Boot:    0 : "MacBook Pro Microphone"
INFO:supriya.server.protocol:Boot:    1 : "MacBook Pro Speakers"
INFO:supriya.server.protocol:Boot:    2 : "ZoomAudioD"
INFO:supriya.server.protocol:Boot: "MacBook Pro Microphone" Input Device
INFO:supriya.server.protocol:Boot:    Streams: 1
INFO:supriya.server.protocol:Boot:       0  channels 1
INFO:supriya.server.protocol:Boot: "MacBook Pro Speakers" Output Device
INFO:supriya.server.protocol:Boot:    Streams: 1
INFO:supriya.server.protocol:Boot:       0  channels 2
INFO:supriya.server.protocol:Boot: SC_AudioDriver: sample rate = 96000.000000, driver's block size = 512
INFO:supriya.server.protocol:Boot: SuperCollider 3 server ready.
INFO:supriya.osc.protocol:None:None connecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 ...connected
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/notify', 1)
DEBUG:supriya.osc.in:127.0.0.1:57110 OscMessage('/done', '/notify', 0, 1)
INFO:supriya.osc.protocol:127.0.0.1:57110 healthchecking...
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/g_new', 1, 0, 0)
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/status')
DEBUG:supriya.osc.in:127.0.0.1:57110 OscMessage('/n_go', 1, 0, -1, -1, 1, -1, -1)
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/d_recv', bytearray(b...

The immediate question is what does your scsynth process send back after we send it the OscMessage('/notify', 1) message.

shakfu commented 2 years ago

Ok, I have run the tests in sequence as requested:

Here's test 1 (running supriya without booting sclang / scsynth separately)

import logging

logging.basicConfig(
    handlers=[
        logging.FileHandler("supriya.log"),
        logging.StreamHandler(),
    ]
)

logging.getLogger("supriya.server").setLevel(logging.DEBUG)  # will show scsynth output and lifecycle info
logging.getLogger("supriya.osc").setLevel(logging.DEBUG)  # will show OSC communications
# optionally: logging.getLogger("supriya.udp").setLevel(logging.DEBUG)  # this dumps out UDP packets; very verbose

import supriya
supriya.Server().boot()

and the log is as follows:

INFO:supriya.server.protocol:Boot: /usr/local/bin/scsynth -R 0 -l 1 -u 57110
INFO:supriya.server.protocol:Boot: Found 74 LADSPA plugins
INFO:supriya.server.protocol:Boot: Cannot connect to server socket err = No such file or directory
INFO:supriya.server.protocol:Boot: Cannot connect to server request channel
INFO:supriya.server.protocol:Boot: jackdmp 1.9.20
INFO:supriya.server.protocol:Boot: Copyright 2001-2005 Paul Davis and others.
INFO:supriya.server.protocol:Boot: Copyright 2004-2016 Grame.
INFO:supriya.server.protocol:Boot: Copyright 2016-2021 Filipe Coelho.
INFO:supriya.server.protocol:Boot: jackdmp comes with ABSOLUTELY NO WARRANTY
INFO:supriya.server.protocol:Boot: This is free software, and you are welcome to redistribute it
INFO:supriya.server.protocol:Boot: under certain conditions; see the file COPYING for details
INFO:supriya.server.protocol:Boot: JACK server starting in realtime mode with priority 75
INFO:supriya.server.protocol:Boot: self-connect-mode is "Don't restrict self connect requests"
INFO:supriya.server.protocol:Boot: Cannot connect to server socket err = No such file or directory
INFO:supriya.server.protocol:Boot: Cannot connect to server request channel
INFO:supriya.server.protocol:Boot: creating alsa driver ... hw:0|hw:0|1024|3|44100|0|0|nomon|swmeter|-|32bit
INFO:supriya.server.protocol:Boot: ALSA: Cannot open PCM device alsa_pcm for capture. Falling back to playback-only mode
INFO:supriya.server.protocol:Boot: configuring for 44100Hz, period = 1024 frames (23.2 ms), buffer = 3 periods
INFO:supriya.server.protocol:Boot: ALSA: final selected sample format for playback: 32bit integer little-endian
INFO:supriya.server.protocol:Boot: ALSA: use 3 periods for playback
INFO:supriya.server.protocol:Boot: Cannot use real-time scheduling (RR/75) (1: Operation not permitted)
INFO:supriya.server.protocol:Boot: AcquireSelfRealTime error
INFO:supriya.server.protocol:Boot: JackDriver: client name is 'SuperCollider'
INFO:supriya.server.protocol:Boot: SC_AudioDriver: sample rate = 44100.000000, driver's block size = 1024
INFO:supriya.server.protocol:Boot: Cannot use real-time scheduling (RR/70) (1: Operation not permitted)
INFO:supriya.server.protocol:Boot: JackClient::AcquireSelfRealTime error
INFO:supriya.server.protocol:Boot: SuperCollider 3 server ready.
INFO:supriya.osc.protocol:None:None connecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 ...connected
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/notify', 1)
INFO:supriya.osc.protocol:127.0.0.1:57110 healthchecking...
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/status')
WARNING:supriya.osc:Timed out: NotifyRequest(
    notify_status=True,
)
INFO:supriya.osc.protocol:127.0.0.1:57110 healthcheck failed, 4 attempts remaining
INFO:supriya.osc.protocol:127.0.0.1:57110 healthchecking...
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/status')
INFO:supriya.osc.protocol:127.0.0.1:57110 healthcheck failed, 3 attempts remaining
INFO:supriya.osc.protocol:127.0.0.1:57110 healthchecking...
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/status')
INFO:supriya.osc.protocol:127.0.0.1:57110 healthcheck failed, 2 attempts remaining
INFO:supriya.osc.protocol:127.0.0.1:57110 healthchecking...
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/status')
INFO:supriya.osc.protocol:127.0.0.1:57110 healthcheck failed, 1 attempts remaining
INFO:supriya.osc.protocol:127.0.0.1:57110 healthchecking...
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/status')
INFO:supriya.osc.protocol:127.0.0.1:57110 healthcheck failed, 0 attempts remaining
INFO:supriya.osc.protocol:127.0.0.1:57110 healthcheck failure limit exceeded
INFO:supriya.osc.protocol:127.0.0.1:57110 disconnecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 ...disconnected
INFO:supriya.server:shutting down
INFO:supriya.server:disconnecting
INFO:supriya.osc.protocol:127.0.0.1:57110 disconnecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 already disconnected!
INFO:supriya.server:disconnected
INFO:supriya.osc.protocol:127.0.0.1:57110 disconnecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 already disconnected!

test2: running supriya after booting sclang and scsynth separately.

import logging

logging.basicConfig(
    handlers=[
        logging.FileHandler("supriya.log"),
        logging.StreamHandler(),
    ]
)

logging.getLogger("supriya.server").setLevel(logging.DEBUG)  # will show scsynth output and lifecycle info
logging.getLogger("supriya.osc").setLevel(logging.DEBUG)  # will show OSC communications
# optionally: logging.getLogger("supriya.udp").setLevel(logging.DEBUG)  # this dumps out UDP packets; very verbose

import supriya
con = supriya.Server().connect()

and it log:

INFO:supriya.osc.protocol:None:None connecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 ...connected
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/notify', 1)
DEBUG:supriya.osc.in:127.0.0.1:57110 OscMessage('/fail', '/notify', 'too many users\n')
WARNING:supriya.server:Fail: size 36
   0   2f 66 61 69  6c 00 00 00  2c 73 73 00  2f 6e 6f 74   |/fail...,ss./not|
  16   69 66 79 00  74 6f 6f 20  6d 61 6e 79  20 75 73 65   |ify.too many use|
  32   72 73 0a 00                                          |rs..|
INFO:supriya.osc.protocol:127.0.0.1:57110 healthchecking...
INFO:supriya.server:shutting down
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/status')
INFO:supriya.server:disconnecting
INFO:supriya.osc.protocol:127.0.0.1:57110 disconnecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 ...disconnected
INFO:supriya.server:disconnected
INFO:supriya.osc.protocol:127.0.0.1:57110 disconnecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 already disconnected!
josiah-wolf-oberholtzer commented 2 years ago

OK, thank you for the log output.

The second scenario (boot scsynth via sclang, then connect via supriya) tells you the problem: you're not configuring scsynth to accept more than one user: OscMessage('/fail', '/notify', 'too many users\n')

The first scenario is definitely a problem. We're not getting a reply to the OscMessage('/notify', 1) message at all!

Can you try, from your command-line, running the same command to boot scsynth that Supriya is generating: /usr/local/bin/scsynth -R 0 -l 1 -u 57110? I'm curious if all the errors messages you see in the supriya.server logs also appear when you run it outside of Python.

It does look like Supriya can talk to a running scsynth process - we know it can because it can get the /fail response.

What we want to figure out is why Supriya can't get a response from a scsynth process it boots itself. Maybe sclang boots scsynth with different flags? Anything you can do to figure that out will help. I don't have a Raspberry PI, so I can't experiment at home.

josiah-wolf-oberholtzer commented 2 years ago

The other thing to verify is if you can boot scsynth from sclang and make noise with it. That will prove that scsynth works at all. Then we can narrow the problem down to determining how sclang boots scsynth differently from how supriya boots scsynth on your platform. I'd love to see any additional output that sclang provides when it boots the server.

shakfu commented 2 years ago

Thanks for your help and suggestions on how to fix this. I'll spend some more time on this over the weekend.

One thing I'd like to confirm (since you asked) is that I have been using sclang / scynth on this system to generate sounds from supercollider code without issues. Its actually an ideal headless or gui-less setup which was compiled using the official guide from supercollider.

So I agree that It's most like a configuration difference or perhaps something minor. Let's see..

shakfu commented 2 years ago

Ok, I finally figured out what the problem was. I need to run as 'sudo' to make it work as expected!!

This may be because of the way permissions were set in one of the dependencies (jack, etc.) somewhere in the chain or because my setup needs sudo to access the GPIO/SPI audio card.

To test this. I have the usual initial test:

import logging

logging.basicConfig(
    handlers=[
        logging.FileHandler("supriya.log"),
        logging.StreamHandler(),
    ]
)

logging.getLogger("supriya.server").setLevel(logging.DEBUG)  # will show scsynth output and lifecycle info
logging.getLogger("supriya.osc").setLevel(logging.DEBUG)  # will show OSC communications
# optionally: logging.getLogger("supriya.udp").setLevel(logging.DEBUG)  # this dumps out UDP packets; very verbose

import supriya
supriya.Server().boot()

now run as sudo:

# from within a virtualenv venv
sudo ./bin/python test_supriya.py

I get the following

INFO:supriya.server.protocol:Boot: /usr/local/bin/scsynth -R 0 -l 1 -u 57110
INFO:supriya.server.protocol:Boot: Found 74 LADSPA plugins
INFO:supriya.server.protocol:Boot: Cannot connect to server socket err = Connection refused
INFO:supriya.server.protocol:Boot: Cannot connect to server request channel
INFO:supriya.server.protocol:Boot: jackdmp 1.9.20
INFO:supriya.server.protocol:Boot: Copyright 2001-2005 Paul Davis and others.
INFO:supriya.server.protocol:Boot: Copyright 2004-2016 Grame.
INFO:supriya.server.protocol:Boot: Copyright 2016-2021 Filipe Coelho.
INFO:supriya.server.protocol:Boot: jackdmp comes with ABSOLUTELY NO WARRANTY
INFO:supriya.server.protocol:Boot: This is free software, and you are welcome to redistribute it
INFO:supriya.server.protocol:Boot: under certain conditions; see the file COPYING for details
INFO:supriya.server.protocol:Boot: JACK server starting in realtime mode with priority 10
INFO:supriya.server.protocol:Boot: self-connect-mode is "Don't restrict self connect requests"
INFO:supriya.server.protocol:Boot: Cannot connect to server socket err = Connection refused
INFO:supriya.server.protocol:Boot: Cannot connect to server request channel
INFO:supriya.server.protocol:Boot: creating alsa driver ... hw:0|hw:0|1024|2|48000|0|0|nomon|swmeter|-|32bit
INFO:supriya.server.protocol:Boot: ALSA: Cannot open PCM device alsa_pcm for capture. Falling back to playback-only mode
INFO:supriya.server.protocol:Boot: configuring for 48000Hz, period = 1024 frames (21.3 ms), buffer = 2 periods
INFO:supriya.server.protocol:Boot: ALSA: final selected sample format for playback: 32bit integer little-endian
INFO:supriya.server.protocol:Boot: ALSA: use 2 periods for playback
INFO:supriya.server.protocol:Boot: JackDriver: client name is 'SuperCollider'
INFO:supriya.server.protocol:Boot: SC_AudioDriver: sample rate = 48000.000000, driver's block size = 1024
INFO:supriya.server.protocol:Boot: SuperCollider 3 server ready.
INFO:supriya.osc.protocol:None:None connecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 ...connected
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/notify', 1)
DEBUG:supriya.osc.in:127.0.0.1:57110 OscMessage('/done', '/notify', 0, 1)
INFO:supriya.osc.protocol:127.0.0.1:57110 healthchecking...
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/status')
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/g_new', 1, 0, 0)
DEBUG:supriya.osc.in:127.0.0.1:57110 OscMessage('/n_go', 1, 0, -1, -1, 1, -1, -1)
DEBUG:supriya.osc.in:127.0.0.1:57110 OscMessage('/status.reply', 1, 0, 0, 2, 0, 0.0, 0.0, 48000.0, 48054.36837674017)
DEBUG:supriya.osc.out:127.0.0.1:57110 OscMessage('/d_recv', bytearray(b'SCgf\x00\x00\x00\x02\x00\x08\x13system_link_audio_1\x00\x00\x00\x07\x00\x00\x00\x00?\x80\x00\x00@\x00\x0
...
... (lots of binary data)
...
0\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00'))
DEBUG:supriya.osc.in:127.0.0.1:57110 OscMessage('/done', '/d_recv')
INFO:supriya.osc.protocol:127.0.0.1:57110 disconnecting...
INFO:supriya.osc.protocol:127.0.0.1:57110 ...disconnected

Looks like this clears the mystery, finally.

Thanks for your patience and help throughout.

josiah-wolf-oberholtzer commented 2 years ago

Ah perfect. Cheers

josiah-wolf-oberholtzer commented 1 year ago

@shakfu Are you still using Supriya?

I would like to drop support for Python 3.7 ASAP so I can finally use := and various typing classes like Literal.

shakfu commented 1 year ago

Hi @josiah-wolf-oberholtzer

Thanks, it's great to see you pushing this forward. I'm happy in any case.