Skip to content

POC for better buffer object chaining #140

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
May 3, 2022

Conversation

weefuzzy
Copy link
Member

depends on flucoma/flucoma-core#103

As discussed a great, great many times, we would be able to reduce buffer~ boilerplate in pipelines of fluid.buf* processes substantially, if

  • they did like jitter and had a default output object(s) provided when none is specified
  • had a way to set the source of following processes

This is the minimal-breakage version of that idea:

  • a new message buffer <symbol> sets source buffer(s). Objects with multiple sources acquire additional inlets, that will dispatch incoming buffer messages to the correct attribute to update
  • objects now emit buffer <X> for each of their output buffers, followed by a bang, meaning that the source for the following process can be set

The reason this is the minimal breakage version is that all of these messages come out of the existing 0th outlet, whereas the idiomatic thing to do would actually be to introduce new extra outlets for additional output buffers (e.g. in HPSS) and to make buffer received in inlet 0 trigger processing.

As it stands, this addition is no use at all in @blocking 2, because the output buffers couldn't be resized on the fly

Also, an object like fluid.bufnmf is a weird edge case, where @bases and @activations are both input and output, depending on the configuration

Anyway, kick its tyres @tremblap and @jamesb93 and we can work out remaining design questions

@weefuzzy weefuzzy marked this pull request as draft February 18, 2022 01:45
@weefuzzy
Copy link
Member Author

A motivating example, courtesy of James


----------begin_max5_patcher----------
994.3ocuW0zaiaCD8r8uBBgdzlfyL7ydZwdo+HJVDH6vjnE1RFRxYS6hM+16
PJmDmtN0pdUBO3PMbHey6wgCY997YEqZdH1UH9cweJlM66ymMKaJYX1gumUr
s7g0aJ6xtUrM10UdarXwvX8wG5y1ASvHARqHRfAxIw.5Pifj9fyRFARRdv.P
BGRVIBAG5DKQkLXb.4ErQkynTFgMPRilnfU3.mz38.u.fzDPqWKXSA.bJPPf
1H0TPaHgVZLZsgMx94LreJdlZB7bGjz.fbmPHP40xYz7pJVpjDZBZH0CsJuM
4t057dKuRJvf.HPoEwfEYKLTFKGhRTSp.yUIELJcxGC27D6CGV.GQnMHcVd9
Ldo9AWPo3vWRduhiOsDbT.CLgBR.CZFxkjVZUJdxdI5CDZE7R4j5fJQ.j0OI
G2NLwSsKXPdAsxfkbAmvYC7hRHwVSJqwQZqSPFN9AOxwef2k3EUCVgAXE2Sl
.q8ofSa7bnfZoyGrZT.5ry73NiXInXwvY8nPyQ1Sa+appiqa1WmyArGLVuea
y99Mw9bFCbv5tx902UUe6Usw08CYbfwKUKD7Nc5Olgu7AoR7kCSZXc5+qcwg
YTT77PUWmy6ZV80kghWPtp9IfwjseLed5mEiL6tN9MdA+oj6a1ru5Z4p82fa
p55K9eySelfTJG33llVvGFRCg3+EoyfdJhC1OLleylx99X8iml7z4IeJI931
BQPcdpWrHECMk8oNmVCLmTCf2AMnquru6RT.cVATZo+3lwwY6zjnA5Or7ftc
LuZK2zcW4t3EmMvWMHoia.mOvEtlDw.mrDh25xtz4gXq32fEhUk029z36Zic
wZNIopo9pWUZjtvRFHwWg7pFLTg7rxzIUFXxRSVsuuuo9RqDBJW91xWZ7QAL
eJI86aSqrZeJp4edOnrsbarO1dUrtb0l7DUuyEH96Mhaaa1uSPmVPvyuOyBB
9pVXgvBi63vIEj28JBLg6ihgSBWJsAG+ZmiadKein5Wf1z6MsGH7iht10h+n
MFqW94lGr7wzuUd+kJCNSVL71yS7mK88lmDvOrqCuaWW2ihO00ruccLIHW5s
AfFkvqZoaCL5I41fyJG4YkeI6+5eDJGvI6uViF36g.3oWgIdIHuN10WUmuD3
Hm32nJ.wWN41vnAROBfRuGJ4zuFR3XPROEHYFCR1o.IXLHgS.RiZaBl.f7iA
noP5FANzDfCMBb94jtgCvk61cers6fyYH3xYesoM8oeQ9yp5gOykjKZi2W8j
+4mHTT1xUn54xS6aygUwC1g6QK11bcrsde0ghGL4XHykJq4mazsqbfG4Jpy+
w7+ARrj8hA
-----------end_max5_patcher-----------

@jamesb93
Copy link
Member

Forgive me if something is not yet implemented or you're aware. I'll also try keep my thoughts granular so theyre easier to dismiss if needed 😆

image

In this scenario my first hunch was that I would get the name of the buffer explicitly set for that case. Just putting that out there as an instinctual feeling. Again, it may be that you agree and it's just not the case right now for the code.

@weefuzzy
Copy link
Member Author

Right, that's a bug: I forgot to consider setting the attrs in the box, so it's getting overridden in the object constructor. It sticks if you do it by message

@jamesb93
Copy link
Member

jamesb93 commented Feb 18, 2022

Right, that's a bug: I forgot to consider setting the attrs in the box, so it's getting overridden in the object constructor. It sticks if you do it by message

Nice. I still get a valid buffer empty buffer with a u2831832 type name - don't know if that would go away with the attr fix.

@jamesb93
Copy link
Member

Another scenario is this:

image

I find the route/list processing interaction not as nice as it could be. As you've said a more idiomatic way is to have separate outlets which would nullify the need for such parsing. I suppose that is another level of discussion over the interface though, whether or not wholesale breakage is worth it.

@weefuzzy
Copy link
Member Author

Nice. I still get a valid buffer empty buffer with a u2831832 type name - don't know if that would go away with the attr fix.

Couldn't quite grasp that. This works, yes?
Screenshot 2022-02-18 at 14 46 28
:
If I fix the setting-in-the-box then one can still drop back to an internal buffer by unsetting the attribute in question (sending it attrname with no arg)

@weefuzzy
Copy link
Member Author

I find the route/list processing interaction not as nice as it could be. As you've said a more idiomatic way is to have separate outlets which would nullify the need for such parsing. I suppose that is another level of discussion over the interface though, whether or not wholesale breakage is worth it.

Exactly

@jamesb93
Copy link
Member

]

I find the route/list processing interaction not as nice as it could be. As you've said a more idiomatic way is to have separate outlets which would nullify the need for such parsing. I suppose that is another level of discussion over the interface though, whether or not wholesale breakage is worth it.

Exactly

and my answer would be yes lol

@jamesb93
Copy link
Member

jamesb93 commented Feb 18, 2022

I guess another thing that might surprise people is that you always get everything and that would in theory increase the work of some jobs (maybe)?

In the case of bufnmf~ is it significantly more cycles to output the activations/bases or is it a matter of copying internal data that is already been processed?

@weefuzzy
Copy link
Member Author

Only buffer sizing (when its needed) and data copying, by and large/ Again, NMF is the awkward one as I think it has loads of switches in there to decide whether or not to irs output buffers, and will do resynthesis iff the resynth buffer is present.

Which is perhaps more of a case for simplifying the nmf interface than complicating anything else 😆

@jamesb93
Copy link
Member

Only buffer sizing (when its needed) and data copying, by and large/ Again, NMF is the awkward one as I think it has loads of switches in there to decide whether or not to irs output buffers, and will do resynthesis iff the resynth buffer is present.

Which is perhaps more of a case for simplifying the nmf interface than complicating anything else 😆

Separate NMF objects for creating activations + bases and then NMF can take any data in? The mind runs wild

@weefuzzy
Copy link
Member Author

Or just a message to resynthesize – we didn't have messages when the object was designed

@jamesb93
Copy link
Member

This is wildly faster and more readable than creating all your own buffers and right now its quite nice to have access to using a singular inlet with everything tagged up as needed or using the inlets:

image

@tremblap
Copy link
Member

This exciting development has a lot of potentials, and this POC will help make a list of pros and cons. I have started my own list and I reckon we should hold a meeting around it all - the breakage is quite significant in terms of interface and pedagogy which is where I mostly live. I am also curious to see how that fits in the overall idea of a buffer rectangle message-object, and the idea of removing many outlets to our objects. In the light of the workshops, there are a few ideas to bounce off here too.

Let's talk about the horizon of this on Monday's meeting and schedule a brainstorming interface session to get all interface-breaking stuff at once, at least on the public side of things.

@balintlaczko
Copy link
Contributor

Hey there, @jamesb93 brought this very tasty thread in my attention. I had an idea to use names and some sense of OOP-style object dictionaries, it is probably a bad idea, and most likely I don't know what I'm talking about, but I couldn't handle myself, so here it is:
image
Slightly inspired by the ability to name things in jit.gl, and maybe JS? Or something OOPish, don't know. But the idea is that everything can stay the same, you should just be able to name certain objects and refer to their output buffers in case you haven't manually specified one. This exact example would be most probably bad since it should be some notation that cannot be ambiguous.
OK, I am stuffing my nose into things I shouldn't, sorry. In any case, reducing the boilerplate is a genius idea!

@jamesb93
Copy link
Member

Hey there, @jamesb93 brought this very tasty thread in my attention. I had an idea to use names and some sense of OOP-style object dictionaries, it is probably a bad idea, and most likely I don't know what I'm talking about, but I couldn't handle myself, so here it is: image Slightly inspired by the ability to name things in jit.gl, and maybe JS? Or something OOPish, don't know. But the idea is that everything can stay the same, you should just be able to name certain objects and refer to their output buffers in case you haven't manually specified one. This exact example would be most probably bad since it should be some notation that cannot be ambiguous. OK, I am stuffing my nose into things I shouldn't, sorry. In any case, reducing the boilerplate is a genius idea!

It's always good to hear many perspectives, especially people with your breadth of experience :) This is likely to be a long form evolution and change rather than something quick so its great to have things in the mix early!

@weefuzzy
Copy link
Member Author

This been extended

Now depends on flucoma/flucoma-core#115

New things, to pile up the breaking changes:
– an outlet per output buffer (for things like HPSS etc)
– get rid of our progress outlet and use the dump instead, whilst also drawing progress on the box itself
– provide default instances for output containers (buffers, datasets, labelsets) in messages; also send output from left outlet for model-related messages

@balintlaczko
Copy link
Contributor

balintlaczko commented Mar 18, 2022

Hey there! When I try to compile this for Windows with flucoma-core#115 in release mode I get a lot of two errors. These examples are from bufcompose, but it happens basically everywhere. First one:

Severity Code Description Project File Line Suppression State
Error C2664 'void *proxy_new(void *,long,long *)': cannot convert argument 3 from 'fluid::index *' to 'long *' fluid.bufcompose_tilde ...\flucoma-max\source\include\FluidMaxWrapper.hpp 1036

The line:

mProxies.push_back(proxy_new(this, i + 1, &this->mProxyNumber));

And the other error is:

Severity Code Description Project File Line Suppression State
Error C3493 'N' cannot be implicitly captured because no default capture mode has been specified fluid.bufcompose_tilde ...\flucoma-max\source\include\FluidMaxWrapper.hpp 1054

The line:

        static const std::string param_name = lowerCase(x->params().template descriptorAt<N>().name);

Any help would be appreciated. :))

@weefuzzy
Copy link
Member Author

Thanks for testing @balintlaczko – more entries to the Big Fun Book of Things That Upset MSVC But Not Other Compilers

Last push should fix it for you.

  • long is a different size on x_64 windows than other, arguably more sensible, platforms
  • clang / GCC seem to interpret the lambda capture rules differently from MSVC

@jamesb93
Copy link
Member

What's nice is the fact that now CI wont horrifically break. Thanks for testing Balint!

@balintlaczko
Copy link
Contributor

What's nice is the fact that now CI wont horrifically break. Thanks for testing Balint!

Thanks for showing me how to compile and live on the edge! I believe now!

@jamesb93
Copy link
Member

@weefuzzy it seems the fancy "progress on the object box" works quite well! My only issue is that if I use the cancel message to stop a long job, the progress does not reset and the object remains unclickable for that time.

@tremblap
Copy link
Member

ok compilation errors - yes I deleted the build folder - and 103 is merged in core so I'm at the tip of dev there and tip of pr140 on Max. I get this:

In file included from /Users/pa/Desktop/fromBU/documents@hudd/research/projects/fluid corpus navigation/research/flucoma-max/source/projects/fluid.libmanipulation/fluid.libmanipulation.cpp:23: /Users/pa/Desktop/fromBU/documents@hudd/research/projects/fluid corpus navigation/research/flucoma-max/source/projects/fluid.libmanipulation/../../include/FluidMaxWrapper.hpp:1611:29: error: 'this' argument to member function 'name' has type 'const SharedClientRef<fluid::client::dataset::DataSetClient>', but function is not marked const t_symbol* name = gensym(ds.name());

@tremblap
Copy link
Member

tried again cleaning everything, still no luck. @jamesb93 and @balintlaczko you manage to compile?

@jamesb93
Copy link
Member

tried again cleaning everything, still no luck. @jamesb93 and @balintlaczko you manage to compile?

latest max-sdk-base?

@tremblap
Copy link
Member

no, I always compile against 7.3.3

@jamesb93
Copy link
Member

no, I always compile against 7.3.3

sounds like that is the issue. Try compiling against 8.2/3

@balintlaczko
Copy link
Contributor

I compiled successfully after the last change, but yes, I have latest max-sdk-base. NB. as I remember the CLASS_ATTR_LONG had issues on debug build, but no issues on release.

@tremblap
Copy link
Member

r.e. latest sdk, I will wait to check with @weefuzzy to make sure we don't break max7 support here.

r.e. build type, I'm always in release until something breaks :)

@tremblap
Copy link
Member

sorry it depends on flucoma/flucoma-core#115 - will try again

@balintlaczko
Copy link
Contributor

balintlaczko commented Mar 23, 2022

r.e. build type, I'm always in release until something breaks :)

Especially true if things break because of the debug mode. 😄

@tremblap
Copy link
Member

r.e. build type, I'm always in release until something breaks :)

Especially true if things break because of the debug mode. 😄

indeed although the inverse tend to happen - we've had bugs in release that were not there in debug, and Owen created a Test type to give us some optimisation on to find those gremlins...

@tremblap
Copy link
Member

sorry it depends on flucoma/flucoma-core#115 - will try again

this sorted it - I'm now super excited of trying that new interface ;)

@tremblap
Copy link
Member

ok this is very exciting, and definitely a keeper and the interface is very good and consistent I think - but definitely intermediate to advanced as the magic of all of it working without seeing buffers/datasets is frighteningly slick... the workload to get it to release is ambitious though, so here is a proposal of things in order:

  • we need to fix all Max doc, help, examples - I tried umap and by the time I sorted all the problems of embedded patch and stuff to make it work I was puzzled a bit - I presume one gets faster at finding all the broken bits

  • I think that we should keep the route on the first page, to make clear that what comes out of the object - so we need to find how we will present the streamlined processes. a tab? an example? a shared tab like the bufthreaddemo?

  • we need to sort the bufnmf conundrum. I vote for changing the order of outlets to bases/activations/resynth and create a resynth message - this way we seed the idea that there is much more to this object than demixing

  • was there any other object that needed i/o thinking?

** this would be the point where we merge this in the max dev branch **

then the list of todos for the next official release:

  • redo the Max videos (especially with the number of outlet changing!)
  • sort the Pd equivalent, then help/example/etc
  • sort the SC equivalent, then help/example/etc

** then we can do a beta6 (or v1 if we are there) so our less adventurous users will not have conflicting documentation/help/interface **

for SC, I am tempted to do the same interface, i.e. if no buffer is provided, push one. with a default of 1024 buffers on the server that shouldn't be an issue, and we could flag that in our helper for advanced users, no? Ideally we woun't do like Max and create a magic empty buffer at instantiation, so that count would stay under control whilst beginner manually create their buffers...

I'll continue playing with it all a bit, but this is fun and makes the code much less cluttered once the workflow is clear (and when tasks like transforming vs predicting are clear in one's head)

@jamesb93
Copy link
Member

  • we need to fix all Max doc, help, examples - I tried umap and by the time I sorted all the problems of embedded patch and stuff to make it work I was puzzled a bit - I presume one gets faster at finding all the broken bits

Which means a complete freeze on documentation and clear out of outstanding PRs that deal with help files because diffing Max help files in git makes everyone sad.

#156
#155
#139

I also would suggest that we make an explicit video on how these changes work. It can be relatively rough, but at least a walkthrough of what once was and now is would be good to pair with the release.

  • I think that we should keep the route on the first page, to make clear that what comes out of the object - so we need to find how we will present the streamlined processes. a tab? an example? a shared tab like the bufthreaddemo?

Not sure what the route on the first page is but I think a shared tab would be ideal to put in every buffer dealing object's help.

  • we need to sort the bufnmf conundrum. I vote for changing the order of outlets to bases/activations/resynth and create a resynth message - this way we seed the idea that there is much more to this object than demixing

I think resynth is what people will do most of the time and so should be first, otherwise we get an "always using the right outlet and now my patch is messy" situation, ala fluid.dataset~.

  • was there any other object that needed i/o thinking?

I can't think of any.

** this would be the point where we merge this in the max dev branch **

I agree

then the list of todos for the next official release:

  • redo the Max videos (especially with the number of outlet changing!)

Yeah this definitely a complete rewrite. I didn't think about dataset~ changing outlets too. It'll be much faster to teach though it will change the dynamic of how we chain together things a little. For example:

image

How, and at what point do you explain why the output is a message and not a bang and why does it include the output? I would opt for number 1 in this screenshot, with the caveat of We'll explain why it does this later.

** then we can do a beta6 (or v1 if we are there) so our less adventurous users will not have conflicting documentation/help/interface **

Beta6. I sense we are not done breaking just yet.

for SC, I am tempted to do the same interface, i.e. if no buffer is provided, push one. with a default of 1024 buffers on the server that shouldn't be an issue, and we could flag that in our helper for advanced users, no? Ideally we woun't do like Max and create a magic empty buffer at instantiation, so that count would stay under control whilst beginner manually create their buffers...

I think we have had that conversation to death. What does "pushing" a buffer mean? Do you get it as a return from the instance method or is it passed via action function? @tedmoore has the most articulate reasoning against both.

@tremblap
Copy link
Member

tremblap commented Mar 23, 2022

  • we need to fix all Max doc, help, examples - I tried umap and by the time I sorted all the problems of embedded patch and stuff to make it work I was puzzled a bit - I presume one gets faster at finding all the broken bits

Which means a complete freeze on documentation and clear out of outstanding PRs that deal with help files because diffing Max help files in git makes everyone sad.

#156 #155

indeed these are next on my list

#139 has been merged but without the requested changes. So I reckon we should do that too.

I also would suggest that we make an explicit video on how these changes work. It can be relatively rough, but at least a walkthrough of what once was and now is would be good to pair with the release.

it is a good idea

  • I think that we should keep the route on the first page, to make clear that what comes out of the object - so we need to find how we will present the streamlined processes. a tab? an example? a shared tab like the bufthreaddemo?

Not sure what the route on the first page is but I think a shared tab would be ideal to put in every buffer dealing object's help.

I mean that the first tab of all helps should not use the shortcuts.

  • we need to sort the bufnmf conundrum. I vote for changing the order of outlets to bases/activations/resynth and create a resynth message - this way we seed the idea that there is much more to this object than demixing

I think resynth is what people will do most of the time and so should be first, otherwise we get an "always using the right outlet and now my patch is messy" situation, ala fluid.dataset~.

we'll have to pick one for the left and the idea is to entice our users to think about something else. resynth is sexy indeed but we will do a specialised message for it. the 'default' message of 'buffer' will generate bases/activations, hence me proposing to move them to the main outlet positions.

  • was there any other object that needed i/o thinking?

I can't think of any.
@weefuzzy we talking about those with 2 audio inlets for instance.

  • redo the Max videos (especially with the number of outlet changing!)

Yeah this definitely a complete rewrite.

We'll need to have a discussion on which approach is the most relevant. I am not convinced about the shortcut first, especially since transformers and predictors will need to be explained... too much magic at the front has bitten us in the past.

Beta6. I sense we are not done breaking just yet.

We'll need to consolidate soon, considering the time left on the project!

for SC, I am tempted to do the same interface, i.e. if no buffer is provided, push one.

I think we have had that conversation to death.

not enough it seems, since SC users in Oslo had ideas and were envious... @tedmoore said he would poke them and see, so I just made my proposal here.

@jamesb93
Copy link
Member

#139 has been merged but without the requested changes. So I reckon we should do that too.

A separate issue has been filed to track the status of that object's documentation. I don't think it is pressing right now and it is not forgotten.

I mean that the first tab of all helps should not use the shortcuts.

Agree.

we'll have to pick one for the left and the idea is to entice our users to think about something else. resynth is sexy indeed but we will do a specialised message for it. the 'default' message of 'buffer' will generate bases/activations, hence me proposing to move them to the main outlet positions.

Is that your idea or everyone's? Maybe I missed the memo. In my mind the most useful and creatively stimulating function of bufnmf~ is unsupervised decomposition. Indeed if bang only does b/a then making those left/right is sensical. I actually think bang should resynth and we should have a message for the other things possibly... I don't know... but sidelining the resynthesis (a massive wow moment for musicians) seems a shame just gauging the response of every room it has been presented in to first timers.

We'll need to have a discussion on which approach is the most relevant. I am not convinced about the shortcut first, especially since transformers and predictors will need to be explained... too much magic at the front has bitten us in the past.

But that is not a shortcut nor what I am proposing as an ethos. The first examples simply abuses the fact that anything going into a message's left inlet triggers the message. If I add the sel fittransform you have to explain what comes out of the outlets and thus can of worms be opened... but you sort of have to explain what comes out of the object's outlets anyway.

We'll need to consolidate soon, considering the time left on the project!

Version 1.0 demands all the documentation be up to date too

not enough it seems, since SC users in Oslo had ideas and were envious... @tedmoore said he would poke them and see, so I just made my proposal here.

@jamesb93
Copy link
Member

jamesb93 commented Apr 5, 2022

@weefuzzy I have a use case which might be unaccounted for or at least minorly worth making viable.

image

I think that frombuffer should report the dataset that is formed from that method.

@jamesb93
Copy link
Member

jamesb93 commented Apr 5, 2022

@weefuzzy I have a use case which might be unaccounted for or at least minorly worth making viable.

image

I think that frombuffer should report the dataset that is formed from that method.

Actually I am dumb, you already know it in advance, but if you don't provide a dataset~ name perhaps it can spew it out for you?

@tremblap
Copy link
Member

tremblap commented Apr 5, 2022

actually, you are not dumb at all - one could have set the dataset to refer to something else, and if we are to adopt this paradigm of chaining, we might as well pass on the data when there are no cost and that reinforces the consistent syntax/behaviour.

@weefuzzy
Copy link
Member Author

weefuzzy commented Apr 6, 2022

Be that as it may, it would need to be a separate mechanism to the stuff in this PR: the dataset name is not derived from an output parameter of the function. It could be added later as a nice-to-have by making frombuffer return its dataset name, but for now one can always retrieve the name of the dataset being worked on (re-referred or not) with getname.

@tremblap
Copy link
Member

tremblap commented Apr 6, 2022

If you think it is not a blocker, and retrieving is possible by other means, I am happy to oblige. On a related matter: is tobuffer passing the name of its destination buffer ?

@weefuzzy
Copy link
Member Author

weefuzzy commented Apr 6, 2022

Yes, and both from / to take an output LabelSet, which would get captured by the new behaviour

@tremblap
Copy link
Member

tremblap commented Apr 6, 2022

ok this is great. In the light of all the workshops, I am completely convinced of our (old) buffer interface decision was good, and that this is an improvement for more advanced users.

@weefuzzy weefuzzy marked this pull request as ready for review April 21, 2022 13:49
@weefuzzy weefuzzy added this to the beta7 milestone Apr 21, 2022
@weefuzzy weefuzzy merged commit 9edcd91 into flucoma:dev May 3, 2022
@weefuzzy weefuzzy deleted the enhance/buffer-manage branch May 3, 2022 13:35
jamesb93 pushed a commit that referenced this pull request Jun 14, 2022
* optional args: add to wrapper

* MaxWrapper: Add choices param (list of symbols <-> bitset)

* changing preset and interface for noveltyslice examples

* correct typos and misconnections in helpfiles (onsetslice and bufselectevery)

* Buf2List(2Buf): Correct atom type

Fixes MSVC debug builds

* kdtreehelp: now loads programatically, in order, from the stored labelset (#184)

* now loads programatically, in order, from the stored labelset

* corrected a view

* also, fluid.umap helpfile now uses the loader

* fix #185 

`ControlIn` objects
– properly adjust `ac` when adjusting `av` 
– ensure mListSize is always intialized to something 
– fix resize logic

* Enhance/max params (#182)

* CMake: Centralise C++ version and set to 17

* Wrapper: Handle new LongRuntimeMax parameter type

* POC for better buffer object chaining (#140)

* start of POC for buffer management stuff, needs fix to ParamDesc NumOf in core

* working POC for managing internal output buffers and process chaining 

relies on some pending updates to core

* Don't override box arguments with default buffers

* NRT: One outlet per output buffer, no progress outlet, draw progress on box

* Messages: Default instances for output container args

* updates to message default instances that don't break all other objects

* Add optional range arguments to buffer message in left inlet

* Stop MSVC being sad

* Wrapper: fix merge casuality

* [Fix] Broken patches due to new dataset/buffer interface interface (#195)

* update dataset

* fix broken cabling in datasetquery

* update kmeans

* make more max-like in style

* "maxify" the style

* fix connections and maxify style of labelset~

* fix connections in umap and maxify

* fix connections and mafixy fluid.grid~

* update kdtree~ help with fixed cables and max style

* fix connections and maxify style of normalize

* cosmetic upgrades

* update fluid.plotter cables

* fix bufstats due to tb

* [Fix] Missing OnsetSlice Files (#197)

* restore to previous state

* fix some style errors

* fix style issues

* Wrapper: Update for new `maxFFTSize`

* [Docs] BufCompose Help File (#155)

* griddify patch tab s

* update first tab

* second tab

* macros

* subsections tab

* small cosmetic changes

* update final tabs of help file

* make tab 2 playable

* clean tab 3

* cosmetic

* PAs addendums

* Wrapper: Fix reset for shared objects. fixes #43 

Will 'reset' to whatever was in the box that the message was called on, 
so potential for confusion...

* Wrapper: Fix managed object aliasing in message invocations. fixes #190

* List2Buf: Correct outlet type. fixes #196

* [Docs] BufSpectralShape Help File (#156)

* grid it out

* bufspectralshape help file

* add a layout of results tab

* add @select tab and final changes

* translate SC -> Max (#187)

* Wrapper: call params::set() properly for long array attrs 

To ensure that client objects  like attrui update properly in shared 
instances

* touch up ampslice example with Rod's audio

* prepare help file

* shell out the tabs

* ampslice updates

* Wrapper: Use raw value for maxFFT when refreshing attribute

* [Help] Pitch and BufPitch SC Translations (#200)

* layout

* cleanup and translate

* update bufpitch to match sc

* fix various errors in help files (#204)

* [Docs] NoveltySlice Help Files (#146)

* update noveltyslice

* shell out bufnovelty

* small cosmetic updates

* small layout issues

* update bufnoveltyslice to be similar to RT algo

* cosmetic

* tune parameters for second tab

* add a progression for tweaking parameters

* [Fix] Saner maximum sizes for modulatable examples (#205)

* add bigger maximums for noveltyslice for modulation fun

* set a bigger maximum kernelsize for realtime playing

* maximum parameter tweaks

* [Fix] Various Bug Fixes From PA (#210)

* fix bufcompose

* fix bufampslice playback

* change from groove to play

* corrected players of 2nd tabs fixing #202

* Wrapper: Trying once again to get maxParams logic correct

* neaten and provide an example (#216)

perfect thanks!

* [Docs] HPSS and BufHPSS translation (#219)

* prepare help files with grid/fonts

* cleanup help file layout

* cleanup help files

* update remaining tabs for hpss

* [Docs] MFCC and BufMFCC Translation (#217)

* update rt mfcc

* update bufmfcc to match translation better

* PAs review

* [Docs] MelBands + BufMelBands Translation (#214)

* translate rt version

* add ioscbank and size $1

* translate bufmelbands

* fix loadbang mistake

* [Docs] BufFlatten Translation (#218)

* update bufflatten

* normalise fonts and grid size

* cosmetic movements

* change language around buffer management

* [Docs] Update fluid.list2buf (#188)

* update list2buf help file

* change language in resize tab

* resize destination buffers downwards

* list2buf - list typo

* bufmelbands - corrected loadbang issue

* bufmfcc - typo

* Enhance/generate stubs (#231)

* CMake: Generate .cpp files

* CMake: Ensure MSVC compiles commonsyms.c

Enable C as a language for project...

* Remove all old handwritten CMake and stubs

* CMake: Tidy up Max SDK setup

* CMake: ensure correct MSVC runtime by default

* CMake: Correct hints for Max SDK libs

* CMake: Asking once again to compile happily on two platforms

* CMake: install prefix is a cache variable

* CMake: Move install prefix override

* CMake reinstate target for triggering docs in ALL

* CMake: Tidy up

* CMake: typo

* Wrapper: FFT max set properly after initialization

* CI: Update nightly workflow

* CI: use correct branches

* CI: remove reference to docs job

* CMake: belatedly add branch selection for flucoma deps upon which CI relies

* Reinstate package-json generation

* [Docs] NMFFilter Translation (#222)

* translate nmffilter

* make ezdac local

* [Docs] BufStats translation (#220)

* prepare bufstats help file

* in progress

* full translation

* add a derivative tab

* cosmetics

* remove debug print

* [Docs] NMFMatch Translation (#221)

* prepare and grid

* work on compressor example

* work in compressor parameters

* finish translation

* alter compressor example to be less idiosyncratic with vector sizes

* [Docs] MLPClassifier Translation (#226)

* wip

* mlpclassifier translation

* add caveat about predicting whole dataset

* layout

* [Docs] BufNMF Translation (#229)

* grid and format

* WIP

* translation of nmf sc

* remove nooiseplay vocoder

* cleanup small errors

* make channel offset permanent

* vocoder pfft patch

* add back vocoder example with tweaks

* mds translation (#235)

* [Docs] RobustScaler SC Translation (#234)

* translate standardisation

* grid out

* translation

* add scaler visualisation back

* scaler comparison re-usable tab

* update with visualisation and comparison together

* [Docs] Standardise SC Translation (#233)

* translate standardisation

* grid out

* translation

* add scaler visualisation back

* scaler comparison re-usable tab

* update with visualisation and comparison together

* commit patch

* update title

* add scaler comparison

* [Docs] MLPRegressor Translation (#228)

* prepare help file

* shell out tabs

* mlpregressor translation

* [Fix] Plotter internal state management (#242)

* refactor code to be handle state in a more legible manner

* only output position on mousedown (not mouseup)

* instantiate fluid.plotter with no border

* dont reset domain/range state with clear

* fix help file

* CMake: Pick up new Client tag to control tildes in external names better

* updated nmf examples with new interface

* change @SiZe to @history (#243)

* [Enhance] Manual Documentation for CCE Objects (#250)

* install the contents of manual_docs to release-packaging docs

* add manual docs

* rename manual_docs to local_docs

* update CMake to respect new path name

* use more robust path for local docs

* add default arguments and buffer messages

* en-quote

* add max list size as argument

* provide use case for spectrogram

* caveat about manual interaction with slices

* update descriptions and digest

* return destination -> source

* [Fix] Various patcher bugs (#253)

* fix bufselect~

* blank out bufstats values in messages

* fix feature patches with new interface

* cosmetic fix on kmeans

* add feature objects to landing page

* [Docs] Stats SC Translation (#245)

* grid it out

* update first tab

* mimic Ted's real use case tab

* normalize hehe the normalize help file with other scalers (#246)

* [Docs] PCA SC Translation (#247)

* add whitening tab

* add stackexchange link

* [Docs] BufNNDSVD SC Translation  (#251)

* update nndsvd help file to match sc

* fix numchans error

* translation (#255)

* [Docs] STFT SC Translation (#248)

* prepare help file

* rework first tab

* in progress

* cleanup first tab

* musical stft example

* mild cleanup

* finish musical example

* change sound file examples

* translate knnregressor (#256)

* [Docs] NMFMorph SC Translation  (#258)

* start editing

* wip

* translate nmfmorph

* [Docs] BufNMFCross SC Translation (#254)

* prepare help file

* translation

* delete superfluous tab

* typo in bufnmf help

* [Fix] Various load issues  (#261)

* fix maxsize argument for bufaudiotransport

* fix broken patch cables in bufchroma

* fix loading error

* fix broken dataset cables

* fix maxsize

* maxsize

* cosmetic

* broken cables

* stats maxsize

* typo

* cosmetic

* small cosmeti fixes

* cosmetic touch ups

* always load even if loadbang is disabled

* non local ezdac (#262)

* change of interface (#260)

* typo

* skmeans translation from SC (missing one tab also missing in kmeans) (#264)

* [CI] Update Release Workflow (#266)

* cleanup nightly release

* normalise naming extensions

* update release

* Revert "normalise naming extensions"

This reverts commit 2398518.

* update extension

* remove workflow dispatch variables

* [Docs] Transients Family Translation  (#259)

* translate transientslice

* translate buftransientslice

* fluid.transients~ translation

* cosmetic

* translate buftransients

* make mc example dual mono

* add zoom on content

* [Docs] AmpGate SC Translation (#241)

* grid help file

* translate ampgate

* cosmetic

* silence removal example

* neaten patch

* finish off lookahead/lookback prettification

* fix onset/offset conceptual break

* defer loading of tab 3

* cosmetic

* MaxWrapper: Ensure box is properly released from `progress` upon cancel

* [Docs] (S)Kmeans Distances Tab (#267)

* add distance tab

* add argument for choosing default dataaset

* add distances tab

* add distances tab

* cleanup

* beta testing patches updated for beta7 (#268)

* typo

* typo

* typo

* fix release worflow

* fix bad path

* fix branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants