• ben.wes

    responding to myself here ... it's possible to iteratively append data to a top-level array with purest_json (which avoids the restriction to symbols of MAXPDSTRING size).

    that's not possible for nested keys though (which is a requirement in my case). i changed the purest_json code now so that i can add to nested keys via messages like array LoudspeakerLayouts.Loudspeakers $1. not sure if that's the "right" way and i'd still be curious if other people see better options in Pd for it!

    posted in technical issues read more
  • ben.wes

    i'm trying to use json-encode from the purest_json library to create config files for the IEM AllRADecoder. now it might be a questionable endeavor to do this with Pd in general - but i'd like to see if it's possible anyway.

    the aim is to create a file like https://plugins.iem.at/allradecoder/layoutWithAdditionalImaginaryLoudspeakers.json

    ... what i have so far works up until 10 speakers with some test data. but then, the symbol obviously gets too long and i get unnecessary escapings and the last parts of the data look like this:

    \"Channel\":11\\,*"}
    

    image.png
    any ideas on how to solve this?

    here's the patch.
    test-json-encode.pd (ATTENTION: this writes a test.json file on bang in the patch directory)

    posted in technical issues read more
  • ben.wes

    Has anyone implemented or experimented with the Fractional Fourier Transform (FrFT) in Pure Data and might point me to relevant resources? So far, I badly failed at implementing an external that would allow continuous rotation between time and frequency domains (see https://en.wikipedia.org/wiki/Fractional_Fourier_transform).

    I've heard about quite interesting musical applications of this in a talk and demos by Günther Rabl (who implemented this years ago in his own tools AMP/VASP) and would love to experiment with it in Pd.

    posted in technical issues read more
  • ben.wes

    @trummerschlunk said:

    hm, too bad. Same is true for the external, I guess?

    yep. vanilla patches are the only option for that ... but when it comes to 1-sample feedback without block~ 1, the only options are the filter objects (rpole~ etc.). i'm honestly not completely sure if this dynamic smoothing here could be achieved in some other way (like obtaining x[n-1] via rzero_rev~ 0) - but i don't think so.

    posted in technical issues read more
  • ben.wes

    ah - and i forgot to mention in the previous response: i made another little update to the abstractions so that you can set the channel count via a channels <count> message:

    unfortunately, it's necessary to set the count of send~ objects manually that way.

    posted in technical issues read more
  • ben.wes

    @trummerschlunk said:

    [...] Maybe because I am on a arm/silicon Mac?

    the builds include binaries for both, silicon and intel Macs (on M2 here myself - so that's even the only build that's actually tested ;) ).

    Would dynsmooth~ then be the accurate or the efficient version?

    dynsmooth~ initializes the accurate version. if you create dynsmooth~ -e, it'll use the efficient algorithm. also, you can initialize base frequency and sensitivity with creation args like this: dynsmooth~ -e 100 0.01 for example.

    Would it run in 'compiled mode' in plugdata?

    compiled mode only supports the object that are known by the heavy compiler:
    https://github.com/Wasted-Audio/hvcc/blob/develop/docs/09.supported_vanilla_objects.md

    ... unfortunately, block~ (for the 1-sample feedback) is not supported - so i'm afraid that it's not an option to use the abstractions in that mode.

    posted in technical issues read more
  • ben.wes

    @trummerschlunk said:

    Sorry, I am still very new to plugdata, and I get error messages with dynsmoth-abs-efficient~ -mc 32
    bad arguments for message 'f' to object 'objectmaker'

    ah, wait ... you don't need to do anything for multichannel support - it just takes multichannel signals as input and outputs the smoothed multichannel signal. but i only added that for the external (dynsmooth~) - for the abstractions, it would also be simple, i think - but i didn't attempt yet. would need to change the feedback to multichannel.

    Where exactly do I place your dynsmooth~ folder (downloaded from releases)? In Abstraction and Externals? Thanks a LOT!

    in any folder that pd knows. :) ... but externals would be fine, sure! and pd will automatically search in the dynsmooth~ folder for the external with the same name (for the abstractions, you'd need to use dynsmooth~/dynsmooth-abs~ unless you add the folder to the paths).

    posted in technical issues read more
  • ben.wes

    ... and probably the last update on this for the time being (unless people find errors, of course):

    the latest changes add multichannel support to the external (it might be nice to allow different base frequencies and different sensitivities for different channels - but i'll skip that for now).

    posted in technical issues read more
  • ben.wes

    @trummerschlunk glad to hear! i made another quick update. the abstractions are more properly named now (dynsmooth-abs*) and they also support creation args for basefreq and sensitivity. i removed the additional inlets ... all objects (including the external) are now expecting messages for those parameters (and for clear).

    i also added a basic readme and the new "release" (huge word for this little object) is also ready for download:

    posted in technical issues read more
  • ben.wes

    @trummerschlunk said:

    did you happen to make an external yet? ;)

    you can try this: https://github.com/ben-wes/pd-dynsmooth/releases/tag/0.1.0-test1 ... this is completely fresh and untested though. so no guarantees! and the help file currently relies on my show~ object which relies on pdlua. damn those dependencies. ;)

    anyway: it looks ok for me. that stuff isn't well organized though. i might invest a bit more time soon. also not sure if it's sufficient to control base frequency and sensitivity only via messages.

    it includes the abstractions as well ( @manuels: i'm referring to your patch there - let me know if this is ok for you, otherwise, i'll gladly change that).

    posted in technical issues read more
  • ben.wes

    for the sake of completeness (and thanks to @manuels' inspiring patch), i'm adding the "efficient" version here (not well tested neither):

    dynamicsmooth-efficient~.pd

    ... i really like this approach and i will create an external for it as well.

    posted in technical issues read more
  • ben.wes

    really cool stuff - had fun playing around with this! now i didn't understand the whole patch (which is insane) ... but it looks like you're checking the closest "pixels" only for each mass? seems like a great optimisation so that you don't need to check against every pixel. did i get that correctly?

    posted in patch~ read more
  • ben.wes

    oh ... i didn't see the discussion here ... just built a little (and certainly dirty) patch for this after the discussion on facebook:
    patch_n_bitmaps.zip

    image.png

    it obviously becomes very slow with lots of canvases (and i'm already omitting the white pixels):
    2024-09-21 22-46-18.mp4

    ... plugdata on the other hand can deal with these quite easily - i creates rounded cnv rectangles though. :)
    2024-09-21 22-58-59.mp4

    (i scale them in that video - so this is not a glitch, but many wide rectangles)

    EDIT: this patch only works with a specific 3x8bit bmp format. so it would certainly look a bit funny with other formats.

    posted in technical issues read more
  • ben.wes

    you can check the help patch of this simplex~ external here (it's also on deken) - it includes very basic vanilla 2d and 3d oscilloscopes: https://github.com/ben-wes/pd-simplex

    posted in patch~ read more
  • ben.wes

    i realized that i obviously didn't follow all categories on this forum - so i missed your post and this response comes a little late. anyway: thanks for sharing! it reminded me of my approach for a vanilla pitch tracker. i now also realized that i didn't need a [block 1] for a 1-sample delay (which was there until today), but could use [rzero~] instead:

    image.png

    patch: zc_pitchtrack~.pd

    posted in extra~ read more
  • ben.wes

    @manuels said:

    Could certainly be optimized in some ways (especially using ELSE objects). But does it even work? I don't have a good method to test it, unfortunately.

    nice! - i like this counter for samples per phase:

    Screenshot 2024-08-14 at 23.22.05.png

    ... from what i tested: it behaves perfectly well up to nyquist - although also in this range, there are sometimes consecutive non-zero samples (which i'm still not 100% sure if valid. see the 1, 1 in the middle below. the blue graph is the scaled offset per phase).
    image.png

    posted in technical issues read more
  • ben.wes

    here's a completely vanilla version of the delay variant avoiding [expr~] (with some rather ugly hacks to achieve exact values of -1, 0 and 1). it works for all frequency input < nyquist (for nyquist, the > 0.5 check fails):

    image.png

    velvet-delay-vanilla~.pd

    EDIT: seeing now that this doesn't really add anything to @ddw_music's approach at https://forum.pdpatchrepo.info/topic/13317/looking-for-velvet-noise-generator/52 - except for my failed try to achieve non-interpolated values with delread4~.

    posted in technical issues read more
  • ben.wes

    @whale-av said:

    So...? please check this but [print~] produces output consistent with the rules as I understand them.....

    i think, you built a version at nyquist frequency! :)

    probably, i should read more into it (no time right now unfortunately) ... i'm not sure if velvet noise needs to meet the requirement of the random position of the impulses in each cycle. obviously, that's not possible anymore when a cycle is just 2 samples.

    the idea in the version mostly discussed above is exactly that though: there's one impulse per cycle and this impulse should be placed at a random position in its cycle with random polarity. and the cycles can be of any length (samplerate / frequency).

    this graph in https://acris.aalto.fi/ws/portalfiles/portal/13412521/applsci_07_00483_v2.pdf (page 4) is showing that quite well:

    Screenshot 2024-08-13 at 13.06.18.png

    EDIT: this brings up an important question though (which is also probably answered in the papers): are consecutive values of 1, 1, 1, -1, -1, -1 or -1, 1 allowed? not sure ... but these wouldn't be actual impulses anymore then, right?

    posted in technical issues read more
  • ben.wes

    @porres said:

    I can't feel any perceptual difference with just positive impulses, for instance....

    not sure if i understand correctly ... you mean you don't hear a difference between the mixed impulses and just positive ones?
    in that case, you might need to check higher frequencies and tune it louder. :)

    spectrograph~ (with db and log display) for both versions at ~3kHz:

    "balanced":
    image.png

    positive only (missing some lower frequencies):
    Screenshot 2024-08-13 at 09.17.31.png

    about the purpose: https://acris.aalto.fi/ws/portalfiles/portal/13412521/applsci_07_00483_v2.pdf talks about an application for late reverberation. i didn't completely read it, i admit - but i assume, for that purpose, the impulses should have both polarities.

    posted in technical issues read more
  • ben.wes

    @manuels said:

    @ben.wes Did you do the testing with non-integer fractions of your sampling frequency? You mentioned 3kHz at 48kHz SR as an example, which shouldn't make problems ....

    sorry for the confusion! - it weren't exactly 3kHz, since I'm setting the frequency with a logarithmic slider. tested once more with 3026.2Hz here now (which was probably also the value yesterday). i'm displaying the last 3 outlets here that i added to your patch (additionally offsetting the phasor for visual clarity):
    image.png

    Screenshot 2024-08-13 at 09.00.56.png

    posted in technical issues read more
Internal error.

Oops! Looks like something went wrong!