SP-Tools are a set of machine learning tools that are optimized for low latency and real-time performance. The tools can be used with any audio input but include optimizations for Sensory Percussion sensors and ordinary drum triggers.
SP-Tools includes low latency onset detection, onset-based and real-time descriptor analysis, classification and clustering, corpus analysis and querying, concatenative synthesis, neural network predictive regression, and a slew of other abstractions that are optimized for low latency applications.
SP-Tools is built around the FluCoMa Toolkit and requires v1.0.6+ to be installed for this package to work.
You can join the SP-Tools Discord server to keep up on future updates/news as well as make suggestions, share corpora and musical examples etc...
https://discord.gg/Vy2zuKQkqN
Max 8.3 or higher or Live/M4L (Mac/Windows).
FluCoMa v1.0.6 or higher - Download Link
All abstractions work in 64-bit and M1/Universal Binary 2.
SP-Tools Teaser Video - Performance and Musical Examples
SP-Tools (alpha v0.1) - Initial Overview
SP-Tools (alpha v0.2) - Controllers and Setups
SP-Tools (alpha v0.3) - Filtering, Playback, and Realtime Analysis
SP-Tools (alpha v0.4) - Concatenation and Realtime Filtering
SP-Tools (alpha v0.5) - Grid-Based Matching, Erae Touch, and Max for Live
SP-Tools (alpha v0.6) - Max for Live Walkthrough
SP-Tools (alpha v0.7) - Ramps, Data Processing, Novelty, and Timestretching
SP-Tools (alpha v0.8) - Sines, Synthesis/Modelling, and Documentation
SP-Tools (alpha v0.9) - Scope, Ease of Use, and Audio Processing
sp.classtrain
, sp.clustertrain
, sp.setuptrain~
) have been renamed to be more consistent with other objects (sp.classcreate
, sp.clustercreate
, sp.setupcreate~
)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 adjustingthreshold
parameter renamed to floor
in all onset-based objects (sp.onset~
, sp.onsetframe
, sp.descriptors~
, sp.melbands~
, sp.mfcc~
, sp.sines~
, etc...)threshold
parameter renamed to sensitivity
in sp.novelty~
keeping it inline with other onset detection objects macro controls (sp.onset~
, sp.spectralonset~
)mode
parameter renamed to timestretchmode
in sample playback objects keeping to remove clash with the new mode
attributeinput
mode order and modes changed on all onset-based object (sp.onsetframe
, sp.descriptors~
, sp.melbands~
, sp.mfcc~
, sp.sines~
, etc...)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")sp.classifierdisplay
@drum
attribute reworked to @defaultdisplay
sp.corpusplayer~
to be consistent with the new sp.sampler~
(attack
=in
, hold
=out
(and inverted), attackcurve
=incurve
, holdcurve
=outcurve
)SP-Tools Overview.maxpat
) completely revamped with better discoverability and package navigationsp.classdescriptors~
, sp.classmfccs~
, etc...)sp.controllermatch
to browse corpora using a single parametersp.controllerptich
to create pitch-quantized melodic phrases from a single parametersp.convolver~
) which allows for reverb, amp sim, mic correction, and any other convolution-based audio processessp.corpusconvolver~
which combines corpus matching and realtime convolutionsp.corpusanalysis~
, sp.corpussampler~
)transpose
and pretranspose
to concat playbacksp.corpusclustermatch
for creating clusters from corpora, allowing for grouping of similar sounds within a corpus (e.g. kick, snare, hat, etc...)sp.descriptorcurves
, sp.descriptorreplace
)sp.envelope~
)sp.gridscale
for scaling and shifting XY-based controller inputs (combines well with sp.gridmatch
and the new sp.boppad
)sp.quantizepitch
and sp.quantizetime~
sp.sequenceclock~
and sp.sequencedata~
sp.schmitt
)sp.scatter~
, sp.scramble~
, sp.shatter~
, sp.shattercreate~
, sp.sift~
, sp.smear
)sp.spectralonset~
)sp.kitchensink~
, sp.kitchensinkrt~
, sp.classkitchensink~
)sp.classtrain
, sp.clustertrain
, and sp.classmatch
for greatly improved speed and accuracysp.boppad
)sp.karplus~
, sp.resonators~
, sp.shaker~
, sp.waveguidemesh~
) allowing for realtime actuation of the models, in addition to onset/trigger-based actuationsp.corpusplayer~
@mode
attribute to sp.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...))sp.clustertrain
sp.slicecurve
)sp.triggeralign~
)sp.triggerlength~
)sp.triggershape~
sp.descriptors~
, sp.melbands~
, sp.mfcc~
, sp.sines~
, etc...)sp.classifierdisplay
to automatically load class names from all class matching objectssp.descriptordisplay
to automatically display the correct type of descriptordump
output message to all class-based objects (sp.classmatch
, sp.classdescriptors
, etc...)@input 5
) to all onset-based descriptor analysis objects for better descriptor results when using only an SP sensor@buffer
attribute to sp.corpusplayer~
to simplify non corpus-based sample playback@history
attributes to all realtime descriptor objects (sp.descriptorsrt~
, sp.melbandsrt~
, sp.mfccrt~
, sp.sinesrt~
) to smooth descriptors@input
modes to sp.onset~
allowing for optional filters optimized for different input typesonthreshold
and offthreshold
to sp.novelty~
given you finer grain control of thresholdingsp.datatranspose
sp.corpusmatch corpus_china setup_snare
will automatically load the China Cymbal corpus and load/enable the snare setup).json
loading objects (e.g. sp.resonators~ resonators_bell
).json
file to differentiate them (you should reanalyze all your corpora, classes, and setups)sp.corpusmatch
, sp.corpusconvolver~
, sp.corpussampler~
) it will automatically enable that setupsp.controllers
so it gives useful results while it autocalibratessp.triggerbounce~
and sp.triggercloud~
with bangs as well as trigger/gatessp.lpg~
, sp.karplus~
, sp.resonators~
, sp.waveguidemesh~
) with bangs as well as triggers/gatesmedium
and all
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.sp.corpuscreate
sp.lpgcore~
, sp.folderloop
, etc...) have had their sp.
prefix replaced with widget
and have had their help/reference pages removedsp.karplus~
, sp.resonators~
, sp.resonaroscreate~
, sp.shaker~
, sp.sinusoidplayer~
, sp.sinusoids~
, sp.waveguidemesh~
, sp.lpg~
, sp.lpgcore~
) Resonators
, Sinusoids
, Waveguide Mesh
) sp.sineframe
, sp.sines~
, sp.sinesrt~
) (you should reanalyze all your corpora) sp.probability~
, sp.triggerbounce~
, sp.triggercloud~
, sp.triggerframe~
) sp.corpusplayer~
(via startabsolute
and lengthabsolute
messages) sp.databending
sp.speed
sp.datalooper~
puredata
folder)sp.ramp
, sp.ramp~
)sp.databending
, sp.datadelay
, sp.datagranular
, sp.datalooper~
, sp.datatranspose
)sp.novelty~
)sp.corpusplayer~
and the Corpus Match
M4L deviceConcat Match
, Controllers
, Corpus Match
, Descriptors
, Speed
) sp.gridmatch
abstraction for generic controller-based navigation of corporasp.eraetouch
)sp.concatanalysis~
, sp.concatcreate
, sp.concatmatch
, sp.concatplayer~
, sp.concatsynth~
)sp.filter
)and
and or
joiners)sp.corpusmatch
via filter
messages) sp.corpusplayer~
sp.realtimeframe~
, sp.descriptorsrt~
, sp.melbandsrt~
, sp.mfccrt~
) corpus_plumbutter.json
) sp.corpuslist
abstraction for visualizing and playing samples in a corpus in list form sp.corpussimpleplayer~
, sp.corpusloudnessplayer~
, sp.corpusmelbandplayer~
)sp.controllers
, sp.speed
, sp.setupanalysis
, sp.setuptrain~
) corpus_voice.json
) @roundrobin
mode to sp.corpusmatch