Cyclone 0.9.4 released celebrating the 10th anniversary of my repository
Celebrating the 10th anniversary (yikes, a whole decade of my repository today (February 21st 2026), I have wrapped an update for Cyclone. Check https://github.com/porres/pd-cyclone/releases/tag/cyclone_0.9.4 and find binaries in deken for mac/linux/windows and raspberry pi. And please let me know if you have any problems with these binaries!
Last year I made a minor update (0.9.3) a couple of months after the 0.9.2 release, but I never formalized a release update with binaries into deken and an announcement. Let's just skip that, but here's the changelog for 0.9.3 while we're at it:
- Fixed bug in [unmerge] where it wouldn't deal well with mixed floats and symbols in a list
- Fixed crash and resize bug in [zl.group]/[zl.stream]
This one made it into the PlugData 0.9.2 release recently, by the way.
I was actually hoping I'd have a 1.0 right now to celebrate my 10 years involved with Cyclone, but I failed miserably. The plan is to release that along with PlugData 1.0 as well, whenever that happens (some updates to [mtr] is what's missing for me to call it 1.0.0 already, by the way).
So anyway, here's 0.9.4!
Many cosmetic changes in this one, which I'm kinda proud of. I did finally add a menu entry so people can disable the object browser plugin, while I also improved it to include browsing in more nesting level depth.

So, if you think my beautiful and hard work designing a nice plug-in browser is not welcome, you can go to Preferences=>Cyclone-Browser-plugin and disable it.
Other more cosmetic changes are that I made some updates to the text editing window of objects like [coll]. One of the things is that it now uses Pd's "theme" colors in it (so Pd >= 0.56 is needed)! I also made some other changes like being able to use CTRL+S to save and CTRL+W to close the window. Also, typing and editing it on the window now marks the patch as dirty if you have the "@embed" flag enabled (same is true for [table]).

There are some other bug fixes, and here's a full changelog if you're curious about all the details.
CHANGELOG:
- We now have a preferences menu to disable the browser plugin! See Preferences => Cyclone-Browser-plugin. If you always hated this, disable it and save the setting. The browsing plugin is now also better organized with more nesting levels.
- [prob] removed the functionality for viewing the data because the MAX original doesn't have it and it makes no sense, cause we can't edit it and save it and you can already see the data with "dump" (which prints on the terminal window). When embedding, now we also have a dirty flag when setting data, just like [cyclone/coll] and [cyclone/table] (even though the MAX original doesn't do it).
- Text Editing Window Improvements: colors now adapt to Pd's theme (so >= 0.56 is needed) and font size also adapts to patch's font size. Allow ctrl+s to save and ctrl+w to close the window. This affects [cyclone/seq], [cyclone/coll], [cyclone/table] and [cyclone]/[capture~] (again, [cyclone/prob] doesn't have it anymore). Also make manually editing the window and saving it sets the dirty flag on the patch for [coll] and [table] (and not only with changes via messages as before).
- [coll]/[table] improved dirty management as it wouldn't mark dirty if the owning canvas wasn't visible (which was a stupid hack to not mark it as dirty when loading the patch).
- [coll] now forces a correct order of args and deals with 0/1-length list messages.
- [table] fixed trying to open the name argument as if it was a file. Now resizing updates the editing window if it is opened.
- Improved [cross~], it is now a 4th order filter (even though Max claims theirs is a 3rd order filter). The last one didn't sound good when adding the lowpass and highpass output.
- [scope~] improved resizing handle mechanism
- [comment] fixed "mouse release bug" annoying error and initialization with a zoomed patch.
- Fixed many typos in the docs.
- Improved github actions and added Raspberry Pi binaries
- Fixed CMake build for compiling a single binary
Cheers
Alexandre Torres Porres
ELSE+tutorail version 1.0-0 RC14 is out
Hi, after a test phase with Windows errors, it seems we solved the windows compilation issues and here's the update I'm wrapping up for the PdMAXCon in a few days! I just have to ship this, but I had a new [streamin~] and [streamout~] objects for streaming and I'm leaving it out for now cause the build for windows is still failing. Hold on for that. Note that older ELSE versions are not working on Pd 0.56. This one requires 0.56-1!
My last update aimed at a PlugData update but that didn't happen yet, though there's a PlugData 0.9-2 test release, based on 0.55-2. This new ELSE update will hopefully come soon right after at PlugData 0.9.3, or maybe even a newer update. I was hoping to better coordinate releases but it's not happening 
There's a lot of new stuff, but I'm mainly focusing on my MERDA modules, which I'll show at PdMAXCon. They're coming out fancy with lots of stuff and details I can't get into. There's lots of eye candy, like Implementing a new mechanism for minimizing and maximizing the GUI or opening in a new window. Added "tab" navigation for most knobs in the modules. This is just the tip of the iceberg as there's lots of work to support this, so I made several changes and updates to [knob] and [button]. The [knob] object also gained several features and it became a feature-creep monster. Now I'm also including mouse wheel scrolling, for one thing.
There's a new "Super Saw/Square" oscillator (a sum of 7 oscillators based on JP-8000) abstraction object that also became a MERDA module. I wanna highlight a new [mix~] object made for it that makes convenient mixing and panning MC connections. There's also a cool [arpeggiator] abstraction, in the next release I hope I'll have a new MERDA module with that included.
This is the main deal! There are 15 new objects, I'd like to also mention mid/side encoding and stereo widening, and another one for envelope following. Total number of objects now is 587! The tutorial now has 561 examples and an expanded subchapter about stereo imaging and improvements to envelope following.
It's up in deken, let me know if something is wrong...
There are of course many many other numerous changes and fixes. Detailed changelog in https://github.com/porres/pd-else/releases/tag/v.1.0-rc14
As of now, I started being more careful with breaking changes. I'm still allowing old patches to run, but telling people to adapt to new stuff. For instance, I had a [del~ in] and [del~ out] object now split into 2 ([del.in~]/[del.out~]) thanks to a new functionality in Pd 0.56-0, but you can still call the old [del~] object (for now). Like I've been saying, I'm just waiting for PlugData 1.0 to call this a final release as well.
Please support me on https://patreon.com/porres
#puredata #pdvanilla
cheers
Alex
Number Box "sample rate"
@whale-av Let me rephrase your answers to test my understanding:
My test doesn't cause the slider to produce more intermediate values because I'm moving the slider really fast, and the logical time values are not meaningful because the slider is moved in real time, whereas the computer is free to process logical time faster than real time.
I've always suspected I was living in real time, but it's reassuring to have hard evidence 
I combined your last test with mine, and got the same result. I'm concluding that metro intervals shorter than an audio tick preserve the order of processing, but the evaluation of the following graph may be bunched up in-between audio ticks, i.e. so fast that the slider is effectively not moving as it is being polled.
How did I do?
ELSE 1.0-0 RC13 with Live Electronics Tutorial Released
Ok, the cat is out of the bag --> https://github.com/porres/pd-else/releases/tag/1.0-rc13 I'm officialy announcing the update and uploaded binaries to deken for mac (intel/arm), Win and Linux. It all looks ok but tell me if you see something funny please. There's also a raspberry pi binary but not working 100%yet and we'll still look into that. Hopefully someone could help me/us with it. I might make another upload just for the pi later on if/when we figure it out. Find release notes and changelog below.
RELEASE NOTES:
Please support me on Patreon https://www.patreon.com/porres I'll now try to add special content for subscribers. You can follow me on instagram as well if you like... I'm always posting Pd development stuff over there https://www.instagram.com/alexandre.torres.porres/
It's been a little bit over 7 months since the last update and I almost broke the record for taking too long to release an update (which had happened in my previous update). So yeah, there's just too much to talk about! I guess the delays in releasing updates is because it's been a little tricky and hard to sync the release cycles of ELSE with PlugData, which includes ELSE in its download.
Plugdata 0.9.2 should come out soon with ELSE RC13 and it's supposedly the last update before 1.0.0, so I've heard. And the plans was to get to that still in 2025! This means ELSE could be at its last "Release Candidate" phase as I'm aiming to sync the final release with PlugData. Until then, I'll still make breaking changes and I can't wait until I can't do that anymore as I really feel bad. On the other hand, it's kind of inevitable when I'm always adding new stuff and redesigning and reconfiguring objects to include more functionalities. And I always got a lot of new stuff! So I'm thinking that I will eventually try some mechanism like Pd's compatibility flag or something. I'll try to come up with something like that in the next update.
This update has 22 new objects for a total of 573 and 26 new examples in my tutorial for a total of 554 examples. Let's dive into the highlights (see full changelog below after the release notes).
-
Multichannel Support: Last release had 92 MC aware objects, now it's 139! Over a 50% increase that include old and new objects (all the new ones have been coming with MC support). Virtually all oscillators and envelope generators now have MC support, plus some other random ones. Let me highlight the new [lace~]/[delace~] objects that are 'MC' tools that perform interleave/deinterleave in Multichannel connections. My bare minimum number of objects "to start with" would be at least a bit over half the number of signal objects. That was my target for 1.0! ELSE right now has 319 signal objects, so that'd be at least 160. I will definitely pass this milestone in the next update. I guess a good number of MC objects would be around 75% of the signal objects. I will aim for that as soon as I can. Some objects simply can't be MC at all, so 100% will never be the case, but maybe an ideal 90% eventually? We'll see... I am just proud and happy that ELSE is taking such a big jump on MC awareness in less than a couple years.
-
Envelope generators ([adsr~]/[asr~]/[envgen~]/[function~]) now have more curve options. For [adsr~]/[asr~] the default is now a new log curve that you can set the curve parameter (and was 'stolen' from SuperCollider). A new [smooth~] family of objects perform the same kind of curved smoothening for alternating inputs - [envgen~] and [function~] also have that but also '1-pole' filtering, 'sine' and 'hann' curves. You can now trigger [adsr~] and [asr~] with impulses.
-
The [play.file~] object now supports even more file formats besides MP3 and stuff. Hey, you can even stream the supported formats from weblinks! The [sfload] object (which loads files into arrays) also gained support for more formats and can download from weblinks as well! It also has a new threaded mode, so loading big files won't choke Pd. It now also outputs the file information, which is a way to tell you when loading finished in threaded mode. The [sample~], [player~], [gran.player~] and [pvoc.player~] objects are now also based on [sfload], so they support all these file formats!!! Now [sample~] and [tabplayer~] are integrated in a way that [tabplayer~] is always aware of the sample rate of the file loaded in [sample~] (so it reads in the "correct speed"). A new [sfinfo] object is able to extract looping regions and instrument metadata information from AIFF files (which is something I wanted for ages) - it should do more stuff in the future.
-
[knob] has become the ultimate featured bloated creep GUI I always feared and avoided. MAX is envy! but I'm happy with this structure and I want to replicate in other GUIs in the future (yeah, I got plans to offer alternatives to all iemguis). I wanna highlight a new 'param' symbol I added that allows you to remotely set a particular method in an object, so you don't to connect to a "method $1" message and you can even do this wirelessly with a send symbol. [knob] now also acts like a number box, where you can type in the value, which may also be displayed in different ways or the value can be sent elsewhere via another send symbol so you can temper with it using [makefilename] or [else/format]. I've been using this for the MERDA modules and it's really cool.
-
We finally have a [popmenu] GUI object! This was in my to do list forever and was crucial to improve the MERDA modules to set waveforms, instruments and whatnot.
-
Let's about MERDA, the "Modular Euroracks Dancing Along" subset of abstractions in ELSE. It was first released in the last update and it's been driving lots of the development in ELSE as you can see. I now added a MIDI Learn feature for all knobs that feels great and quite handy! There are many fixes and improvements in general and some new modules. I wanna highlight the new [sfont.m~] module, which loads "sound font" banks and you can just click on a [popmenu] to choose the instrument you want. The default bank has numerous (hundreds) options and also comes with PlugData. The sequencer module [seq8.m~] was rather worthless but it's now a whole new cool thingie. It allows you to set pitches with symbols and even has quarter tone resolution. I added a right outlet to send impulses to trigger envelopes and stuff (there's still more stuff of course, see full changelog below).
-
There are newly designed/renamed/recreated [resonbank~]/[resonbank2~] objects that are well suited for Modal Synthesis.
-
What actually drives my development is my Live Electronics tutorial, which got a fair upgrade with a new chapter on Modal Synthesis amongst other things, such as new subtractive synthesis examples and a revision of envelope generators with examples on AHDSR and DAHDSR - by the way, there are new gaterelease~/gatedelay~ objects for handling envelopes (and other processes).
-
I have to thank some people. Tim added 'zoom' to the [pic] object, as well as an image offset. Tim also implemented a new and better technique for bandlimited oscillators. Ben Wesh gave me a new [scope3d~] GUI object, pretty cool, that plots an oscilloscope in 3 dimensions, which is coded in LUA - and ELSE has been carrying a modified version of [pdlua] because it now depends on it for a couple of GUIs. Tim and Ben made many improvements to [pdlua] (as well as Albert Graef, of course).
-
For more new objects, let me also tell you about the simple and cool [float2imp~], that is based on [vline~] and can convert floats to impulses with sample accuracy (don't know why I didn't think of that earlier). A new [tanh~] object has Multichannel support. A bit earlier I made an update to Cyclone that actually "borrows" and includes this one from ELSE instead of its original one (which does not have Multichannel support). PlugData users will load the one from ELSE. This is another tiny step that sort of integrates ELSE and Cyclone, specially for PlugData users.
happy patching.
CHANGELOG:
LIBRARY:
Breaking changes:
- [adsr~]/[asr~]: now a gate off before reaching the sustain point does not start the release right away (this allows you to trigger it with impulses). There's a new mode just for immediate release. There's a new exponential setting for curve factors, the old 'log' mode is renamed to 'lag' as it's the same as used in the [lag~] object. For [adsr~], a bang now is not "retrigger", but an impulse at control rate, there's a new 'retrigger' message for control rate retriggering (and now it only retriggers if the gate is on). For [asr~] a bang now also works like an impulse.
- [sample~]: no more 'load' message, args to 'open' message changed, size is now only in 'ms'.
- [format]: outputs are now always symbols, before you could get float outputs. Also, we just have a simplified symbol output, no more lists or anythings. Hopefully I'll be able to get the 'list' output back, but it involved some bugs that I couldn't fix so I just removed it. You cannot use bangs and lists in secondary inlets no more (this is cylone/max crappy paradigm we don't want here). Bang method was actually removed as well.
- [pack2]: no more support for anythings, also no more support for lists in secondary inlets and output has a list selector (I wanna make this more Pd like and not a silly clone from MAX's [pak], cause fuck MAX).
- [merge]/[unmerge]/[group]: no more '-trim' flag (again, respecting pd's usual list paradigm), in [merge] now there's no more 'hot' argument and a bang now represents an empty list and inlets initialized with empty lists
- [mono]: 1st argument is now 'glide' in ms.
- [sfont~] now uses 'mma' for bank selection (this alters how CC messages set the bank number).
- [player~]/[play.file~]: 'open' message does not play files right away anymore.
- [tabplayer~]/[player~]: play message without args now play at the default settings (whole file at regular speed).
- [envgen~]: removed the 'maxsustain' parameter, use the new [gaterelease~] or [gaterelease] objects instead. Removed the rightmost inlet just to set envelopes, now a list input only sets the envelope and doesn't trigger it. The 'set' message is then removed.
- [envgen~]/[function~]: simplified and got rid of '-exp' flag and message, also deleted 'expl' and 'expi' messages. A new 'curve' and cimpler message sets exponential factors for all or individual segments, and includes more curve formats.
- [knob]: 'esc' key now deactivates the object. The 'ticks' message is renamed to 'steps' and there is a new 'ticks' message that toggles showing ticks on and off. The 'start' message has been renamed to 'arcstart'. The 'outline' message has been renamed to 'square' for better clarity. Design changed a bit to make it like it is in PlugData (they won), so we now fill the whole background color when in 'square mode' and the knob circle has an 85% proportion in this case inside the full 100% square size (so it grows bigger when not in 'square' mode). Now, by default, the GUI is in a new 'loadbang' mode (I don't think this will influence old patches). I'm afraid some old patches might behave really weird since I added a lot of new stuff. I changed the 'load' message behaviour to not update the object (this can arguably be considered a bug fix).
- [wavetable~], [bl.wavetable~] and [wt2d~]: 'set' message now sets frequencies because of the MC support in [wt~] and [wt2d~], while there's a new 'table' method to set the table name.
- [gbman~]/[cusp~] list method is now for MC, old list method is now renamed back to an old 'coeffs' method.
- [f2s~]/[float2sig~] default value is now 10 ms.
- [op] now behaves like [*~] where the smaller list wraps til reaching the size of the longer one.
- [list.seq] does not loop anymore by default.
- [impseq~] list input removed, use the new [float2imp~] object to convert floats to impulses.
- [resonant~] now has 'q' as the default.
- [resonant2~] has been removed.
- [decay2~] has also been removed ([asr~] much better).
- [vcf2~] has been renamed to [resonator2~].
- [resonbank~]/[resonbank2~] have basically been deleted and replaced by new objects with the same name... [resonator~] is based on a new [resonator~] object which is similar to [resonant~] and [resonbank2~] is now based on [resonator2~] (old [vcf2~] instead of [resonant2~] that got deleted). These are well suited objects for Modal Synthesis.
- [oscbank~] now uses a 'partial' list and not a frequency list. The freq input now defaults to '1' and this makes [oscbank2~] completely obsolete.
- [oscbank2~] has been deleted since it became completely obsolete.
- [sfload] load message changed the behaviour a bit.
Enhancements/fixes/other changes:
- [adsr~]: We have now a new mode for immediate release (see breaking changes above, I'm not repeating it). Fixed ADSR signal inputs (it was simply not really working, specially for linear). Fixed status output for MC signals. There's a new curve parameter that allows you to set the curvature.
- [asr~] I actually just made the new [adsr~] code into a new [asr~] code as a simplified version (as it was before)... so it's got the same impromevents/fixes.
- [play.file~]: added support for more file formats and even weblinks for online streaming!
- [sfload]: added an outlet to output information, added threaded mode, added support for more file formats and even weblinks for downloading.
- [sample~], [player~], [gran.player~] and [pvoc.player~] are now also based on [sfload], so they support more file formats!
- [sample~]: improved extension management with [file splitext].
- [sample~] and [tabplayer~] now are automatically integrated in a way that [tabplayer~] is always aware of the sample rate of the file loaded in [sample~], so it automatically adjusts the reading speed if it is different than the one Pd is running with.
- [numbox~]'s number display is not preceded by "~" anymore (that was just kinda stupid to have).
- [format]: fixed issues where empty symbols and symbols with escaped spaces didn't work. Added support '%a' and '%A' type. Added support for an escaped 'space' flag. Improved and added support for length modifiers. Improved syntax check which prevents a crash. Improved documentation.
- [knob]: added new 'param', 'var', 'savestate', 'read only', 'loadbang', "active", "reset" and 'ticks' methods. Added the possibility to type in number values and also modes on how to display these number values, plus new send symbols for 'activity', 'typing', 'tab' and 'enter'. New design more like plugdata. Changed some shortcuts to make it simpler. If you have the yet unreleased Pd 0.56-0 you can also use 'double clicking' in the same way that works in PlugData. Properties were also significantly improved (I'm finally starting to learn how to deal with this tcl/tk thingie). Yup, a lot of shit here...
- [autofade2~]/[autofade2.mc~]: fixed immediate jump up for 0 ramp up.
- [synth~]: fixed polyphony bug.
- [metronome~]: fixed bug with 'set' message.
- [midi2note]: fixed range (octaves 0-8).
- [pulsecount~]: fixed reset count to not output immediately, added bang to reset counter at control rate
- [click]: fixed regression bug where it stopped working.
- [else]: new 'dir' method to output ELSE's binary directory in a new rightmost outlet. The print information also includes the directory.
- [pic]: added zoom capability finally (thanks to tim schoen) and added offset message (also thanks to tim).
- [store]: added 'sort' functionality.
- [scales]: fixed octave number argument. Added functionality to allow octave number as part of the note symbol.
- [mono]: added 'glide' parameter, as in [mono~].
- [pluck~]: fixed list input.
- [rescale]/[rescale~]: added a "reverse log" mode.
- [limit]: added a new second ignore mode.
- [graph~]: added an external source input for plotting the graph and a 'clear' message.
- [canvas.setname]: added a new argument for "abstraction mode" and methods to set name, depth (and mode).
- [midi.learn]: added a new argument for "abstraction mode", fixed 'dirty' message sent to parent.
- [brickwall~]: fixed initialization.
- [list.seq]: added a loop mode and a 2nd outlet to send a bang when the sequence is done.
- [delete]: fixed index for positive numbers.
- [dust~]: added 'list', 'set' and '-mc' flag for managing the already existing Multichannel capabilities.
- Thanks to Tim we have many fixes and a whole new technique for band limited oscillators. Now [bl.saw~], [bl.saw2~], [bl.vsaw~], [bl.square~], [bl.tri~], [bl.imp~] and [bl.imp2~] have been redesigned to implement elliptic blep, which should provide better anti-aliasing.
- [parabolic~] now uses and internal wavetable for more efficiency.
- [resonant~]: added 'bw' resonance mode.
- [lowpass~]/[highpass~]: added 't60' resonance mode.
- [quantizer~]/[quantizer]: added a new mode, which combines floor (for negative) and ceil (for positive) values.
- [crusher~]: now uses the new [quantizer~] mode from above (arguably a breaking change).
- [envgen~]: fixed a bug (actually a misconception) where ramps started one sample earlier. Fixed 0-length lines. Added a possibility to set time in samples instead of ms. Maximum number of lines is now 1024. Added loop mode. Added many curve options (sin/hann/log curve/lag).
- [function~]: Added many curve options (sin/hann/log curve/lag).
- [The out~] family of abstractions now use [bitnormal~] so you won't blow your speakers beyond repair in edge cases.
- [trig.delay~]/[trig.delay2~]: fixed bug where impulse values different than '1' didn't work.
- Added MC support to: [trig.delay~], [trig.delay2~], [gatehold~], [vca.m~], [gain2~], [decay~], [asr~], [envgen~], [function~], [bl.osc~], [bl.saw~], [bl.saw2~], [bl.vsaw~], [bl.square~], [bl.tri~], [bl.imp~], [bl.imp2~], [imp2~], [tri~], [saw~], [saw2~], [vsaw~], [square~], [pulse~], [parabolic~], [gaussian~], [wavetable~], [wt2d~], [randpulse~], [randpulse2~], [stepnoise~], [rampnoise~] [pink~], [gbamn~], [cusp~], [gray~] and [white~].
- Also added MIDI input and soft sync to [imp2~], [tri~], [saw~], [saw2~], [vsaw~], [square~], [pulse~], [gaussian~] and [parabolic~].
- [wavetable~] and [wt2d~] gained args to set xfading.
- Updated pdlua to 0.12.23.
- M.E.R.D.A: Added MIDI-LEARN for all modules (this is only for the knobs). Replaced some number boxes that were attached to knobs by an internal number display mechanism (new feature from knob). Improved interface of [gendyn.m~]. Preset/symbol name fixes to [flanger.m~]. Now we have automatic MIDI mode detection for [plaits.m~] and [pluck.m~] when no signals are connected (still trying to get plaits right, huh? Yup! And bow MIDI input with monophony and trigger mode has been fixed in [plaits.m~]). Added MC support to [vca.m~]. Increased range of [drive.m~] down to 0.1. Changed some objects to include the new [popmenu] GUI. [vco.m~] now uses the new MC functionalities of oscillators and doesn't need to load abstractions into [clone], I hope it makes this more efficient and clean. The [seq8.m~] module was worthless and got a decent upgrade, it's practically a new module. Added new modules (see below). Note that MERDA is still at alpha development phase, much experimental. Expect changes as it evolves.
- 22 new objects: [float2imp~], [lace], [delace], [lace~], [delace~], [gatehold], [gatedelay],[gatedelay~], [gaterelease~], [gaterelease], [popmenu], [scope3d~], [tanh~], [resonator~], [sfinfo], [smooth], [smooth2], [smooth~], [smooth2~], [dbgain~], [level~] plus [crusher.m~], [sfont.m~] and [level.m~] MERDA Modules.
Objects count: total of 573 (319 signal objects [139 of which are MC aware] and 254 control objects)!
- 323 coded objects (210 signal objects / 113 control objects)
- 227 abstractions objects (87 signal objects / 140 control objects)
- 23 MERDA modular abstractions (22 audio / 1 control)
TUTORIAL:
- New examples and revisions to add the new objects, features and breaking changes in ELSE.
- Added the MERDA modules into the examples for reference.
- Revised section on envelopes.
- New subtractive synthesis examples.
- New chapter on Modal Synthesis.
- Total number of examples is now 554! (26 new ones)
Windows - 3 beginner questions
The library issue is resolved by adding mrpeach/ before udpreceive and unpackosc. FIXED
I am now able to edit the startup path. I used the .exe from the msp.ucsd.edu page rather than the puredata.info page (which initially crashed). i have not checked that one again. FIXED
The font issue however remains. NOT FIXED
Also not fixed is my patch itself
I get:
test.pd 15 0 16 0 (???->???) connection failed
test.pd 16 0 17 0 (???->???) connection failed
test.pd 17 0 18 0 (???->???) connection failed
test.pd 18 0 19 0 (???->???) connection failed
test.pd 19 0 4 0 (???->???) connection failed
test.pd 18 1 20 0 (???->???) connection failed
test.pd 20 0 5 1 (???->???) connection failed
Here is my patch:
#N canvas 10 10 600 400 10;
#X obj 10 10 declare -lib mrpeach;
#X obj 100 100 loadbang;
#X msg 150 150 440;
#X obj 150 200 f;
#X obj 150 250 osc~;
#X msg 250 150 0.5;
#X obj 250 200 *~;
#X obj 250 300 dac~;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 6 0;
#X connect 5 0 6 1;
#X connect 6 0 7 0;
#X connect 6 0 7 1;
#X obj 350 100 mrpeach/udpreceive 8000;
#X obj 350 150 mrpeach/unpackOSC;
#X obj 350 200 oscparse;
#X obj 350 250 route /frequency /amplitude;
#X obj 350 300 f;
#X obj 350 350 f;
#X connect 15 0 16 0;
#X connect 16 0 17 0;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 19 0 4 0;
#X connect 18 1 20 0;
#X connect 20 0 5 1;
I am trying to have a tone play at a fixed frequency and listen to port 8000 for information via osc. The tone playing itself works. The communication does not. I dont really know what I am doing here with the pure data code, so please bear with me (hopefully it is OK since the patch is very short).
Thank you !
Pd version 0.55-0 released
Miller Puckette to Pd-announce: "Pd version 0.55-0 is available from https://msp.ucsd.edu/software.htm or (source only) via github: https://github.com/pure-data/pure-data
cheers
Miller"
Release notes:
------------------ 0.55-0 ------------------------------
The [osc~], [cos~] and [vcf~] objects now rely on a 2048 points cosine table. The table size used to be 512-point for fast, approximate calculations, which was adequate for most "computer music" applications in the 90s when this was decided (and at that time there could be a serious performance penalty for using larger tables). To get the original 512-point tables you can run Pd with compatiblity level 0.54. Also, in systems with very tight memory constraints (such as Espressif ESP32), Pd can be recompiled with the C preprocessor variable COSTABLESIZE set to 512 to get the old memory footprint.
Many bug fixes and code-level updates and improvements, notably to libpd and for emscripten support thanks to Claude Heiland-Allen and IOhannes, Dan, and Christof. The emscripten support, in particular, should someday allow Pd to run in a web browser.
Also thanks to Christof, you can now use just 'set' to unset [receive~] and [throw~] objects, plus a much improved audio interfacing and related scheduler updates.
Many documentation updates, thanks to Alexandre Porres, Ben Wesch, and others. Most notably several updates and edits were made to Pd's HTML manual, specially a new section on 'advanced editing techniques' (aka 'intelligent patching').
The [oscparse] object was updated by Porres to allow numeric addresses via a new '-n' flag and a right outlet was added to output split point between address and message.
Minor improvements to the [file] object by IOhannes, such as properly expanding '~' to home directory and allowing [file which] to also search paths relative to the parent patch.
64-bit soundfile reading and writing support by Dan Wilcox for [readsf~], [writesf~] and [soundfiler].
Updates to language support.
Poor performance in Sequencer
hi, it doesn't have anything to do with the audio, it is because the engine for the UI is simple (TK) and will slow down a computer a lot when being updated faster than the computer monitors refresh rate. TK isn't really meant to draw graphics that fast but pure data allows you to send updates to UI immediately at audio rate. I even have a gaming desktop and if I crank the tempo up to 600 PD starts using a ton of CPU and stops responding.
so cheap monitors typically are at 30-60hz, lets just stay safe and say 30 hz - hz to seconds is 1/30 = 0.033 to millis is *1000 = 33 aka below [metro 33], 1/60 is 16.7 aka below [metro 16.7], now if you had a 240hz monitor you could go a lot lower but its probaby easier to avoid updates to UI below [metro 33] and for sure not below [metro 17]
Theoretically it's not frozen but because it continues to get updates But because there's nothing in the future thats going to slow it down it is frozen until I kill wish in the task manager or reboot.
UI includes - number boxes, bang objects, toggles, h/v radios, sliders,
for your patch its all the bang updates. I'll give you an updated patch to try out
l
Open Sound Control timestamps
As a test case to illustrate what I mean, I'll use SC to generate five messages with randomly shuffled timestamp offsets.
n = NetAddr("127.0.0.1", 57120);
OSCdef(\x, { |msg, time| [time, msg].postln }, '/test');
(
((1..5).scramble * 0.1).do { |offset, i|
n.sendBundle(offset, ['/test', i, offset])
};
)
[ 1487.2653768999, [ /test, 0, 0.10000000149012 ] ]
[ 1487.4653768998, [ /test, 1, 0.30000001192093 ] ]
[ 1487.6653769, [ /test, 2, 0.5 ] ]
[ 1487.3653768999, [ /test, 3, 0.20000000298023 ] ]
[ 1487.5653768999, [ /test, 4, 0.40000000596046 ] ]
The [text sequence] approach I believe would be to add into the [text] repository, subtracting the incoming message time from the last time in the repository and using that as a delta. But in this case, some of the deltas would be negative.
"When is this ever going to happen?" You can't be sure it won't. You could have one thread sending immediate messages (offset = 0) and another thread sending timestamped messages. An immediate message quickly following a timestamped message could have a negative delta.
So you have to be able to handle it.
A priority-queue-based scheduler can do this.

print: 2178.25 /test 0 0.1
print: 2478.18 /test 1 0.4
print: 2378.15 /test 2 0.3
print: 2578.14 /test 3 0.5
print: 2278.13 /test 4 0.2
sched_out: 2178.25 /test 0 0.1
sched_out: 2278.13 /test 4 0.2
sched_out: 2378.15 /test 2 0.3
sched_out: 2478.18 /test 1 0.4
sched_out: 2578.14 /test 3 0.5
The messages are received in index order (0, 1, 2, 3, 4) but come out of the scheduler in time order, with the correct time deltas.
(Also, continually adding to a text repository for [text sequence] would grow but never shrink. [tick-scheduler] does use [text] internally, but reuses rows after they have been output, so memory consumption should be minimal.)
hjh
can an array object be moved with a metronome, like shift left & then right?
@esaruoho So you don't really want to move it....... you are still looking for a way to have a constant update (while it is actually updating).
Some messages will update the [array] as @oid says..... and there are many......... https://forum.pdpatchrepo.info/topic/10720/change-appearance-of-an-array-by-sending-a-message
But there is only one message that will do so without changing the data or the appearance.....
[;
arrayname rename arrayname(
....... renaming the array with the same name will cause a redraw.
I am a bit loathe to point you in these directions as it will create more fun.....
When an array is updated Pd will send a ping message..... that could be used to update again, but maybe a small delay would be advisable (feedback overflow)..... https://forum.pdpatchrepo.info/topic/11501/get-array-values-when-they-are-updated
For [array define] a copy can be created for display...... could also be done with a [metro]...... https://forum.pdpatchrepo.info/topic/12072/display-an-array-define-array-constantly
But too fast updating will cause dropouts.
David.
How to loop/reset an audio file to the beginning
OK, here are a couple of test patches. Be sure to save them in the same directory with the audio files (to test relative-path file access).
The first one checks the basic behavior of soundfiler. If neither of these tests is OK, then nothing is going to work.
I'm suggesting this test because -- in your original patch, you're using soundfiler with a relative path "G2001.wav" and this is OK. Using [stereofile], you've tried a full path "/Users/...../G1001.wav" and this was not OK. (Also known is that both relative and full paths are fine on my machine.)
Experimentally, that's two variables: soundfiler vs stereofile, and relative vs full path. So it's impossible to say which one of those causes the problem, with the available information. To figure that out, we have to test basic soundfiler usage with both types of path.

Check the Pd console window for "no such file or directory" errors, and copy/paste those errors into your message.
One possible issue here is non-ASCII (non-English) characters. The relative path "G1001.wav" consists entirely of ASCII characters, but based on your first screenshot, I might guess that part of your full path could include characters outside of the 0-127 ASCII code points. I've seen Pd choke on this before. I thought this was fixed in recent versions, but maybe there are still issues in Mac?
Second file tests relative vs full paths with stereofile.

Last -- I added a [print] object into one of the abstractions to verify the "read" message (locally, you don't have this): "read -resize -skip 0 test-audio.wav test3_LEFT test3_RIGHT" -- it's fine.
Last last -- are you using [dac~ 1 2] or something else? The ezoutput~ in my demo patch routes to 1 and 2. If you are using different dac~ channels, this could be another reason why you're hearing left only. (I assumed that you know your studio's channel layout and that you would substitute an appropriate output object.)
hjh

