SignalFlow

December 3, 2025 ยท View on GitHub

pypi-version ci stability-beta

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.

Example

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()

Installation

SignalFlow requires Python 3.8 or above, and supports macOS, Linux (x86_64), Raspberry Pi (3+), 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.

Examples

Several example scripts are provided in examples.

To download the examples folder:

import signalflow_examples
signalflow_examples.download_examples()

Documentation

In-depth documentation, including a reference guide to each of the Node classes, can be found at signalflow.dev.

Node class library

The following Node classes are currently included with the base distribution:

CategoryClasses
AnalysisCrossCorrelate, NearestNeighbour, OnsetDetector, VampAnalysis, YinPitchTracker, ZeroCrossingRate
BufferBeatCutter, BufferLooper, BufferPlayer, BufferRecorder, FeedbackBufferReader, FeedbackBufferWriter, HistoryBufferWriter, SegmentPlayer
Buffer: GranulationSegmentedGranulator, Granulator
ControlMouseX, MouseY, MouseDown
EnvelopeAccumulator, ADSREnvelope, ASREnvelope, DetectSilence, Envelope, Line, RectangularEnvelope
FFTFFTBufferPlayer, FFTContinuousPhaseVocoder, FFTFindPeaks, FFTMagnitudePhaseArray, FFTNode, FFTOpNode, FFTPhaseVocoder, FFT, IFFT
Fft: FeaturesFFTSpectralCentroid, FFTSpectralFlatness, FFTSpectralFlux
Fft: ProcessorsFFTContrast, FFTConvolve, FFTCrossFade, FFTLFO, FFTLPF, FFTNoiseGate, FFTRandomPhase, FFTScaleMagnitudes, FFTTonality, FFTTransform
OperatorsAdd, AmplitudeToDecibels, DecibelsToAmplitude, Bus, ChannelArray, ChannelCrossfade, ChannelMixer, ChannelOffset, ChannelSelect, Equal, NotEqual, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, Modulo, Abs, If, Divide, FrequencyToMidiNote, MidiNoteToFrequency, Multiply, Pow, RoundToScale, Round, ScaleLinExp, ScaleLinLin, SelectInput, Subtract, Sum, TimeShift, Sin, Cos, Tan, Tanh
OscillatorsConstant, Impulse, LFO, SawLFO, SawOscillator, SineLFO, SineOscillator, SquareLFO, SquareOscillator, TriangleLFO, TriangleOscillator, Wavetable, Wavetable2D
PhysicalMaraca
ProcessorsClip, Fold, Smooth, WetDry, Wrap
Processors: DelaysAllpassDelay, CombDelay, OneTapDelay, Stutter
Processors: DistortionResample, SampleAndHold, Squiz, WaveShaper
Processors: DynamicsCompressor, Gate, Maximiser, RMS
Processors: FiltersBiquadFilter, DCFilter, EQ, MoogVCF, SVFilter
Processors: PanningAzimuthPanner, ChannelPanner, SpatialPanner, StereoBalance, StereoPanner, StereoWidth
Processors: ReverbFeedbackDelayNetwork
SequencingBlockCounter, ClockDivider, Counter, Euclidean, FlipFlop, ImpulseSequence, Index, Latch, Sequence, TriggerMult, TriggerRoundRobin
StochasticLogistic, PinkNoise, RandomBrownian, RandomChoice, RandomCoin, RandomExponentialDist, RandomExponential, RandomGaussian, RandomImpulseSequence, RandomImpulse, RandomUniform, StochasticNode, WhiteNoise

Contributors

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

Support

Thanks to the following supporters and sponsors:

License

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.