v0.5.0 (2024-10-28)
- Replaced the
libsoundio
audio abstraction layer withminiaudio
, heralding first-class Windows and Linux support. - Retired historical
AudioOut
classes for different operating systems, and refactored querying of inputs/outputs/backends AudioGraphConfig
: Addedauto_record
flag, to automatically record all output in timestamped audio files- Added support for instantiating
AudioGraph
andAudioGraphConfig
with the path of a config file - Modified
AudioGraph
to become a singleton, and throw a warning instead of an exception upon attempting to create a secondAudioGraph
- Added Python bindings and added unit tests for
SampleRingBuffer
andSampleRingQueue
classes - Nodes:
- Added
Bus
node, to act as a fixed-channel summer with variable inputs - Added
Maraca
node, a simple physically-inspired model of a shaker, after Cook (1997) - Added
ChannelOffset
node to offset a node's output byN
channels, andnode.play(output_channel=N)
syntax - Added
SelectInput
node, to pass the output of an input whose index can be modulated at audio rate - Added
HistoryBufferWriter
node to capture a rolling signal history window, useful for oscilloscope UI display - Added
Accumulator
node, to accumulate energy with some leaky decay coefficient, and accompanyingcalculate_decay_coefficient
function - Added abstract
VariableInputNode
class - Added
stutter_probability
andstutter_advance_time
inputs toStutter
- Added
v0.4.10 (2024-08-13)
- Added
TriggerRoundRobin
node, to sequentially distribute triggers across outputs - Added
WavetableBuffer
class, with some initial wavetables that can be constructed by name (sine
,triangle
,square
,saw
) - Added
plot_buffer()
tosignalflow_visualisation
- Allow exceptions to be safely raised in the audio I/O thread without appearing as a Python kernel crash
Granulator
: Add trigger() support- Fixed bug in
ASREnvelope
in which per-channel shape parameters were not honoured correctly - Fixed broken stubs installer
v0.4.9 (2024-08-05)
- Added
FFTBuffer
andFFTBufferPlayer
node, and other new FFT processor nodes:FFTCrossFade
,FFTLFO
,FFTScaleMagnitudes
- Added
TriggerMult
node to distribute a trigger to multiple outputs - Migrated build system to use
pyproject.toml
- Improved memory management and handling of
SIGNALFLOW_NODE_INITIAL_OUTPUT_CHANNELS
SpatialPanner
: Added beamforming support- Added support for >24-channel output devices on macOS (via custom libsoundio build)
- Added troubleshooting docs
v0.4.7 (2024-02-23)
- Optimized performance of
SineOscillator
,Sum
andChannelMixer
on macOS with vDSP SIMD optimisations - Added support for
int16
audio devices - Added
num_channels
param toAudioIn
- Reduced
Node
memory usage by allocating buffers more economically - Fixed bug when recreating AudioGraph after destroy()
- Fixed
signalflow
command-line installer by switching to setuptoolsentry_points
v0.4.6 (2024-02-16)
- Added
NearestNeighbours
,KDTree
andsignalflow_analysis
package (includingAudioFeatureBuffer
) for audio feature analysis, latent space navigation and playback - Added
signalflow_visualisation
package for visualising patch structures with NetworkX - New nodes:
FFTContrast
,FFTTransform
,FFTMagnitudePhaseArray
,FFTRandomPhase
,TimeShift
- Many documentation additions and Node examples (thanks to @gregwht)
v0.4.3 (2023-11-12)
- Added Windows build support for Python
- Added
DCFilter
node
v0.4.2 (2023-11-10)
- Added initial inline documentation for each Node class
- Added auto-generated method stubs for IDE inline docs and type hints
- Added initial example notebooks
- Added
signalflow_examples
downloader
v0.4.1 (2023-11-05)
- New node:
ChannelCrossfade
RectangularEnvelope
: Rename fromEnvelopeRect
for consistency with otherEnvelope
classesNode
: Addis_playing
propertyNode
: Refactorplay
/stop
error handling to useNodeAlreadyPlayingException
,NodeNotPlayingException
,CPUUsageAboveLimitException
BufferPlayer
: Addposition
propertyBuffer
: Addfilename
read-only propertySawLFO
,SawOscillator
: Implement phase reset withtrigger
Granulator
: Add support for negative playback rates, stereo inputsignalflow_midi
: Add support forMIDIManager
per-channel binding- Add wheel for Python 3.12
v0.4.0 (2023-05-28)
- Implemented complete Python API
- Migrated to CMake for build
- Migrated to GitHub Actions for CI
- Introduced initial Windows support
- Naming overhaul and standardisation
- Added
AudioGraphConfig
, and support for loading config from file and environmental variables - Added multiple
Node
subclasses for spatial panning - Added
signalflow
command-line utility - Added
signalflow_midi
helper package
v0.3.1 (2018-12-31)
- Node: Ability to stop playback and remove from graph #46
- Unify code indentation to use spaces throughout #76
- Add support for initializing NodeRef/Multiplex with std::vector #75
- Monitor: Add support for multichannel monitoring #74
v0.3.0 (2018-07-15)
- BufferRef #66
- Example: audio-write-example #59
- Buffer: Save to wav file #58
- Support for named triggers #56
- Trigger-based random number generation #49
- Non-realtime processing #16
- Fixed: Multiplex cannot be serialised #55
- Node: MouseX/MouseY #65
- Integrate with Travis CI #54
- Generate visualisation of synthesis graph structure #53
- Naming review #44
v0.2.0 (2016-04-17)
- SynthRegistry #51
- Node: Support for constant property values #39
- Multiplex: Support for std::initializer_list #37
- Buffer: Fill buffer from a lambda function #35
- Buffer: Waveshaper buffers #33
- Node: Waveshaper #27
- JSON parsing to load serialised synth graphs #17
- SynthDef: Support for named inputs and outputs #4
- Support for non-44k samplerates #2
- Buffer recording #1
- Fixed: Add node-constant operations where node is the RHS operand #30
- Fixed: Prevent a node from being stepped multiple times per tick #29
- Fixed: Rename channels_out → num_output_channels for consistency #23
- Further examples #48
- Node: MoogVCF #43
- Node: Linear scale #41
- Node: Triangle #26
- Node: Saw #25
- Update basic nodes to handle multi-channel inputs #24
- Node: EQ #19
v0.1.1 (2016-03-23)
v0.0.1 (2016-01-01)
- Basic framework with
Node
andGraph
classes - Automatic reference counting with
NodeRef
as a subclass ofstd::shared_ptr
- Synthesis nodes:
Sine
,Square
,Granulator
,Wavetable
- Control nodes:
Tick
,Line
,ASR
- Effects nodes:
Delay
,Gate
,Pan
,Resample
,Width
- Chance nodes:
RandomImpulse
,Noise
Buffer
object to store fixed buffers of sample dataRingBuffer
for circular buffering- Global
Registry
to store and instantiateNode
objects by identifier - Fast Fourier Transform (
FFT
) and inverse FFT (IFFT
) nodes with Accelerate optimisation - Operator overloading for node addition, multiplication, addition and subtraction
- Node output monitoring
- Cross-platform I/O with
libsoundio
- Audio file I/O with
libsndfile
- waf-based build system
- Raspberry Pi support