Closed josiah-wolf-oberholtzer closed 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.
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.
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.
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.
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.
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'
What version of SuperCollider are you running?
sclang 3.13.0-dev (Built from branch 'develop' [25aa4fe]) scsynth 3.13.0-dev (Built from branch 'develop' [25aa4fe])
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.
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.
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!
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.
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.
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..
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.
Ah perfect. Cheers
@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
.
Hi @josiah-wolf-oberholtzer
Thanks, it's great to see you pushing this forward. I'm happy in any case.
Python 3.7 sunsets on June 27 2023: https://endoflife.date/python
Remove Python 3.7 support at that time:
typing_extensions