All the code under the hood is redone, most interface is now readable, and there are 3 new objects and a command-line version. A few more examples too… I hope you enjoy!
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.
New Objects:
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.)
New Features:
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.
New Examples:
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)
Bug Fixes:
complete C++ code rewrite under the hood, therefore many, many fixes and some likely new bugs
Known Bugs Still Unfixed:
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
I’ll download this and have a play, but to clarify, this is the amplitude version or the spectral one, or both? (I noticed the spectral descriptors one is included too!)
spectral, real-time and buffer. super fast. try very small fft (128) and it works Like in the many, many examples. the amplitude one is in gen~ prototype, and python, so will be with us for alpha05 or 06 depending on the other objects too.
yes, Real-time only for now, but NRT in the pipeline for alpha05. With more goodies. but this should keep you busy a bit.
I made two bash scripts that you can add to your .bash_profile. These do batch processing using nmf or hpss functions.
The two functions would then be called through your terminal of choice (assuming you are using bash and not zsh or fish or something) as batch_nmf and batch_hpss.
batch_nmf takes three arguments.
1: Input Folder
2: Output Folder
3: Number of Ranks
The output of dog.wav would be dog-nmf.wav in your output folder.
batch_hpss takes two arguments
1: Input Folder
2: Output Folder
The output of cat.wav would be cat-h.wav and cat-p.wav in your output folder.
Code below. Enjoy!
### batch_hpss is passed two variables.
### Arg 1: Source Folder
### Arg 2: Output Folder
function batch_hpss () {
shopt -s nullglob
if [ -d "$2" ]; then
for src in $1/*;
do
file_name=$(basename "$src")
strip_ext=$(echo "$file_name" | cut -f 1 -d '.')
harm_sf="$2/$strip_ext-h.wav"
perc_sf="$2/$strip_ext-p.wav"
echo "Starting separation on $src"
hpss -source $src -harmonic $harm_sf -percussive $perc_sf
echo "$src has been separated!"
echo "Output at $2_filename_p/h.wav"
done
echo "Finished batch hpss processing"
else
echo "The output directory does not exist."
echo "I have made it for you!"
echo "You will need to re-run the command in your shell."
mkdir $2
fi
}
### batch_nmf is passed three variables.
### Arg 1: Source Folder
### Arg 2: Output Folder
### Arg 3: Number of NMF Ranks
function batch_nmf () {
shopt -s nullglob
if [ -d "$2" ]; then
for src in $1/*;
do
file_name=$(basename "$src")
strip_ext=$(echo "$file_name" | cut -f 1 -d '.') ## Remove extension
out="$2/$strip_ext-nmf.wav" ## Make name for output
## Process ##
echo "Starting NMF on $src"
nmf -source $src -rank $3 -resynth $out
echo "Completed NMF on $src"
echo "Output at $out"
done
echo "Finished batch nmf processing"
else
echo "The output directory does not exist."
echo "I have made it for you!"
echo "You will need to re-run the commannd in your shell."
mkdir $2
fi
}```