SignalFlow is a sound synthesis framework designed for clear and concise expression of complex musical ideas. It has an extensive Python API, for fluid audio experimentation in iPython/Jupyter, with its core written in portable, hardware-accelerated C++11.
SignalFlow is in beta status. Interfaces may be subject to change.
from signalflow import *
#--------------------------------------------------------------------------------
# An AudioGraph is made up of a network of interconnected Nodes, which generate
# and process audio.
#--------------------------------------------------------------------------------
graph = AudioGraph()
#--------------------------------------------------------------------------------
# Passing an array of frequencies creates a stereo output.
#--------------------------------------------------------------------------------
sine = SineOscillator([440, 880])
#--------------------------------------------------------------------------------
# Simple attack/sustain/release envelope with linear curves.
#--------------------------------------------------------------------------------
env = ASREnvelope(0.01, 0.1, 0.5)
#--------------------------------------------------------------------------------
# Use standard arithmetic operations to combine signals. When a multi-channel
# signal is multiplied by a mono signal, the mono signal is auto-upmixed.
#--------------------------------------------------------------------------------
output = sine * env
#--------------------------------------------------------------------------------
# Connect the output to the graph, and begin playback.
#--------------------------------------------------------------------------------
output.play()
graph.wait()
SignalFlow requires Python 3.8 or above, and supports macOS, Linux (x86_64), Raspberry Pi, and Windows (64-bit).
In a nutshell, SignalFlow can be installed with pip: pip3 install signalflow
.
For a complete walkthrough on setting up your system with Python and SignalFlow, see Installing SignalFlow.
Several example scripts are provided in examples.
To download the examples
folder:
import signalflow_examples
signalflow_examples.download_examples()
In-depth documentation, including a reference guide to each of the Node classes, can be found at signalflow.dev.
The following Node classes are currently included with the base distribution:
Thanks to the following contributors:
- Greg White (@gregwht): Examples, documentation and testing
- Arthur Carabott (@acarabott), Tim Murray-Browne (@timmb): Windows support
- Dan Stowell (@danstowell): Build improvements
- Marc Fargas (@telenieko): Generous donation of the
signalflow
pypi namespace - Ed Gillett: Generous donation of Linux build machine
- Sid Gudka: Generous donation of Windows build machine
Use of the SignalFlow library with a Python interpreter, script or notebook is licensed under the free and permissive MIT License.
Use of SignalFlow or its components outside of a Python environment (for example, embedded within a binary object) is subject to a separate agreement. Please contact the author to discuss.