Supriya (24.3b2)

Attention

Documentation is under construction. Stand by.

Supriya is a Python API for SuperCollider.

Supriya lets you:

  • Boot and communicate with SuperCollider’s scsynth synthesis engine in realtime.

  • Explore nonrealtime composition with scores.

  • Build time-agnostic asyncio-aware applications with the context interface.

  • Compile SuperCollider SynthDefs natively in Python code.

  • Schedule patterns and callbacks with tempo- and meter-aware clocks.

  • Integrate with IPython, Sphinx and Graphviz.

Quickstart

1. Get Supriya

pip install supriya
git clone https://github.com/supriya-project/supriya.git
cd supriya
pip install -e .

Note

Consult our installation instructions for detailed help on getting Supriya, setting it up, and installing any additional dependencies like Graphviz.

2. Get SuperCollider

Get SuperCollider from http://supercollider.github.io/.

3. Boot the server

Start your Python interpreter and import Supriya:

>>> import supriya

Boot the SuperCollider server:

>>> server = supriya.Server().boot()

4. Build a SynthDef

Import some classes:

>>> from supriya import Envelope, synthdef
>>> from supriya.ugens import EnvGen, Out, SinOsc

Make a synthesizer definition:

>>> @synthdef()
... def simple_sine(frequency=440, amplitude=0.1, gate=1):
...     sine = SinOsc.ar(frequency=frequency) * amplitude
...     envelope = EnvGen.kr(envelope=Envelope.adsr(), gate=gate, done_action=2)
...     Out.ar(bus=0, source=[sine * envelope] * 2)
... 

Visualize the SynthDef (requires Graphviz):

>>> supriya.graph(simple_sine)

Allocate it on the server:

>>> _ = server.add_synthdefs(simple_sine)

5. Create some nodes

Create and allocate a group:

>>> group = server.add_group()

Create some synthesizers with the previously defined synthesizer definition, and allocate them on the server as a child of the previously created group:

>>> for i in range(3):
...     _ = group.add_synth(simple_sine, frequency=111 * (i + 1))
... 

Query the server’s node tree:

>>> print(server.query_tree())
/home/runner/work/supriya/supriya/supriya/contexts/realtime.py:210: FailWarning: /s_new SynthDef not found
  warnings.warn(" ".join(str(x) for x in message.contents), FailWarning)
/home/runner/work/supriya/supriya/supriya/contexts/realtime.py:210: FailWarning: /s_new SynthDef not found
  warnings.warn(" ".join(str(x) for x in message.contents), FailWarning)
/home/runner/work/supriya/supriya/supriya/contexts/realtime.py:210: FailWarning: /s_new SynthDef not found
  warnings.warn(" ".join(str(x) for x in message.contents), FailWarning)
NODE TREE 0 group
    1 group
        1000 group

6. Release and quit

Release the synths:

>>> for synth in group.children[:]:
...     synth.free()
... 

Quit the server:

>>> server.quit()
<supriya.contexts.realtime.Server object at 0x7f9a7ed0cb10>