Date: November 5th, 2021
- fluid.waveform~ is a new JSUI abstraction that allows you to draw and overlay the contents of audio, feature curves and segmentation from buffers in a visual display.
- FluidWaveform is the SuperCollider class that mirrors the Max JSUI abstraction.
- SuperCollider has a a new class, FluidPlotter, that allows you to plot points in a two-dimensional canvas.
- Pure Data now has an abstraction that mirrors the functionality
fluid.plotter
.
fluid.plotter
has a modified interface compared to its original release in beta3. It is worth checking the help file for these changes if you use the object as they are subtle but breaking. Namely, there are new ways for managing the properties of individual points such as their colour and size. (flucoma/flucoma-max#69)fluid.plotter
will deterministically colour points when the number of clusters exceeds the number of possible colours in a palette. (flucoma/flucoma-max#72)
- Calling
load
on a dataset with no arguments no longer crashes Max. (flucoma/flucoma-max#61) - Unnamed objects that rely on
libmanipulation
will now generate unique names so that all unnamed objects no longer talk to each other across a patch. This means that unnamed objects will behave the same as they did prior to the addition of named objects. (flucoma/flucoma-max#57) - Stricter ordering for access to
mDone
in the NRT Wrapper. flucoma/flucoma-sc#30
- Copy the
jsui
andjs
folder when building the Max package.
Date: Oct 25th, 2021
- PureData has parity with other CCE's except for:
load
anddump
methods for DataSet and LabelSet (workaround in place)- Limited help-files. These will be updated A.S.A.P and posted as they are updated.
- Limited testing of the new objects, accordingly.
- New Objects
- FluidGrid: coerce data in a FluidDataSet into a two-dimensional grid
- FluidStats: compute real-time statistics (mean and stddev) on data streams
- MAX: FluidPlotter: Rapidly plot two-dimensional datasets
- MAX+PD
fluid.buf2list
andfluid.list2buf
are now compiled objects. Be aware of their new attributes in Max - SC: FluidBufToKr and FluidKrToBuf pseudo-Ugens help with the dataset to descriptor to dataset workflow
- New Sounds
- trombone long tones, and oboe multiphonics, now included.
- FluidMFCC has a new attribute: "startCoef" which modifies which coefficients are returned by the algorithm. A common use case is to discard the first coefficient.
- MAX+PD: All data objects can be named to share persistent state. For example,
fluid.kdtree~ my-tree
in Max can be used everywhere throughout a patch to reference the same k-d tree namedmy-tree
.
- Improved performance with FluidAmpGate
- Crashes caused by (tapin - tapout == 0) on FluidMLP
- Crashes caused by when loading MLP models from JSON
- FluidLoudness no longer spikes to the maximum on digital silence
- Many other fixes, see the
git
log for details. - BREAKING: BufSelectEvery's method
channelhop
is nowchanhop
to be consistent
- Compilation on Arch Linux is now made possible again by fixing linking against the cutting edge of Boost.
- Building no longer uses AVX instructions by default to allow for an easier experience compiling for M1 Mac and ARM processors.
- Max compilation can now also uses the 8.2 SDK
===
date: June 2nd, 2021
-
New object: (buf)chroma for pitch class histograms
-
New overview of all objects
-
Log frequency and power magnitude options in SpectralShape
-
Log output option to melbands
-
Change of MFCC outs
-
change of unit of rolloff and new parameter to set the value (instead of fixed to 95%)
-
Some protection against thread conflicts in the dataset objects
-
Pitch new default when no pitch detected (0 Hz or -999midi)
-
Fixed Cosine distances in Onset and MDS
-
Fix in PCA for size=dimcount
-
Max: basic hints for inlets and outlets
Windows (Max + SC): Pitch's Yin algo yields a few error frames at its start, but not every time. This also affects Novelty by Pitch. We're chasing.
Linux (SC): SpectralShape has infrequent random outputs. We're chasing that one too.
Windows (Max): bufthreaddemo is not working well. The real threading is working but the explanation object is not.
Linux (SC): example 13 (massive parallelisation) is not working.
===
April 2021
- BufSTFT: Run a STFT or ISTFT on a buffer
- BufSelect and BufSelectEvery: cherry picking from Buffers
- Descriptors objects: Now have adjustable padding (none, window / 2, window - hop)
- DataSet: one step conversion to / from Buffer + access to IDs as LabelSet
- KMeans: Easy access to means and distances; incremental fitting
- PCA: allow transformation to same dimensions as input
- DataSet: new setPoint message for updating extant points, or creating new point if needed
- Slicers: Improved latency calculations and accuracy of Buffer versions
- BufFlatten: Now handles Buffer sub-ranges
- BufScale: Add clipping option
- BufNMFCross: Improve sound, add progress update and continuity control
- MLP: handle inconsistent dimensions when incremental fitting
- LabelSet: Fix JSON
- MLP: Fix early stopping
- Standardization + Normalization: Fix divide by zero
- MLP: Fix concurrency issue when fitting and transforming on different threads
- Pitch: Avoid negative confidence values
- FluidDataSetWr: New interface to use DataSet::setPoint (breaking change)
- KMeans: documentation
- BufStats: documentation
- Argument passing in .kr for some objects
- Build settings on Catalina
- Parameter passing on initialisation for some objects
- Some problems when using internal server
- Some inefficiencies with UGens
- FluidBufThreadDemo can be very slow on Windows (Max and SC)
- SC: Behaviour of FreeSelfWhenDone with FluidBuf* *kr objects is unpredictable on Linux
- KMeans help: new examples
- Improved indexing of reference documentation, especially on Max 7
- Explanation of FFT settings' impact in fluid.audiotransport~ help
- UMAP helpfile error
- RobustScale helpfile error
- Build settings on Catalina
- Cross-referencing between dimension reduction documentation
===
January 20 2021
- Compilation for Windows and Linux
- Realtime memory leak in Supercollider
- Use of SC .kr classes in SynthDefs
- NMFMorph window-related modulation artifacts
===
December 22 2020
- KDTree is much faster
- AudioTransport is more accurate
- new UMAP dim redux
- new RobustScaler
- Max: native support of dictionaries (removing the need for dict.(de)serialise~)
- Max: behaviour of read and write are like native objects (brings menu if no path provided)
- SC: a new sync dance
- SC: no more name to DataSet and LabelSet
===
September 24 2020
- BufThresh
- BufScale
- weights and outliersCutoff to bufstats
- transformjoin to datasetquery
- radius limit to kdtree
- 10-weights in stats
- 10a-outliers in stats
- 11-joining and weighing datasets (advanced!)
- large dictionary dumps are still problematic in Max
- negative confidence in pitch is still there (will be noticed more with the new examples)
===
August 6 2020
- Max: working autoencoder as dataredux and interpolation up
- Max: tutorial on simple regression feature comparison
- SC: working autoencoder as dataredux (the other part will come soon here)
- outputLayer is now tapOut. Its numbering is now different: 0 counting from the input layer, so 1 is the first hidden layer and -1 is the default (the last, like all our interface).
- it has a new friend, tapIn, which allows you to feed the data for predict and predictpoint in the middle somewhere. 0 is the input, and 1 is the first hidden layer
- now have an ‘inverse’ parameters for transform and transformPoint to allow query from the transformed space to the original.
Now returns/passes the variance, aka the fidelity of the new representation for a given number of dimensions.
Most TB1 objects have a blocking mode in KR which allow to keep them on the main buffer thread of the server (faster for small jobs avoiding large memory copying)
- all json load/save/states bugs/oddities reported
- Max: cluttering when buffer resizing
- bufnmf parameter check order
- general buf resize sanity check
- Max: buf resize of dataset is done just in low priority thread (faking mode 2 otherwise)
- SC: most dataset objects in KR are much more efficient
- SC: kr bus assignation
Should mostly be edge cases. Feel free to test against your reports and update the issues.
===
July 17 2020
===
June 20 2020
Most of your code will break but this is for the best. To make it short, read the help files and example code. They rock.
- we can now populate dataset 3 ways: via Dictionaries, via single buffer triggered from language (Routine, the old way, but faster) and all on the server-side (via Done.kr and triggers). And it is mixed and matched too!
- added utilities to build corpus change their format
- all help files have examples
- the learning examples are updated too
- unified dataset builder helpers format
- helpfiles have had a lot of typos/loading issues now sorted
- super mega bug in TB1 that nobody found before because it was so edge-case… now sorted 😉
## All
- 3 new sounds as an example (feel free to let us know what is missing, and who knows, you might even want to contribute)
- [breaking change] human-readable JSON
===
May 21 2020
## A few notes:
Keep your version of TB1 RC1. The TB2 download has everything, but is from another (much more daring) branch of development. We should have fixed all the bugs but we are not certain it is gig ready!
The many, many interface break should moan in your CCE window. The most important one is that datasets do not need a fixed size as argument, so most arguments have disappeared from objects. This is a lot more flexible as you will discover.
As requested, we have commented the tutorials in Max - the SC people should read them too (they will be translated soon) as it is simple Max yet introduce interesting database concepts with links to scikitlearn documentation.
Helpfiles - most of them are great, some ok, a few stubs but in those cases the learning examples are there to help
so many bugs fixed! Gazillions!
dimensionality reduction algorithms (PCA and MDS (with 7 metrics)
making subsets of dataset via datasetquery
new buffer manipulation utilities in Max
weighted KNN classification / regression
dumping datasets (dump is all as json, print is a useful sample as string)
the said weighted KNN classification / regression is now default
major interface unification inspired by scikit learn’s syntax to help tap into their learning resources
Redesign of language classes and server plugin so that Dataset, Labelset and the various models (KDTree etc) persist for the whole server lifetime, and don’t vanish on cmd+.
Dataset and Labelset will now throw an exception if you try and create two instances with the same name. However, all instances are cached, similar to Buffer, and there are now class level ‘at’ functions so you can retrieve an extant instance using its name.
Work on a much streamlined approach for populating and querying without so much back and forth between language and server is ongoing, and will be our main focus in the next alpha. Experimental approaches are currently at the promising-but-dangerous stage.
Max: we have not got autocompletion working for the new objects yet, nor documentation. (You will get some JS errors with the help files because of that, no worries)
===
date: December 5th, 2019
- Breaking change: all dataset interfaces are streamlined, please check the help-files if you have coded something personally. This is likely to change again as we tweak the workflow, so feedback welcome.
- All plenary example updated
- All PA’s naive learning patches included (still underdocumented)
- One-liner references in SC, imported as ‘ugly temp ref’ in Max for the interpolation and hybridisation objects (soon to be made clearer and less ugly)
- SC: simple examples ported
- bufnmfcross sound quality on large files could be less smeary
- bufnmfcross: selecting boundaries of both input buffers is not implemented yet
- SC workflow is slow because of many language-server sync (more streamlined workflow coming)
- audiotransport is still quantised by bin (phase interpolation is not trivial)
- audiotransport windows are restricted to fft sizes for now
- MAX: (buf)audiotransport and bufnmfcross should be their own standalone object soon
- MAX: bufnmfcross: progress bar does not work in blocking 0
- instacrash with fluid.dataset [getPoint] on an empty dataset
- Max: a few ref missing
- Max windows compile on its way soon
===
date: 31 March 2020
- BREAKING CHANGE: (buf)melbands how has normalised amplitude output option, on by default, which is independent of window and fft size
- (buf)NoveltySlice now has a minimum slice length parameter
- BREAKING CHANGE: (buf)sines now have new parameter names, and a new option to select which algorithm is used to track the sines. It also has improved sound quality and more refined thresholding.
- BREAKING CHANGE: (buf)AmpSlice is now 2 objects, (buf)AmpGate for the absolute, and (buf)AmpSlice for the relative
- (buf)AmpSlice and (buf)AmpGate has 0Hz highpassfreq to bypass the high pass filter.
- (Pd on Windows) now works ;-)
- BREAKING CHANGE: buf* processes now use the buffer's sampling rate (or the SR attribute for Pd)
- BREAKING CHANGE: (buf)ampslice now works much faster and consistently but thresholds and times will have to be tweaked
- (Pd) BREAKING CHANGE: all non-real-time (buf) objects have lost the tilde (~) in their name to be consistent with the language conventions.
- BREAKING CHANGE: (buf)OnsetSlice latency reporting (rt) and offset (buf) are now more accurate but will have changed for similar threshold
- BREAKING CHANGE: (buf)NoveltySlice latency reporting (rt) and offset (buf) are now more accurate but will have changed for similar threshold
- (buf)HPSS speed is improved
- Many edge cases were found and sorted.
- (Max) parameters updates now behave all the time in real-time
- (SC) BREAKING CHANGE: bufnmf's audio output destination buffer is renamed properly to resynth
- (Pd+CLI) documentation is now more accurate and consistently formatted
- cross reference between documents (see also)
- credits, references and acknowledgements are streamlined and consistent
- (Pd) better code for pinknoise abstraction
- (SC+Pd) most Max examples are now ported to the two other CCEs
- (SC) Gerard's GUI demos of algorithms are now available
- (Mac) Notarization is not implemented yet, since most CCEs are working on workarounds...
- (SC) Current implementation of non-realtime objects does not work with remote servers
- (Win - SC) calling cancel on threaded non-realtime processes crashes scsynth
===
date: 9 October 2019
- Max+Pd+SC: multithreading for all buf* objects! Make sure to read the tutorial on how to make the best use of various threading options you now have.
- Pd: stereo examples of fluid.buf* objects are done
- CLI: BREAKING CHANGE: new executable naming convention, because we want it to be fluid.
- CLI: CSV file output type
- Max: new audio player in some help files, adapted from C74's [demosound]
- pd (0.50.1+) launching of html ref from the helpfiles
- (Max) Reference pages are more complete (with all messages)
- (Max) Help patches better at making sound straight out of the box
- (CLI) Some audio file format were wrong polarity, now sorted
- (CLI) Mangled wav files on windows sorted
- all: many little tweaks here and there, more stable and consistent documentation
- (all) nb_of_slice is updated and more intelligent
- BufNoveltySlice might generate garbage strange values in the first frame
- AmpSlice is noisy when some parameters are changed
- (Max/PD) Successive use of some fluid.buf* objects with buffers of differing sample rates will stick at first sample rate received
===
date: 26 August 2019
- (Pd) all helpfiles now completed (except a few stereo examples of fluid.buf* objects - placeholders are empty [pd] patchers)
- (max) clickable overview
- (max) hpss help of maskingmode 1 and 2 sorted
- (max) bufpitch help is resizing
- strange communication between instances of bufnmf~ now zapped
- (pd) sample rate of buf* descriptor objects is now assumed (see helpfiles of bufPitch, bufMFCC, bufMelbands, bufSpectralShape)
- (pd) crash on some patches closings now should all be zapped
- (linux) strange names of Pd and Linux now sorted
- no more NaNs and crashes with edge cases and digital silence on NMF !
- HPSS does not crackle on param changes anymore
- BufOnsetSlice accepts all values for maxFFTSize without crashing
- (Pd) now gives a decent error when not providing enough 'channels' in 'multichannel' arrays instead of crashing
- BufNoveltySlice might generate garbage strange values in the first frame
- AmpSlice is noisy when some parameters are changed
===
date: 8 July 2019
- overview in SuperCollider, PureData and CLI
- Max help overall review (uneven in completion)
- support for 3 OSs (Mac, Windows, Linux) and 4 CCEs (Max, PureData, SuperCollider, CLI)
- HPSS still cracks when percussive filter is violently moved up
- NMF still creates NaNs in some edge cases, for instance when trying to factorise digital silence
- BufOnsetSlice with a maxFFTSize value of less than 1024 will crash
- BufNoveltySlice might generate garbage strange values in the first frame
- AmpSlice is noisy when some parameters are changed
- (Pd) help files are not finished yet!
- (Pd) not providing enough 'channels' in 'multichannel' arrays will crash
===
date: 15 June 2019
- NoveltySlice: a realtime version of the buffer based algo!
- AmpSeg/BufAmpSeg: an amplitude based segmentation powertool
- BREAKING CHANGE: (buf)onsetslice: "function" is now "metric"
- bufnoveltyslice: now segmenting on other features (mfccs, pitch, etc)
- BREAKING CHANGE: the threshold of bufnoveltyslice are now more stabble but will change some of the values.
- BREAKING CHANGE: (BufOnsetSlice, BufTransientSlice, BufNoveltySlice) the indices buffer does not return the query boundaries anymore, just valid detected onsets.
- (buf)pitch now has 'minFreq', 'maxFreq' and 'unit' (MIDI conversion)
- (SC) working 2-passes-folder-load-bufcompose
- (SC) proper MFCC example (thanks to Sam)
- (max: removed dependencies on descriptor~) (SC: new example) now using fluid.bufpectralshape and fluid.bufstats in all NMF
- many again!
- HPSS still cracks when percussive filter is violently move up
- NMF still creates NaNs in some edge cases
===
date: 4 June 2019
(SC + CLI): all the alpha-06 ones!
- BREAKING CHANGES: parameter/attributes/messages interface unification
- all nmf: "rank" is now "components", "numIters" is now "iterations"
- all slicers with "debounce" now use "minSliceLength"
- (buf)transient* "debounce" is now "clumpLength", and "minSlice" is "minSliceLength",
- all "winSize" are now "windowSize"
- "(max)numCoefs" is now "(max)numCoeffs"
- BREAKING CHANGE: spectralshape: now in Hertz
(MAX) bang gimme problem
===
date: 20 May 2019 - Max Mac only, plenary attendees focused
- BufStats: computes various statistics on time-series (as buffer channel) and their time derivative
- MelBands/BufMelBands: an approximation of human listening of pitch
- MFCC/BufMFCC: a sturdy spectral shape descriptor
- Loudness/BufLoudness: EBU-128 standard capable loudness descriptor
- (MAX) skeleton of reference to allow attributes and arguments autocompletion (with quirks) to help coding
(MAX) Just-In-Time NMF-based classifier
many, but not all :-)
plenty of quirks to iron out, but let us know if you find any you have not flagged before
===
date: 9 May 2019
- bufSpectralShape: the buffer version of the same object
- NMFFilter: running real-time nmf on seeding bases passed as a buffer
- Pitch/BufPitch: pitch and confidence descriptor (3 different algorithms)
- (MAX) reset message in buf* objects now reset to instantiation values rather than defaults
- (CLI) basic help is working (-h) to read the name of the parameters
- (SC) fftSize below 4 are now rejected as advertised
- (SC) fixed the error handling of all buf* objects - getting a useful message instead of errors on the error string
- MAX+CLI: buf* will be capped by maxfftsize default
- HPSS: percussive filter above 35 generate noises and glitches
- (buf)transient will hang the application if the order is set too high
- small noise when starting fft processes, sometimes (hard to reproduce)
===
date: 7/4/2019
- stereo toy examples to test and showcase behaviour of stereo buf* processes.
- stereo inputs to buf* slicing code were crashing the processes. now fixed.
- (MAX) NMF example folder updated
- MAX: autocompletion of @arguments and in/outlet assist strings are on their way, but not yet implemented.
- HPSS: percussive filter above 35 generate noises and glitches
===
date: 4/4/2019
- EXPERIMENTAL: early release of a basic command-line interface for the buffer objects. Check the readme for the (very small) set of indications of how it works.
- OnsetSlice and BufOnsetSlice: a collection of 10 different onset detection functions for real-time and buffers.
- SpectralShape: a real-time spectral descriptor object, giving the 7 most common spectral shape descriptors (centroid, spread, skewness, etc.)
- BREAKING CHANGE: ‘process' method is significantly different - it doesn't exist anymore in Max (bang)
- BREAKING CHANGE (MAX): all parameters are now attributes
- All parameters of are now modulatable - new maxima parameters to set the ranges of those modulations are instantiation only.
- BREAKING CHANGE (MAX): fft parameters are now a single list
- BREAKING CHANGE: all parameters have been renamed in a consistent, verbose way.
- Warning attribute for all objects (in max, window, in SC turn verbose up (see manual)): reports warnings when attribute values try to go out of range
- BREAKING CHANGE: bufcompose is now single-in, single-out and has clearer syntax (and state and reset in MAX)
- SC: Buf* have a completion action, as well as clean update of the modified buffers.
- both: 2-pass mass bufcompose for a folder, that makes it 60x faster in Max and 4x in SC (we're working on the latter)
- complete C++ code rewrite under the hood, therefore many, many fixes and some likely new bugs
- MAX: autocompletion of @arguments and in/outlet assist strings are on their way, but not yet implemented.
- HPSS: percussive filter above 35 generate noises and glitches
====
date: 31 Jan 2019
- (Max) init folder to create key shortcuts (shift-F to create a fluid. object)
- (Max) bufview now has bipolar mode (and a helpfile)
- transientslice and buftransientslice : now a minSlice argument to define the smallest slice available.
- bufcompose macros and folder iterations
- updating dict (mode 1) example in the helpfile
- commented nmf in 'real time'
- commented impact of FFT size on nmf
- Max’s buffer classes small bug which caused crash in specific instantiation order
- Max’s nmfmatch~ is now behaving with filter buffer changes
- (Max) bufview works for small buffers
- bufnmf is now returning updated filter buffers in mode 1
- transient and buftransient - quality improved significantly with debounce fix
===
date: November 17th, 2018
- new didactic example in bufnmf and nmfmatch
- NMFMatch bug fix - cleaner activations and more stable behaviour
- debounce in all transient-based code
===
date: November 5th, 2018
- NMFMatch: real-time matching against fixed dictionaries as templates.
- (Max Only): new GUI for multichannel buffer viewing (in NMFMatch~ helpfile)
- New parameter for NoveltySlice - a smoothing filter for the novelty curve
- Breaking change for all Buf* objects (Max Only) - no more support for multibuffer~ - please use multichannel buffers
- BufCompose help file: new example using MS and FIR
- all help files: many typos and bugs sorted
- NoveltySlice: the detection is now normalising
- BufCompose rewrite
- Transient, TransientSlice, BufTransient, BufTransientSlice - the debounce is not behaving as expected