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 withscores
.Build time-agnostic
asyncio
-aware applications with thecontext
interface.Compile SuperCollider
SynthDefs
natively in Python code.Schedule
patterns
and callbacks with tempo- and meter-awareclocks
.
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>