hello_world_debugged

Hello, world!, debugged.

Let’s play a C-major chord! But this time, let’s also print out logs and debugging information about the state of the server, the scsynth process, and the OSC messages sent by our client.

We’ll perform four kinds of debugging:

  • Turn on logging for the scsynth subprocess so we can see what it says when it boots up.

  • Print the “status” of the server at various points so we can see CPU usage, actual sample rates, node counts, etc.

  • Print the “node tree”: the structure of the groups and synths in the server.

  • Capture and print OSC messages sent by Supriya to scsynth.

Invoke with:

josephine@laptop:~/supriya$ python -m examples.hello_world_debugged
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] booting ...
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] command: /usr/local/bin/scsynth -R 0 -l 1 -u 57110
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] received: Cannot lock down 107341340 byte memory area (Cannot allocate memory)
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] received: JackDriver: client name is 'SuperCollider'
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] received: SC_AudioDriver: sample rate = 44100.000000, driver's block size = 1024
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] received: SuperCollider 3 server ready.
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] ... booted!
BEFORE PLAYING:
    Status: StatusInfo(actual_sample_rate=44106.022607717845, average_cpu_usage=0.0312314722687006, group_count=2, peak_cpu_usage=0.1152452826499939, synth_count=0, synthdef_count=32, target_sample_rate=44100.0, ugen_count=0)
    Tree: NODE TREE 0 group
    Tree:     1 group
IMMEDIATELY AFTER PLAYING:
    Status: StatusInfo(actual_sample_rate=44106.022607717845, average_cpu_usage=0.0312314722687006, group_count=2, peak_cpu_usage=0.1152452826499939, synth_count=0, synthdef_count=32, target_sample_rate=44100.0, ugen_count=0)
    Transcript:
        Sent:     OscMessage('/d_recv', b'SCgf\x00\x00\x00\x02\x00\x01\x0fsupriya:default\x00\x00\x00\x0c\x00\x00\x00\x00>\x99\x99\x9a<#\xd7\n?333@\x00\x00\x00\xbe\xcc\xcc\xcd>\xcc\xcc\xcdEz\x00\x00E\x9c@\x00E\x1c@\x00EH\x00\x00?\x80\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00=\xcc\xcc\xcdC\xdc\x00\x00?\x80\x00\x00?\x00\x00\x00\x00\x00\x00\x05\x03out\x00\x00\x00\x00\tamplitude\x00\x00\x00\x01\tfrequency\x00\x00\x00\x02\x04gate\x00\x00\x00\x03\x03pan\x00\x00\x00\x04\x00\x00\x00\x14\x07Control\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07Control\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x01\x01\x01\x01\x01\x06VarSaw\x02\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\x02\x05Linen\x01\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\xff\xff\xff\xff\x00\x00\x00\x02\xff\xff\xff\xff\x00\x00\x00\x03\xff\xff\xff\xff\x00\x00\x00\x01\xff\xff\xff\xff\x00\x00\x00\x04\x01\x04Rand\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\xff\xff\xff\xff\x00\x00\x00\x05\xff\xff\xff\xff\x00\x00\x00\x00\x00\x0cBinaryOpUGen\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x01\x06VarSaw\x02\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\x02\x04Rand\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x06\x00\x0cBinaryOpUGen\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x00\x01\x06VarSaw\x02\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\x02\x04Sum3\x02\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x02\x0cBinaryOpUGen\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\n\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\x02\x04Rand\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\xff\xff\xff\xff\x00\x00\x00\x07\xff\xff\xff\xff\x00\x00\x00\x08\x00\x04Rand\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\xff\xff\xff\xff\x00\x00\x00\t\xff\xff\xff\xff\x00\x00\x00\n\x00\x05XLine\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\r\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x0b\xff\xff\xff\xff\x00\x00\x00\x00\x01\x03LPF\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x02\x0cBinaryOpUGen\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x02\x0cBinaryOpUGen\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x02\x04Pan2\x02\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\xff\xff\xff\xff\x00\x00\x00\x0b\x02\x02\tOffsetOut\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x01\x00\x00', OscBundle(contents=[OscMessage('/s_new', 'supriya:default', 1000, 0, 1, 'frequency', 261.63), OscMessage('/s_new', 'supriya:default', 1001, 0, 1, 'frequency', 329.63), OscMessage('/s_new', 'supriya:default', 1002, 0, 1, 'frequency', 392.0)]))
    Tree: NODE TREE 0 group
    Tree:     1 group
PLAYING:
    Status: StatusInfo(actual_sample_rate=44106.022607717845, average_cpu_usage=0.0312314722687006, group_count=2, peak_cpu_usage=0.1152452826499939, synth_count=0, synthdef_count=32, target_sample_rate=44100.0, ugen_count=0)
    Transcript:
        Sent:     OscMessage('/sync', 1)
        Received: OscMessage('/n_go', 1000, 1, -1, -1, 0)
        Received: OscMessage('/n_go', 1001, 1, -1, 1000, 0)
        Received: OscMessage('/n_go', 1002, 1, -1, 1001, 0)
        Received: OscMessage('/done', '/d_recv')
        Received: OscMessage('/synced', 1)
    Tree: NODE TREE 0 group
    Tree:     1 group
    Tree:         1002 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 392.0, gate: 1.0, pan: 0.5
    Tree:         1001 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 329.630005, gate: 1.0, pan: 0.5
    Tree:         1000 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 261.630005, gate: 1.0, pan: 0.5
JUST BEFORE STOPPING:
    Status: StatusInfo(actual_sample_rate=44105.22998562333, average_cpu_usage=0.4361172318458557, group_count=2, peak_cpu_usage=0.445691853761673, synth_count=3, synthdef_count=33, target_sample_rate=44100.0, ugen_count=60)
    Tree: NODE TREE 0 group
    Tree:     1 group
    Tree:         1002 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 392.0, gate: 1.0, pan: 0.5
    Tree:         1001 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 329.630005, gate: 1.0, pan: 0.5
    Tree:         1000 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 261.630005, gate: 1.0, pan: 0.5
IMMEDIATELY AFTER STOPPING:
    Status: StatusInfo(actual_sample_rate=44105.22998562333, average_cpu_usage=0.4361172318458557, group_count=2, peak_cpu_usage=0.445691853761673, synth_count=3, synthdef_count=33, target_sample_rate=44100.0, ugen_count=60)
    Transcript:
        Sent:     OscBundle(contents=[OscMessage('/n_set', 1000, 'gate', 0.0), OscMessage('/n_set', 1001, 'gate', 0.0), OscMessage('/n_set', 1002, 'gate', 0.0)])
    Tree: NODE TREE 0 group
    Tree:     1 group
    Tree:         1002 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 392.0, gate: 0.0, pan: 0.5
    Tree:         1001 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 329.630005, gate: 0.0, pan: 0.5
    Tree:         1000 supriya:default
    Tree:             out: 0.0, amplitude: 0.1, frequency: 261.630005, gate: 0.0, pan: 0.5
AFTER RELEASING:
    Status: StatusInfo(actual_sample_rate=44105.00352740025, average_cpu_usage=0.46997976303100586, group_count=2, peak_cpu_usage=0.4775012731552124, synth_count=0, synthdef_count=33, target_sample_rate=44100.0, ugen_count=0)
    Transcript:
        Received: OscMessage('/n_end', 1002, 1, -1, 1001, 0)
        Received: OscMessage('/n_end', 1001, 1, -1, 1000, 0)
        Received: OscMessage('/n_end', 1000, 1, -1, -1, 0)
    Tree: NODE TREE 0 group
    Tree:     1 group
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] quitting ...
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] ... quit!
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] quitting ...
INFO:supriya.scsynth:[127.0.0.1:57110/0x7f35bd8a4830] ... already quit!

See the example documentation for a complete explanation.

debug(header: str, server: Server) Generator[None, None, None]

A context manager for printing debugging information.

main() None

The example entry-point function.

play_synths(context: Context) list[Synth]

Play a C-major chord on context.

stop_synths(context: Context, synths: list[Synth]) None

Stop synths.