Python bindings for Csound (fork of ctcsound)
These bindings can be used with any version of csound >= 6.18. Csound 7 is explicitely supported and is the recommended version.
Csound does not need to be installed manually: when it cannot be found,
libcsound installs csound 7 automatically on import, on Linux, macOS and
Windows (unless LIBCSOUND_INSTALL is set to 0 or false). On macOS the
install runs under sudo, so it needs either an interactive terminal or
passwordless sudo (as on CI runners); on Windows it is machine-wide and needs
Administrator rights, so an interactive or already-elevated session is required.
To install csound manually instead, use the official installers. See https://github.com/csound/csound/releases
In Linux / macOS:
curl -fsSL https://csound-plugins.github.io/getcsound.sh | bash
In Windows:
irm https://csound-plugins.github.io/getcsound.ps1 | iex
This installs the latest version of csound 7.
pip install libcsound
The csound shared library is located and loaded when libcsound is imported,
so these variables must be set before importing it.
LIBCSOUNDPATH: absolute path to the csound shared library to load. When set, no other search is performed. If unset, the library is searched in the system path.LIBCSOUND_INSTALL: set to0orfalseto disable the automatic installation of csound when it cannot be found.
import libcsound
csound = libcsound.Csound()
csound.setOption('-odac')
csound.compileOrc(r'''
sr = 44100 ; Modify to fit your system
ksmps = 64
nchnls = 2
0dbfs = 1
instr 1
kchan init -1
kchan = (kchan + metro:k(1)) % nchnls
if changed:k(kchan) == 1 then
println "Channel: %d", kchan + 1
endif
asig = pinker() * 0.2
outch kchan + 1, asig
endin
''')
csound.start()
thread = csound.performanceThread()
thread.play()
# Schedule an instance of instr 1 for 10 seconds
thread.scoreEvent(0, "i", [1, 0, 10])
input("Press any key to stop...\n")
thread.stop()import libcsound
csound = libcsound.Csound()
csound.setOption('-ooutfile.wav')
csound.compileOrc(r'''
sr = 44100
ksmps = 64
nchnls = 2
0dbfs = 1
instr 1
kchan init -1
kchan = (kchan + metro:k(1)) % nchnls
if changed:k(kchan) == 1 then
println "Channel: %d", kchan + 1
endif
asig = pinker() * 0.2
outch kchan + 1, asig
endin
''')
csound.start()
csound.scoreEvent("i", [1, 0, 10])
csound.setEndMarker(10)
# Perform until the end of the score
while not csound.performKsmps():
pass