Skip to main content

sh-month

This package implements an intuitive interface to run and control a csound process

Documentation

https://csoundengine.readthedocs.io/en/latest/index.html


Introduction

The core of this package is the Engine class, which wraps a csound process and allows transparent control over all parameters, while providing sane defaults. It uses the csound API to communicate with a running csound instance. All audio processing is run in a separate performance thread.

from csoundengine import *
# create an Engine with default options for the platform.
engine = Engine()

# Define an instrument
engine.compile(r'''
  instr synth
    ; pfields of the instrument
    kmidinote = p4
    kamp = p5
    kcutoff = p6
    kdetune = p7

    kfreq = mtof:k(kmidinote)
    ; A filtered sawtooth
    asig  = vco2:a(kamp*0.7, kfreq)
    asig += vco2:a(kamp*0.7, kfreq + kdetune)
    asig = moogladder2(asig, kcutoff, 0.9)
    ; Attack / Release
    aenv = linsegr:a(0, 0.01, 1, 0.2, 0)
    asig *= aenv
    outs asig, asig
  endin
''')

# Start a synth with indefinite duration. This returns the eventid (p1)
# of the running instrument, which can be used to further control it
event = engine.sched("synth", args=[48, 0.2, 3000, 4])

# Change midinote. setp means: set p-field. This sets kmidinote (p4) to 50
engine.setp(event, 4, 50)

# Modify cutoff
engine.setp(event, 6, 1000, delay=4)

# Create a graphic interface to interact with this event. If running within a jupyter notebook
# a html gui is generated, otherwise a native gui is used:
engine.eventUI(event, p4=(0, 127), p5=(0, 1), kcutoff=(100, 5000))
https://raw.githubusercontent.com/gesellkammer/csoundengine/master/docs/assets/eventui2.png

Session - high level interface

Each engine can have an associated Session. A Session provides a higher level interface, allowing to:

  • Define instrument templates (an Instr), which can be instantiated at any order of evaluation, allowing to implement processing chains of any complexity

  • An Instr can have named parameters which can be used to control the event.

  • A Session provides a series of built-in Instr’s to perform some common tasks, like playing samples from memory or from disk, perform audio analysis, etc.

https://raw.githubusercontent.com/gesellkammer/csoundengine/master/docs/assets/synthui.png
from csoundengine import *

# Create an Engine and a corresponding Session using default options
session = Engine().session()

# or directly create a session, this will launch an engine
session = Session()

# create a master audio bus
masterbus = session.assignBus()

# define instruments
session.defInstr("synth", r'''
  |ibus, kmidi=60, kamp=0.1, ktransp=0, ifade=0.5|
  ; a simple sawtooth
  asig vco2 kamp, mtof:k(kmidi+ktransp)
  asig *= linsegr:a(0, ifade, 1, ifade, 0)
  ; output is routed to a bus
  busout(ibus, asig)
''')

session.defInstr("filter", r'''
  |ibus, imasterbus, kcutoff=1000, kresonance=0.9|
  asig = busin(ibus)
  asig = moogladder2(asig, kcutoff, kresonance)
  busmix(imasterbus, asig)
''')

session.defInstr("master", r'''
  imasterbus = p4
  asig = busin(imasterbus)
  asig compress2 asig, asig, -120, -40, -12, 3, 0.1, 0.01, 0.05
  outch 1, asig
''')

# Start a master instance at the end of the evaluation chain
master = session.sched("master", imasterbus=masterbus, priority=10)

# Launch some notes
for i, midinote in enumerate(range(60, 72, 2)):
    # for each synth, we create a bus to plug it to an effect, in this case a filter
    # The bus will be collected once all clients are finished
    bus = session.assignBus()

    # start time for synth and effect
    start = i * 1

    # Schedule a synth
    synth = session.sched("synth", delay=start, dur=5, kmidi=midinote, ibus=bus)

    # Automate pitch transposition so that it descends 2 semitones over the
    # duration of the event
    synth.automatep('ktransp', [0, 0, dur, -2], delay=start)

    # Schedule the filter for this synth, with a priority higher than the
    # synth, so that it is evaluated later in the chain
    filt = session.sched("filter",
                         delay=start,
                         dur=synth.dur,
                         priority=synth.priority+1,
                         kcutoff=2000,
                         kresonance=0.92,
                         ibus=bus,
                         imasterbus=masterbus)

    # Automate the cutoff freq. of the filter
    filt.automatep('kcutoff', [0, 2000, dur*0.8, 500, dur, 6000], delay=start)

Offline

Both an Engine or a Session have an offline version, OfflineEngine and OfflineSession. In these cases the csound process is started to render to a soundfile, possibly faster than realtime.


Installation

https://csoundengine.readthedocs.io/en/latest/Installation.html

Dependencies

  • python >= 3.12

  • csound 7 >= 7.0 (csound 6 is supported but it is declared EOL)

pip install csoundengine

csoundengine also needs some csound plugins (https://github.com/csound-plugins/csound-plugins/releases), which are installed automatically if needed.


Usage in other projects

  • csoundengine is used as the audio engine in maelzel

Release files for csoundengine 2.24.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for csoundengine 2.24.0
File Size Uploaded
csoundengine-2.24.0.tar.gz 9.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for csoundengine 2.24.0
File Interpreter ABI Platform
csoundengine-2.24.0-py3-none-any.whl Python 3 none any Details

Total release size: 9.8 MB

Release files / csoundengine-2.24.0.tar.gz

Download URL csoundengine-2.24.0.tar.gz
Size 9.5 MB
Tags Source
SHA-256 checksum
How to use checksums
b5daf6d853bd34da6712906f85a687e4ad9c49902b49df1d5f90428e4b9b83a0
BLAKE2b-256 checksum
How to use checksums
58a5d0e49d63ecd29dc66a8c1a5f5ba3804ce86fc2df8a9f25f6c58ed46d52a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.4.29

Release files / csoundengine-2.24.0-py3-none-any.whl

Download URL csoundengine-2.24.0-py3-none-any.whl
Size 258.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c9b9c207eae54e17a64b151ca3c57e76742167762683d1d1d8aa2f353aa932df
BLAKE2b-256 checksum
How to use checksums
50799671b634b6f7256fa0863ae023770ce63b88772ba31439b7775f340efa92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.4.29

Release history Release notifications | RSS feed

2.26.0

2 release files

2.25.2

2 release files

2.25.1

2 release files

This release

2.24.0 This release

2 release files

2.23.1

1 release file

2.23.0

1 release file

2.22.7

2 release files

2.22.3

1 release file

2.22.2

1 release file

2.22.1

1 release file

2.22.0

1 release file

2.21.9

1 release file

2.21.8

2 release files

2.21.7

2 release files

2.21.2

2 release files

2.21.1

2 release files

2.21.0

2 release files

2.19.7

2 release files

2.19.3

2 release files

2.19.2

2 release files

2.19.0

2 release files

2.17.1

2 release files

2.15.1

2 release files

2.15.0

1 release file

2.14.0

1 release file

2.12.1

2 release files

2.12.0

2 release files

2.11.3

2 release files

2.11.0

2 release files

2.10.6

2 release files

2.10.4

1 release file

2.10.3

2 release files

2.10.2

2 release files

2.10.1

2 release files

2.10.0

2 release files

2.9.0

2 release files

2.8.5

2 release files

2.8.4

2 release files

2.8.3

2 release files

2.8.2

2 release files

2.8.1

1 release file

2.7.2

1 release file

2.7.1

1 release file

2.6.0

1 release file

2.5.5

1 release file

2.5.4

1 release file

2.5.3

1 release file

2.5.2

2 release files

2.5.1

1 release file

2.4.1

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.2

2 release files

2.2.0

2 release files

2.0.1

2 release files

1.26.1

2 release files

1.26.0

2 release files

1.25.0

2 release files

1.24.6

2 release files

1.24.2

2 release files

1.22.1

2 release files

1.22.0

2 release files

1.21.2

2 release files

1.21.1

2 release files

1.21.0

2 release files

1.20.2

2 release files

1.20.1

2 release files

1.20.0

2 release files

1.19.1

2 release files

1.18.0

1 release file

1.17.1

1 release file

1.17.0

1 release file

1.16.2

1 release file

1.16.1

1 release file

1.16.0

1 release file

1.15.1

1 release file

1.15.0

1 release file

1.14.1

1 release file

1.14.0

1 release file

1.13.4

1 release file

1.13.3

1 release file

1.13.2

1 release file

1.13.1

1 release file

1.13.0

1 release file

1.12.1

1 release file

1.12.0

1 release file

1.11.0

1 release file

1.10.1

1 release file

1.10.0

1 release file

1.9.1

1 release file

1.9.0

1 release file

1.8.4

1 release file

1.8.3

1 release file

1.8.2

1 release file

1.8.1

1 release file

1.8.0

1 release file

1.7.4

1 release file

1.7.3

1 release file

1.7.2

1 release file

1.7.1

1 release file

1.6.4

1 release file

1.6.3

1 release file

1.6.2

1 release file

1.6.1

1 release file

1.6.0

1 release file

1.5.6

1 release file

1.5.5

1 release file

1.5.4

1 release file

1.5.3

1 release file

1.5.2

1 release file

1.5.1

1 release file

1.5.0

1 release file

1.4.4

1 release file

1.4.3

1 release file

1.4.2

1 release file

1.4.1

1 release file

1.4.0

1 release file

1.3.3

1 release file

1.3.2

1 release file

1.3.1

1 release file

1.3.0

1 release file

1.2.0

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.2.0

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page