diff --git a/release-packaging/HelpSource/Classes/FluidBufNNDSVD.schelp b/release-packaging/HelpSource/Classes/FluidBufNNDSVD.schelp index c4a8ec2..c8476c9 100644 --- a/release-packaging/HelpSource/Classes/FluidBufNNDSVD.schelp +++ b/release-packaging/HelpSource/Classes/FluidBufNNDSVD.schelp @@ -1,42 +1,48 @@ TITLE:: FluidBufNNDSVD -summary:: something +summary:: Non-Negative Double Singular Value Decomposition on a Buffer categories:: FluidManipulation related:: Classes/FluidBufNMF DESCRIPTION:: -does something +Find Initial Bases and Activations for FluidBufNMF via Non-Negative Double Singular Value Decomposition . -See -a paper +See http://nimfa.biolab.si/nimfa.methods.seeding.nndsvd.html CLASSMETHODS:: METHOD:: process -Process two audio link::Classes/Buffer:: +This is the method that calls for the decomposition to be calculated on a given source buffer. ARGUMENT:: server -The server the process runs on +The server on which the buffers to be processed are allocated. ARGUMENT:: source -(describe argument here) +The index of the buffer to use as the source material to be decomposed through the NMF process. The different channels of multichannel buffers will be processing sequentially. ARGUMENT:: bases -(describe argument here) +The index of the buffer where the different bases will be written to and/or read from: the behaviour is set in the following argument. ARGUMENT:: activations -(describe argument here) +The index of the buffer where the different activations will be written to and/or read from: the behaviour is set in the following argument. ARGUMENT:: minComponents -(describe argument here) +Minimum number of estimated components ARGUMENT:: maxComponents -(describe argument here) +Maximum number of estimated components ARGUMENT:: coverage -(describe argument here) +Fraction (0 to 1) of information preserved in the decomposition ARGUMENT:: method -(describe argument here) +The method used for the decomposition. Options are: + +table:: +## 0 || NMF-SVD || faster +## 1 || NNDSVDar || more accurate, fill in the zero elements with random values +## 2 || NNDSVDa || fill in the zero elements with the average +## 3 || NNDSVD || leave zero elements as zero, works better for sparse spectrograms +:: ARGUMENT:: windowSize The window size. As spectral differencing relies on spectral frames, we need to decide what precision we give it spectrally and temporally, in line with Gabor Uncertainty principles. http://www.subsurfwiki.org/wiki/Gabor_uncertainty @@ -57,5 +63,25 @@ private:: synth, server EXAMPLES:: code:: -yes +( +b = Buffer.read(s,File.realpath(FluidBufNNDSVD.class.filenameSymbol).dirname.withTrailingSlash ++ "../AudioFiles/Nicol-LoopE-M.wav"); +~bases = Buffer.new(s); +~activations = Buffer.new(s); +~resynth = Buffer.new(s); +) + +//how many bases do I need to decompose the buffer with 90% accuracy +FluidBufNNDSVD.process(s, b, ~bases, ~activations, coverage: 0.9, method: 1, action: {\done.postln;}) + +//check how many bases we are returned: +~bases.numChannels + +//try the same process with less accuracy +FluidBufNNDSVD.process(s, b, ~bases, ~activations, coverage: 0.5, action: {\done.postln;}) +~bases.numChannels + +//use the bases to run NMF on +FluidBufNMF.process(s, b, resynth: ~resynth, bases: ~bases, activations: ~activations,actMode: 2, components: ~bases.numChannels, action: {\done.postln;}) +{PlayBuf.ar(~resynth.numChannels, ~resynth)[1]}.play +} ::