-
Notifications
You must be signed in to change notification settings - Fork 4
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
new help files #26
Comments
Well, here's the patch and my final version. I have a "header" abstraction, that I plan to call on all help files. It can then be easily changed to affect all, when you have a new version, for instance, just make it "3.1" |
Thanks. This helpfile design model works for relatively few messages of drown~, but may need subpatches when there are more options (like pvtuner~). I like the "Gain DSP" abstraction. One issue I had is that the "fftease/" prefix did not work for me. The object only loaded when I removed the prefix. I understand the need to disambiguate 3rd party objects against possible name clashes. In the Max distro, there's a "fftz." prefix for all FFTease objects, and an "el." prefix for all LyonPotpourri objects. I'm fine with the convention proposed here ("fftease/" prefix) as long as it works. Any ideas why it didn't work for me? One other detail - the overlap factor is not an absolute number of samples but rather a division factor. In order to get a hop size of 128, the correct overlap factor to use here would be 8 (1024/8 = 128). |
For a hop size of 256 and FFT size of 2048, 8 would also be the overlap factor. |
yup, I'm aware, and you made that remark on your general notes, so it's fine, I'm also very good at organzing things in subpatches :)
for a while now there's a convention that we use ~/documents/pd/externals as the place to put externals. And that folder is one that Pd automatically searches on. So if you have the 'fftease' folder there, the prefix works. But anyway, this convention is old and dates back to Pd Extended days, where it'd obviously also have the external folders in the search path. |
yeah, I'm just confused about this and was about to open a report for this. I thought the argument was hop size, not overlap. I guess I just got it wrong and need to fix it. |
here it is. Anyway, next time I'll just take a better look into the code and ask before if I have questions :) latest revision: |
The directory update worked. I guess that should be mentioned in the new installation instructions, which will need to be updated in any case. That being said, please continue with the help file model you proposed, and let me know if any questions arise. Thanks! |
ok, I'll keep this open so I can eventually ask questions and in the end I'll send a Pull Request |
Here we go. Still about [drown~]. It says "In adaptive mode, the threshold is determined relative to each FFT frame peak.". Ok, but what about non-adaptive mode? What happens then? |
And now... [thresher~]. It has a "synthresh" message, what is it for? I also don't get what "oscbank" does and what is the unit of the "transpose" parameter. For last, why does [drown~] have a "fftinfo" method, but not [thresher~]? |
In that case, the threshold is absolute - any bin values that fall below the threshold are multiplied by the drown factor. |
Generally, that would be the threshold for synthesis. I guess bins that fall below that threshold don't get synthesized. But I'll have to check the code to be sure.
"oscbank" engages an algorithm that makes "instantaneous" frequency measurements per-bin, after which each bin is resynthesized with its own cosine oscillator. (Ordinarily, synthesis is done with an inverse FFT.) The "transpose" factor is a unit-less scalar that multiplies all of the frequencies in the spectrum. So if the scalar is 0.5, the pitch goes down an octave, without affecting the speed. A factor of 2 takes the pitch up an octave.
Probably laziness. It's fine to copy the method into thresher~. |
Cool, I get it all now.
sounds like it, and I see it only works for the 'oscbank' mode |
I just updated thresher~ with the "fftinfo" method. |
So, a modest version of what I wanna do is available at #35 but let's keep this issue opened as I still wanna do a deeper revision |
Thank you @porres - these look great! I have one question though, about the extra copy of the object at the top of each help file. It's a nice look, but wouldn't that incur additional computation by having two copies of the object in the help file? Some of the FFTease objects can be costly in CPU even when there's no signal input. Maybe an inline GIF would be better, though that might be work for a future edition. In any case, thanks for the great work here! |
Further to this, I noticed that the bare mindwarp~ object in the help file sends an annoying stream of error messages since its warp factor is zero, unless controlled by an input float or signal. I'll post an update to mindwarp~ that fixes this issue, but we should try all of the new help files with the DACs turned on, to make sure that other similar issues are not revealed. There's definitely some CPU overhead from the extra object. It's not a lot, since the FFT algorithm uses much less CPU with a zero input signal. I think we can defer this issue to a future release. |
With the lib built on Win64 as of 7682c35 I get this in the Pd console opening the help patches with DSP on:
|
The codepend~ warning catches a typo in the help file - 1028 is an illegal FFT size. It should be 1024. |
The mindwarp~ warning should be gone in the most recent version of the code as of 57667df. |
pvwarpb~ - in the help file, bare object at top, replace "buf" with "pvwarpb-array." |
enrich~ - in bare object at top, replace "buf" with "enrich-buffer." |
Similar solutions for pvwarpb~ and residency_buffer~ |
I'm building the latest 7682c35 and the |
you're welcome :)
Yes it would. I'm not married to that and I don't really use that in my help files of cyclone and ELSE, but it's a common standard that I was just trying to replcate.
Yeah, I'm up for a different design for the future. We can pass the name of the object as an argument to the [icon] abstraction. I made a couple of tests. |
@porres - the new proposed model is great! I have a slight preference for the "bthresher~" design. |
but both designs are the same :) I'm just passing the name of the object as an argument. I tested with residency_buffer~ because that's the longest object name, to see if it fits. All the others will seem justified to the left. |
Oh, I guess I know what you mean, about the positioning, right? |
Correct. The bthresher~ positioning style looks the best. |
@Lucarda - I could not reproduce the mindwarp~ message with the most recent version. That error message literally no longer exists in the code. Is it possible you're loading an older version of the external? |
So, sometimes that will depend on how the window is filled, if it has too much text or information, I will have the tendency to fit things together in a way that doesn't waste any of the window's real state :) But I can force that standard |
@porres I leave it to your aesthetic judgement. Thanks! |
I'm fixing the documentation issues... |
this will be a separate issue, but I think you should allow all objects to be created without any arguments. Some objects here have mandatory arguments and then you can't create the object. In Max, that doesn't prevent you from opening the help file so you know what you have to do, but in Pd you can't do it and I don't think it's a good idea. |
Yes my bad. I was opening the newer help patches but had and older "documents/Pd/externals/fftease" laying around that got loaded. |
hi, opening a new issue here instead of carrying it on in the other thread #15
here's my take on "drown~". I'm using the "fftease/" prefix as usual in the Pd documentation. The other format people normally use (like in Purr Data, just open any cyclone object for instance and you'll see) folles the pddp project, with a text description of what all objects take and arguments. What you had as a model for me was more in the line of Pd Vanilla's (and miller's) style. With all right there. I added information on the arguments that was missing, and I'm fine with whatever, so if you want something like this instead of pddp. I can also check Max's files for reference as well.
The text was updated successfully, but these errors were encountered: