Methods for 1 unit sample feedback
Different methods of using 1unit sample feedback loops
Why are these important , for doing karplus strong , and for FM operator feedback ( where an operator is a phasor~into cos ~)
The only rules are
1-It needs to be in subpatcher
2- an explicit block~ module has to be inserted 'block~1 '
You can achieve 1 unit feedback with delwrite~ and delread~ ( make sure delay time is 0 )
Or you can use a " tabsend~ tabread~" ,or "tabsend~ tabreceive~" when the tabsend~ method is used , it's crucial that an array is created withe same name .
The size of the array doesn't really matter , since only the first sample of the array is used to write into.
Here are some examples of the different methods
Left is the carrier ( phasor~ into cos~) , right is the modulator with self feedback .
I also added phase shift to the modulator to create a perfect trian gle ,which is only possible with operator feedback and phase shift
Unexpected behavior for 1-sample-block subpatch with multichannel-outlet
i was about to report an issue on the pd github - but since i really don't know what's going on, i thought i'd share this here first and maybe someone has an explanation for it ....
i've been experimenting with a simple patch for random-walking the surface of a sphere. the current algorithm is not very elegant since it uses random steps that don't have equally distributed distances (but rather form the shape of a cube). i use 1-sample-send~/receive~ to feed back the current position for the calculation of the next position. the weird thing is that it works perfectly well if i output my coordinates with 3 outlet~s ... but the result looks different for the exact same algorithm if i output it via 1 multichannel outlet.
so it seems like the outlets are affecting what's happening inside the subpatch?!?
here are 2 screenshots for these 2 cases - with 3 outlets:
with multichannel outlet (the coordinates are no longer on the surface of the sphere, but start to blur into a cubic shape):
and here's the patch for testing (vanilla besides requiring Gem ... and the relevant part is in the 2 subpatches obviously):
spherical_randomwalk_1sampleblock_mc-outlet.pd
Karplus strong and strange issues with fexpr~
these are some pictures with the pd patch and below a spectrogram so you can see what I mean
Using TouchOSC to draw into a 16 step array? communication back'n'forth? Show Array content in TouchOSC?
@esaruoho said:
I could try again, but it looked like UDP required me to know the IP address of both the laptop and the iPad, and that really threw me (i don't know how to figure out what the IP address of the iPad is, or how to make sure it's always the same, same for macOS).
Ah right, for bidirectional communication.
Actually in the netreceive help file, there is a flag for this: "optional -f flag for from address & port outlet (0.51+)".
Help file example prints from: list ::ffff:127.0.0.1 57120
where ::ffff:127.0.0.1
is an IPv6 address.
So...
... should configure the [netsend] to send to the first address from which messages were received (and I did a quick test, which worked). If you enable "Ping" in TouchOSC, then it will automatically send a message to the computer, which will trigger the "connect" logic right away.
Incidentally, I didn't know about this feature (never used the "from" address in Pd). My thought process was, "Well... this is a very common requirement, so let me have a look at the [netreceive] help patch and see if there's anything about 'from'" -- and toward the lower right, there's a [print from] box. Hm. Then, what's different about the [netreceive] feeding it is that it isn't only "-u -b xxxx" but rather "-u -b -f xxxx"... what's that "-f"? Then, looking up from there a little bit, there's a list of object creation flags, where "-f" is explained.
So the solution exists, and documentation for that solution is actually reasonably clear.
i have maybe an hour every 2-3 days to try and get something going, and also feel a bit like there's no "TouchOSC with PureData for idiots" blog-post for iPad / macOS going on, or at least i haven't been able to find it.
This I fully understand.
Pd OSC sending, like this. It won't send anything until after you push a connect ip.ad.dr.ess port
message into the netsend inlet -- as noted above, you can get the parameters for the connect message from [netreceive].
... producing messages like /1/toggle1 1.0
or /1/toggle2 0.0
. This type of message format is what you need to change a control's value on the tablet.
It's also possible to "set" the OSC command path before providing the arguments -- but try the simple way first.
hjh
trying to set PageUp/PageDown to get to the top and the bottom of the canvas - need it in abstraction instead of mainview due to display space considerations
hi, i've got this:
the purpose of which is to use multiple ways of switching between "top of the canvas" and "bottom of the canvas". I think here's a complete list
- a midicontroller (two midi messages) (Loupedeck Live device) (the button-presses on the device sends Midi messages)
- the pageup/pagedown buttons on the keyboard, if available
- shift-° to switch between the top and the bottom of the screen
- Karabiner (macOS) configured mouse buttons to send the very same message
- two red buttons (aligned so that whether in top canvas area or bottom canvas area, the button stays in the same place
..but i'd really prefer to not have this large amount of objects on the main script canvas, taking up space, since space is at a real premium for me. so i'm wondering how i could have this inside an abstraction and still get the same results on the main canvas. any ideas?
if it helps, here's my current main script view:
"Page up" :
"Page down"
so i'm really trying to reduce the amount of extra objects i have on my screen.
if you have any other suggestions on how to reduce the amount of "non-clickable objects" on screen, i'm open for anything.
Karplus-Strong alternative help
I found this reddit post regarding an alternative to the karplus-strong algorithm to generate string sounds. But the snippet provided is in javascript. I tried implementing it in pd but am having a tough time transferring all the JS idioms into pd. Kindly help. Also, please skip the suggestion of using [expr].
help with polyphonic synth
I realized, after posting that, that there are two ways of thinking about the "extra parameters" going into the synth clone, which for lack of a better term I could call "global" vs "local" parameters.
Local parameters are "per-note" -- they are set at the time the note begins, and they hold their value for the duration of the note. The next note (which might overlap) could have completely different values.
Global parameters affect all notes simultaneously. This is the usual way that, for instance, filter frequency works. You twist the filter cutoff knob and all notes' cutoff changes simultaneously (even though each note could have its own filter cutoff envelope).
At minimum, pitch (note number or frequency) and velocity (on/off trigger) should be per-note. Other parameters could be global or local (and you can mix those styles).
As far as I can see, the best way is:
- All local parameters get packed into a list, along with the clone instance number (which is supplied by [poly]). The "local" list goes into the leftmost input, and only the leftmost.
- "Global" parameters add one or more inlets to the right. Note carefully in the [clone] help file that control inlets need to tag their values for specific instances. If we're using these as global parameters, then the tag should be
all
. Signal inlets are always global.
IMO it's best to be consistent about the handling of these input types, to avoid introducing bugs into your patch.
Example with filter cutoff and envelope parameters treated globally:
Example with filter cutoff and envelope parameters treated locally:
(Note: The example patches use the ELSE external library, and the global one uses cyclone.)
Hope this helps. IMO polysynth is a basic use case for any audio programming environment; if what I've posted here can't be easily figured out from the documentation, then it suggests a gap in the help. (One reason why I worked it out is that I teach a class in Pd; if the students ask "how do I make a poly synth?" then I'd better have an answer at the ready. So I tried a few ways and came up with this as a basic template that Just Works... then, just do it that way.)
hjh
faustgen~ - the FAUST compiler embedded in a Pure Data external
Hi all
@Pierre-Guillot this is a terrific project
Thanks for sharing!
I've been using the HOA library and some older stuff form you and others at CICM
Now, I've installed from Deken the faustgen~ object, and as soon as I open the faustgen~-help.pd it delivers tons of errors to the console:
menu_doc_open /Library/Pd/faustgen~ faustgen~-help.pd
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/Pd/faustgen~/faustgen~.pd_darwin: dlopen(/Library/Pd/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/Pd/faustgen~/faustgen~.pd_darwin
Reason: image not found
faustgen~ examples/gain -vec -lv 1
... couldn't create
... you might be able to track this down from the Find menu.
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/Pd/faustgen~/faustgen~.pd_darwin: dlopen(/Library/Pd/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/Pd/faustgen~/faustgen~.pd_darwin
Reason: image not found
faustgen~ examples/dummy
... couldn't create
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/Pd/faustgen~/faustgen~.pd_darwin: dlopen(/Library/Pd/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/Pd/faustgen~/faustgen~.pd_darwin
Reason: image not found
faustgen~ examples/gain
... couldn't create
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/Pd/faustgen~/faustgen~.pd_darwin: dlopen(/Library/Pd/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/Pd/faustgen~/faustgen~.pd_darwin
Reason: image not found
faustgen~ examples/parameters
... couldn't create
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/Pd/faustgen~/faustgen~.pd_darwin: dlopen(/Library/Pd/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/Pd/faustgen~/faustgen~.pd_darwin
Reason: image not found
faustgen~ examples/parameters
... couldn't create
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/PD/faustgen~/faustgen~.pd_darwin: dlopen(/Library/PD/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/PD/faustgen~/faustgen~.pd_darwin
Reason: image not found
/Library/Pd/faustgen~/faustgen~.pd_darwin: dlopen(/Library/Pd/faustgen~/faustgen~.pd_darwin, 10): Library not loaded: @rpath/libRemarks.dylib
Referenced from: /Library/Pd/faustgen~/faustgen~.pd_darwin
Reason: image not found
faustgen~ examples/resonator
... couldn't create
Tries uninstalling, but nothing.
Any clue?
Thanks in advance.
Best,
Alexis
Futurhythmachine (drum mangler type patch)
Hi the features of your patch in the video are astonishing!
But i downloaded the patch and first the wav files are adressed wrongly. In the patch the wav files are declared as breakbeats_breakbeatX but the wavs in the wav folder are in the format breakbeatX. I changed that now the wav files are read correctly. Nevertheless I dont get any sound out of the patch. I followed your instructions. . And something is wrong with the env abstraction perhaps? I get these error messages
BEst Regards
I'm trying to build filters with [pole~] [zero~],but I'm so confused with the factorization of the two-zero transfer function:
I tryed to use Cross multiplication and Conjugate roots to factor the transfer function of two-zero feed-forward filter but...I can‘t get the result like :
(1-Z1z^-1)(1-Z2z^-2) on p362.
The name of the book is Designing Audio Effect Plugins in C++
Same function can be found here but no explation about how to factor:https://ccrma.stanford.edu/~jos/filters/Two_Zero.html