Ok, here’s the next (absolutely massive) update of SP-Tools (v0.9):
The changelog is a bit long for this one (still pasted below), but the broad strokes are a complete rework of the scope of the project such that it no longer assumes “drums” as the default audio input, so it is more broadly usable by all sorts of input. (It is still super optimized for drums and low-latency stuff, but if there’s a selectable option (e.g. for Sensory Percussion hardware), it is no longer the default setting). There’s also been a massive amount of work done to improve the ease of use and overall discoverability. The overview patch reflects this as you can browse by objects/categories, use cases, or just musical examples directly. Finally there are a bunch of new patches for audio processing and signal decomposition.
Changelog
v0.9 - Scope, Ease of Use, and Audio Processing
- BREAKING CHANGE - objects with “train” in the name (
sp.classtrain
,sp.clustertrain
,sp.setuptrain~
) have been renamed to be more consistent with other objects (sp.classcreate
,sp.clustercreate
,sp.setupcreate~
) - BREAKING CHANGE -
sensitivity
parameter in all onset-based objects has been fine-tuned to work across a wider range of instruments and materials so your previous settings may likely need adjusting - BREAKING CHANGE -
threshold
parameter renamed tofloor
in all onset-based objects (sp.onset~
,sp.onsetframe
,sp.descriptors~
,sp.melbands~
,sp.mfcc~
,sp.sines~
, etc…) - BREAKING CHANGE -
threshold
parameter renamed tosensitivity
insp.novelty~
keeping it inline with other onset detection objects macro controls (sp.onset~
,sp.spectralonset~
) - BREAKING CHANGE -
mode
parameter renamed totimestretchmode
in sample playback objects keeping to remove clash with the newmode
attribute - BREAKING CHANGE -
input
mode order and modes changed on all onset-based object (sp.onsetframe
,sp.descriptors~
,sp.melbands~
,sp.mfcc~
,sp.sines~
, etc…) - BREAKING CHANGE - clusters trained with
sp.clustertrain
now count from 1 instead of 0 and are returned as ints instead of a symbols (so a 1 instead of a “1”) - BREAKING CHANGE -
sp.classifierdisplay
@drum
attribute reworked to@defaultdisplay
- BREAKING CHANGE - fade in/out and curve parameters renamed in
sp.corpusplayer~
to be consistent with the newsp.sampler~
(attack
=in
,hold
=out
(and inverted),attackcurve
=incurve
,holdcurve
=outcurve
) - overview patch (
SP-Tools Overview.maxpat
) completely revamped with better discoverability and package navigation - added snippets for common use cases to SP-Tools package (accessible via the snippets side panel)
- restructured Max Package folders to make it easier to navigate and add additional corpora
- restructured github repo to separate versions (Max, pd), Max for Live devices, and additional corpora
- added class-combined versions of all descriptor analysis objects making it easier to get classification combined with descriptor analysis (
sp.classdescriptors~
,sp.classmfccs~
, etc…) - added
sp.controllermatch
to browse corpora using a single parameter - added
sp.controllerptich
to create pitch-quantized melodic phrases from a single parameter - added zero-latency convolution (
sp.convolver~
) which allows for reverb, amp sim, mic correction, and any other convolution-based audio processes - added convolution-based corpus matching via
sp.corpusconvolver~
which combines corpus matching and realtime convolution - added combined abstractions for common processes (
sp.corpusanalysis~
,sp.corpussampler~
) - substantially improved core concatenation algorithm
- added radius and neighbor selection in concat matching
- added pitch and loudness compensation to concat playback
- added
transpose
andpretranspose
to concat playback - added
sp.corpusclustermatch
for creating clusters from corpora, allowing for grouping of similar sounds within a corpus (e.g. kick, snare, hat, etc…) - added objects for shaping and processing descriptor lists (
sp.descriptorcurves
,sp.descriptorreplace
) - added an envelope follower with some quirky features (
sp.envelope~
) - added
sp.gridscale
for scaling and shifting XY-based controller inputs (combines well withsp.gridmatch
and the newsp.boppad
) - added pitch and time quantization with
sp.quantizepitch
andsp.quantizetime~
- added data and clock sequencers with
sp.sequenceclock~
andsp.sequencedata~
- added Schmitt filter for descriptor filtering for when you need hysterisis in the filtering (
sp.schmitt
) - added various audio processes for splitting and decomposing signals (
sp.scatter~
,sp.scramble~
,sp.shatter~
,sp.shattercreate~
,sp.sift~
,sp.smear
) - added spectral-difference onset detection (
sp.spectralonset~
) - added new kitchensink descriptor type, as a combination of descriptor/melband/MFCC buffers which comes in onset, real-time, and class-based variants (
sp.kitchensink~
,sp.kitchensinkrt~
,sp.classkitchensink~
) - added neural network classifier type to
sp.classtrain
,sp.clustertrain
, andsp.classmatch
for greatly improved speed and accuracy - added support for the BopPad controller (
sp.boppad
) - added input modes to all the physical modeling objects (
sp.karplus~
,sp.resonators~
,sp.shaker~
,sp.waveguidemesh~
) allowing for realtime actuation of the models, in addition to onset/trigger-based actuation - added ability to reverse and loop samples, and jump directly to sample position in
sp.corpusplayer~
- added
@mode
attribute tosp.onsetframe~
to switch between amplitude and spectral onset detection (also impacts all onset-based descriptors objects (sp.descriptors~
,sp.melbands~
,sp.mfcc~
,sp.sines~
, etc…)) - added ability to seed clusters in
sp.clustertrain
- added utility for subdividing a spaces of arbitrary size and steps (
sp.slicecurve
) - added utility for time-alining trigger/gates with descriptor output (
sp.triggeralign~
) - added utility for increasing the length of triggers and gates (
sp.triggerlength~
) - added AHR-style envelope with
sp.triggershape~
- improved time-alignment for trigger/gate outputs of descriptors objects (
sp.descriptors~
,sp.melbands~
,sp.mfcc~
,sp.sines~
, etc…) - reworked
sp.classifierdisplay
to automatically load class names from all class matching objects - reworked
sp.descriptordisplay
to automatically display the correct type of descriptor - added
dump
output message to all class-based objects (sp.classmatch
,sp.classdescriptors
, etc…) - added mic correction (via a new input mode attribute
@input 5
) to all onset-based descriptor analysis objects for better descriptor results when using only an SP sensor - added
@buffer
attribute tosp.corpusplayer~
to simplify non corpus-based sample playback - added
@history
attributes to all realtime descriptor objects (sp.descriptorsrt~
,sp.melbandsrt~
,sp.mfccrt~
,sp.sinesrt~
) to smooth descriptors - added
@input
modes tosp.onset~
allowing for optional filters optimized for different input types - added
onthreshold
andoffthreshold
tosp.novelty~
given you finer grain control of thresholding - improved (and fixed) melband transposition in
sp.datatranspose
- added optional arguments to all corpus matching abstractions to load corpus and setups automatically (e.g.
sp.corpusmatch corpus_china setup_snare
will automatically load the China Cymbal corpus and load/enable the snare setup) - added ability to load default files to all
.json
loading objects (e.g.sp.resonators~ resonators_bell
) - added header to every
.json
file to differentiate them (you should reanalyze all your corpora, classes, and setups) - when loading a setup into any corpus matching abstraction (
sp.corpusmatch
,sp.corpusconvolver~
,sp.corpussampler~
) it will automatically enable that setup - improved default starting values in
sp.controllers
so it gives useful results while it autocalibrates - added ability to trigger
sp.triggerbounce~
andsp.triggercloud~
with bangs as well as trigger/gates - added ability to trigger synthesis objects (
sp.lpg~
,sp.karplus~
,sp.resonators~
,sp.waveguidemesh~
) with bangs as well as triggers/gates - added 8 more abstractions to the puredata version
- changed FFT settings for
medium
andall
sizes for corpus and setup analysis to have better pitch accuracy in the larger time scales. You should re-analyze all your own corpora and setups. - you can now load mp3 files into
sp.corpuscreate
- fixed M4L device loading bug(s)
- abstractions that only function as part of an existing abstraction (
sp.lpgcore~
,sp.folderloop
, etc…) have had theirsp.
prefix replaced withwidget
and have had their help/reference pages removed