On-air light, trouble receiving int via OSC
@ddw_music Okay, I made the changes but not getting anything back. It looks like pd likes the formatting...I'm not getting any errors. I'm guessing that the X32 isn't replying on the same port we're sending to (with pd), but that's also an assumption. Somehow the livetoolkit software can just display the whole reply. I've read through that OSC doc- it's linked in the original post. I'm not sure if wireshark would help? I'm guessing that if it is on a different port, the return port changes, which would be a hassle... But yeah, the livetoolkit software somehow works great.
In this screenshot, I added the [print packet] since nothing was printing. It looks like nothing from [print reassembled] is printing... The messages in the console are from clicking the messages at the top, sequentially.
In this screenshot, I toggled the mute (with the X32 software that controls the board) and sent the same message, getting a reply that indicates the change I made. So that works.... The send message has no 'value' type, but choosing 'string' works as well as 'no value'.
I had a thought last evening... What if I made a physical button connected to the Pi, that basically mutes channels 1-4 on the board, and also resets the 4 mute toggles in the software? Or even better, automatically did that once per day around 1am or something... I think it would achieve the same effect.
My old coworker was able to query the X32 for channels 1-4 fader values using a python script.. It might be worth looking at that again. It basically turns on a speaker in the studio whenever channels 1-4 are muted so the people in there can hear the 'program' audio, aka, hear what's playing when they aren't talking. I think it uses the /subscribe command but... Not sure. I'm just not much of a python guy, but some of the OSC commands/formatting might glean some information.
@whale-av, "It seems that on/off (enum) and 1/0 (integer) are interchangeable, but it is not clear (yet...!) whether they are part of the message header or data following the header.", yes... I think it's at the end? Not 100% on that. These parts from the OSC x32 doc might help... Whenever I try to send pd messages with tilda's I get errors though.
Thanks for the help .. I'll try to dig up that python script. It works with 2 X32's 24/7 on a single pi and only needs reboots a couple times a year. It would be cool to get this going with pd since I think it's possible...
ELSE 1.0-0 RC12 with Live Electronics Tutorial Released
Hi, it's been a while, here we go:
RELEASE NOTES:
Hi, it's been almost 8 months without an update and I never took this long!!! So there's a lot of new stuff to cover, because it's not like I've been just sleeping around
The reason for the delay is that I'm trying to pair up with the release cycles of PlugData and we're having trouble syncing up. PlugData 0.9.0 came out recently after a delay of 6 months and we couldn't really sync and pair up then... we had no luck in syncing for a new update now, so now I'm just releasing it up cause enough is enough, and hopefully in the next plugdata release we can sync and offer the same version.
As usual, the development pace is always quite busy and I'm just arbitrarily wrapping things up in the middle of adding more and more things that will just have to wait.
First, I had promised support for double precision. I made changes so we can build for it, but it's not really working yet when I uploaded to deken and tested it. So, next time?
And now for the biggest announcement: - I'm finally and officially releasing a new pack as a submodule, which is a set of abstractions inspired by EuroRack Modules, so I'm thinking of VCV like things but into the Pd paradigm. Some similar stuff has been made for Pd over the years, most notably and famously "Automatonism", but I'm really proud of what I'm offering. I'm not trying to pretend Pd is a modular rack and I'm taking advantage of being in Pd. I'm naming this submodule "Modular EuroRacks Dancing Along" (💩 M.E.R.D.A 💩) and I've been working on it for a year and a half now (amongst many other things I do). PlugData has been offering this for a while now, by the way. Not really fully in sync though.
MERDA modules are polyphonic, thanks to multichannel connections introduced in Pd 0.54! There are 20 modules so far and some are quite high level. I'm offering a PLAITS module based on the Mutable Instruments version. I have a 6-Op Phase Modulation module. A "Gendyn" module which is pretty cool. I'm also including an "extra" module that is not really quite a modular thing at all but fits well called "brane", which was a vanilla patch I first wrote like 15 years ago and is a cool granular live sampler and harmonizer. You'll also find the basics, like oscillators, filters, ADSR envelope and stuff I'm still working on. Lastly, a cool thing is that it has a nice presets system that still needs more work but is doing the job so far.
There are ideas and plans to add hundreds more MERDA modules, let's see when and if I can. People can collaborate and help me and create modules that follow the template by the way
Thanks to Tim Schoen, [play.file~] is now a compiled object instead of an abstraction and it supports MP3, FLAC, WAV, AIF, AAC, OGG & OPUS audio file extensions. A new [sfload] object can import these files into arrays (but still needs lots of more work). There are many other player objects in ELSE that can load and play samples but these don't yet support these new formats (hang in there for the next version update).
Tim also worked on new [pdlink] and [pdlink~] objects, which send control and signal data to/from Pd instances, versions and even forks of Pure Data (it's like [send]/[receive] and [send~]/[receive~], all you need is a symbol, no complicated network or OSC configuration!). And yes, it works via UDP between different computers on the same network. And hell yeah, [pdlink~] has multichannel connections support! By the way, you can also communicate to a [pd~] subprocess. This will be part of ELSE and PlugData of course, and will allow easy communication between PlugData and Pd-Vanilla for instance.
The great pd-lib-build system has been replaced for a 'cmake' build process called 'pd.build' by Pierre Guillot. This was supposed to simplify things. Also, the [sfont~] object was a nightmare to build and with several dependencies that was simply hell to manage, now we have a new and much simpler system and NO DEPENDENCIES AT ALL!!! Some very rare file formats with obscure and seldom sound file extensions may not work though... (and I don't care, most and the 'sane' ones will work). The object now also dumps all preset information with a new message and backwards compatibility broke a bit
I'm now back to offering a modified version of [pdlua] as part of ELSE, which has recently seen major upgrades by Tim to support graphics and signals! This is currently needed in ELSE to provide a new version of [circle] that needed to be rewritten in lua so it'd look the same in PlugData. Ideally I'd hope I could only offer compiled GUI objects, but... things are not ideal
The lua loader works by just loading the ELSE library, no need for anything "else". I'm not providing the actual [pdlua] and [pdluax] objects as they are not necessary, and this is basically the only modification. Since PlugData provides support for externals in lua, if you load ELSE you can make use of stuff made for PlugData with lua without the need to install [pdlua] in Pd-Vanilla.
For next, we're working on a [lua] object that will allow inline scripting and will also work for audio signals (again, wait for the next version)! Also for the next version, I'm saving Ben Wesch's nice 3d oscilloscope made in lua (it'll be called [scope3d~]). There's a lot going on with the lua development, which is very exciting.
As for more actual new objects I'm including, we have [vcf2~] and [damp.osc~]. The first is a complex one pole resonant filter that provides a damping oscillation for a ringing time you can set, the next is an oscillator based on it. There's also the new [velvet~] object, a cool and multichannel velvet noise generator that you can also adjust to morph into white noise.
I wasn't able to add multichannel capabilities to many existing objects in ELSE in this one, just a couple of them ([cosine~] and [pimp~]). Total number of objects that are multichannel aware now are: 92! This is almost a third of the number of audio objects in ELSE. I think that a bit over half might be a reasonably desired target. More multichannel support for existing objects to come in the next releases.
Total number of objects in the ELSE library is now 551!
As for the Live Electronics tutorial, as usual, there are new examples for new objects, and I made a good revision of the advanced filter section, where I added many examples to better explain how [slop~] works, with equivalent [fexpr~] implementations.
Total number of examples in the Live Electronics Tutorial is now 528!
There are more details of course, and breaking changes as usual, but these are the highlights! For a full changelog, check https://github.com/porres/pd-else/releases/tag/v.1.0-rc12 (or below at this post).
As mentioned, unfortunately, ELSE RC12 is not yet fully merged, paired up and 100% synced in PlugData. PlugData is now at version 0.9.1, reaching the 1.0 version soon. Since ELSE is currently so tightly synced to the development of PlugData, the idea is to finally offer a final 1.0 version of ELSE when PlugData 1.0 is out. Hence, it's getting closer than ever Hopefully we will have a 100% synced ELSE/PlugData release when 0.9.2 is out (with a RC 13 maybe?).
Please support me on Patreon https://www.patreon.com/porres
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/
cheers
ps. Binaries for mac/linux/windows are available via deken. I needed help for raspberry pi
CHANGELOG:
LIBRARY:
Breaking changes:
- [oscope~] renamed to [scope~]
- [plaits~] changed inlet order of modulation inputs and some method/flags name. If a MIDI pitch of 0 or less input is given, it becomes a '0hz'.
- [gbman~] changed signal output range, it is now filtered to remove DC and rescaled to a sane -1 to 1 audio range.
- [dust~] and [dust2~] go now up to the sample rate and become white noise (removed restriction that forced actual impulses, that is, no conscutive non zero values)
- [cmul~] object removed (this was only used in the old conv~ abstraction to try and reduce a bit the terrible CPU load)
- [findfile] object removed (use vanilla's [file which] now that it has been updated in Pd 0.55-0)
- [voices] swapped retrig modes 0 and 1, 'voices' renamed to 'n', now it always changes voice number by default as in [poly] (this was already happening unintentionally as a bug when one voice was already taken). The 'split' mode was removed (just use [route], will you?)
- [voices~] was also affected by changes in [voices] of course, such as 'voices' message being renamed to 'n'.
- [sr~]/[nyquist] changed output loading time to 'init' bang
- [sample~] object was significantly redesigned and lots of stuff changed, new messages and flags, added support for 64-bit audio files (Pd 0.55 in double precision and ELSE compiled for 64 bits is required for this). Info outlet now also outputs values for lenght in ms and bit depth.
- [sfont~] uses now a simpler build system and this might not load very very rare and unusual sound formats.
Enhancements/fixes/other changes:
- builds for double precision is now supposedly supported, by the way, the build system was changed from pd-lib-builder to pd.build by Pierre Guillot.
- [play.file~] is now a compiled object instead of an abstraction thanks to Tim Schoen, and it supports MP3, FLAC, WAV, AIF, AAC, OGG & OPUS file extensions.
- Support for double precision compilation was improved and should be working for all objects (not yet providing binaries and fully tested yet by the way).
- The ELSE binary now loads a modified version of [pdlua], but no [pdlua] and [pdluax] objects are provided.
- added signal to 2nd inlet of [rm~].
- fixed 'glide' message for [mono~].
- fixed [voices] consistency check bug in rightmost outlet and other minor bugs, added flags for 'n', 'steal' and offset.
- [gain~] and [gain2~] changed learn/forget shortcut
- [knob] fixed sending messages to 'empty' when it shouldn't, ignore nan/inf, prevent a tcl/tk error if lower and upper values are the same; added "learn/forget" messages and shortcut for a midi learn mechanism.
- [mpe.in] now outputs port number and you can select which port to listen to.
- Other MIDI in objects now deal with port number encoded to channel as native Pd objects. Objects affected are [midi.learn], [midi.in], [note.in], [ctl.in], [bend.in], [pgm.in], [touch.in] and [ptouch.in].
- [pi]/[e] now takes a value name argument.
- [sr~]/[nyquist~] take clicks now and a value name argument.
- fixed phase modulation issues with [impulse~] and [pimp~].
- [cosine~] fixed sync input.
- added multichannel features to [cosine~] and [pimp~].
- [plaits~] added a new 'transp' message and a functionality to allow MIDI input to supersede signal connections (needed for the 'merda' version [see below]), fixed MIDI velocity.
- [pluck~] added a new functionality to allow MIDI input to supersede signal connections (needed for the 'merda' version [see below]).
- 26 new objects, [velvet~], [vcf2~], [damp.osc~], [sfload], [pdlink] and [pdlink~], plus abstractions from a newly included submodule called "Modular Euro Racks Dancing Along" (M.E.R.D.A)! Warning, this is all just very very experimental still, the object are: [adsr.m~], [brane.m~], [chorus.m~], [delay.m~], [drive.m~], [flanger.m~], [gendyn.m~], [lfo.m~], [phaser.m~], [plaits.m~], [plate.rev.m~], [pluck.m~], [pm6.m~], [presets.m], [rm.m~], [seq8.m~], [sig.m~], [vca.m~], [vcf.m~] and [vco.m~] (6 of these are multichannel aware).
Objects count: total of 551 (307 signal objects [92 of which are MC aware] and 244 control objects)!
- 311 coded objects (203 signal objects / 108 control objects
- 240 abstractions (104 signal objects / 136 control objects)
TUTORIAL:
- New examples and revisions to add the new objects, features and breaking changes in ELSE.
- Added a couple of examples for network communication via FUDI and [pdlink]/[pdlink~]
- Section 36-Filters(Advanced) revised, added more examples and details on how [slop~] works.
- Total number of examples is now 528!
Singing Bowl Physical Modeling
SingingBowl.pdf singingBowl1.pd
Hi everyone.
I have been thinking about creating a pd patch that is a physical model of a singing bowl or a crystal sound bath type bowl for awhile.
I found a paper on the internet about the physical modeling of a singing bowl.
I uploaded a patch trying to use some of the info in the paper. To use the patch you need the else library to use the compress~ and resonator2~ objects.
The paper says the bowl resonated at 186, 551 1007 1627 and 2337 Hz. I tried to scale the amplitude from the paper to something that would work. I looked at Figure 2 in the paper for info on how the different frequencies decayed.
I added a frequency close to each frequency to get some beating. The paper says that due to the imperfections of a singing bowl each frequency has some ringing to achieve that.
The patch I created kind of sounds like a singing bowl.
Does anyone have ideas to improve on to this? I was also thinking to have each frequency go into a bandpass filter so I can control it's bandwidth, but that seems like a lot of extra work and objects.
Thank you for any input.
Nick
Where does latency come from in Pure Data?
@whale-av Thanks.
It seems the MIDI clock patch does not reset properly. Or, there should be a delay of some sorts when syncing to MIDI clock.
My apologies, this went a bit too far out of scope.
I can nudge the MIDI clock input to 0, and sync it properly.
Just need to figure out how to nudge it automatically.
Thanks a lot,
Raymond
EDIT:
I am resetting the PPQN counter to 0 on FA (MIDI clock PLAY).
But this does not sync properly.
Clock SOURCE according to MIDI spec should give some delay for the target to sync (1ms). Figuring out how to implement that....
24 is a weird number
Video tutorial: PD sync with Ableton Link and with DAW (PlugData)
Been working on this for awhile, only this week had a chance to record the material.
[abl_link~] (in Deken) has existed for awhile for Ableton Link sync. PlugData is more recent for Pd to run in a DAW, with timeline sync.
With both approaches, however, you'll crash into a handful of problems whose solutions are not at all obvious. This project is all about: What does it really take to have Ableton Link, or DAW timeline, sync working properly. 49 minutes a bit longer than I expected.
(This is exposing some rough edges in Pd's interfaces. Unfortunately rough edges can end up being a feedback loop -- something is hard, so people avoid it, and as a result, it remains hard and people continue to avoid it. I hope this will break the feedback loop in some crucial places and make these types of sync more approachable.)
hjh
PS Note one correction in the video's description.
Stop Stream of Bangs after threshold
HI All,
Thanks to all'y'all that responded so quickly with very good guidance. And especially thanks to 'whale-av' for that little bit of brilliant code: [once]. I was able to integrate it and it now works.
The pitch-harmonic content is specific to a dramatic song cycle I am composing, entitled NEUROTICA. In this song that I am composing currently, there is a guitar part that plays a melody on which the guitarist (me) is invited to improvise at times throughout the piece. The pitch content of the melody is: F, G, Ab, A, Bb, B, C, Db, Eb, and E.
This content surely has different pitch centers, under which the chords that I have constructed more/less 'land' when improvising - so cool! If you look inside the subpatches, you will find that there are randomized choices for chords to harmonize the same pitch. For input, I am using a basic University Guitar to MIDI converter, the G2M, made by SONUUS (monophonic, yet chromatic input), but you could plug in any controller and play monophonically. For output, I am routing the midi to an FM8 synth that comes with Kontakt.
NEUROTICA SONG SOLO HARMONIZER.pd
Once last question, Whale-av: In which PD folder do I put your object? You will notice that made a subpatch after copy-pasting the content of your object to make it work. (Please forgive me, as I do not use PD all that often except for very specific creative projects, and I forget the directories/paths.)
Thanks again for all the help! And for those curious, enjoy!
All best, and happy holidays,
D
x/y data from excel into PD and then transform into sound
Hello PD community!
As part of a personal project, I need to transform columns of data (two variables) to sound. My variables are "x": distance and "y": height, so I would like the transformation to be to "x": time and "y" :frequency (hz). I tried several methods like first plotting the data and then entering it into software like AudioPaint or Coagula, but the result when looking at the spectrogram in software like Audacity leaves a lot to be desired, it's very messy. I tried a software called SIGVIEW and it's not neat enough either.
Three days ago I started with Pure Data, and this is what I have learned playing with the software:
First I need to create a frequency modulated synthesis, where the carrier would be my "x" values, and the modulator would be my "y" values. This I was able to do already.
I have to export my data from excel in .csv or .txt format.
What I know and I don't know how to do it:
input the .csv or .txt data to Pd (I have read and seen several patch models, but I am far from understanding how they work). For example when I look at the Pd browser and the instructions tell me to create a message object that says |open .txt|, I understand the logic. But I also understand that I can't open any .txt as I haven't created any. Sorry for being a newbie
Assign my "x" data to the carrier and assign my "y" data to the modulator.
I know this isn't the first time someone has asked this question, but the answers I've found have given me little clarification and even left me more confused.
I would really appreciate any tips you can give me!
Regards!
Starting a Pure Data Wiki (Database/Examples Collection)
Another sample from the work-in-progress ...
https://docs.google.com/document/d/1tzS2KU8x31JXoUxmkEr5WikJvxcrgHa4C0vM8LBw49Q
I thought it would be worth having a category for these more self-contained collections
Modular Systems in Pd
ACRE
https://git.iem.at/pd/acre
ARGOPd
http://gerard.paresys.free.fr/ARGOPd/
Automatonism
https://www.automatonism.com/
Context
https://github.com/LGoodacre/context-sequencer
https://contextsequencer.wordpress.com/
DENSO
https://www.d-e-n-s-o.org/pure
DIY
http://pdpatchrepo.info/patches/patch/76
Kraken - Virtual Guitar Effects Pedal Board
https://forum.pdpatchrepo.info/topic/11999/kraken-a-low-cpu-compact-highly-versatile-guitar-effects-stompbox
LWM Rack
http://lwmmusic.com/software-lwmrack.html
La Malinette
http://malinette.info/en/#home
Open toolkit for hardware and software interactive art-making systems
Mandril Boxes
http://musa.poperbu.net/index.php/puredata-mainmenu-50#mandril
Metastudio
http://www.sharktracks.co.uk/html/software.html
Muselectron Studio
http://www.muselectron.it/MuselectronStudio/Studio_index.html
NetPd
http://www.netpd.org
NoxSiren
https://forum.pdpatchrepo.info/topic/13122/noxsiren-modular-synthesizer-system-v10
Pd Modular Synthesizer
https://github.com/chrisbeckstrom/pd_modular_synth
Pd-Modular
https://github.com/emssej/pd-modular
PdRacks
https://github.com/jyg/pdr
Proceso
https://patchstorage.com/proceso/
Universal Polyphonic Player (UPP)
https://grrrr.org/research/software/upp/
https://github.com/grrrr/upp
VVD - Virtual (Virtual) Devices
http://www.martin-brinkmann.de/pd/vvd.zip
“a virtual modular-rack” from http://www.martin-brinkmann.de/pd-patches.html
XODULAR
https://patchstorage.com/xodular/
A previous incarnation of Automatonism
any others that should be in there?
Using PD in a complex commercial hardware groovebox project
@oid If "commercial" is the driver then I stick with my point.
Fax machines are still used massively in some sectors.... and young people, who have never seen one, have polled as thinking "fax" could be the next "big tech thing".......
But software will spit out a fax to the printer in the background so the hardware is dodo-ised.
I know that flashing buttons are nice to have but from design to production it is very expensive.
Then the cost needs to be doubled for a profit for the manufacturer.
Then doubled for your profit.
Then doubled for distribution.
Then doubled for retail so that a potential buyer can play with the "real" item and like it enough to buy it.
So at $300-400 (the price of all complex domestic hardware from a washing machine to a TV..... since forever) it needs to be produced (cost from the Chinese manufacturer including their profit) for a maximum of about $50 including their R&D.
That can be achieved for a massive market.
For a groovebox I reckon it will be very hard for new entrants.
For software, that most people use happily nowadays, the profit is all yours and new features can be added and sold with negligible marginal cost.
Users sway from software to hardware and back....... you will need to hit a sweet spot.
Put your effort into the software, put it out for free and work up the hardware design with a forum for users. Draw them into your net and direct sales will increase your profit.
Use that to discover your user base, and if it is large enough go the startup funding route with them for the hardware.
When a user feels that they are a part of your "team" they will be more likely to spend their cash.
Don't forget after-sale service, legal guaranties, admin, tax, international shipping, etc....... there is a lot involved.
Good luck.
David.
On the off chance this might save you some trouble
How to connect multiple outlets to multiple inlets, etc.
(I saw someone do this on a video so looked it up.
The info was originally posted on the newsgroup at:
[link Intelligent Patching](link https://lists.puredata.info/pipermail/pd-list/2018-06/122789.html) by IOhannes m zmoelnig .)
These do work. Just sort of tricky to get the steps right.
quote:
Intelligent Patching
new connection features:
-
select any two objects, and press <Ctrl>+<k> (or <Cmd>+<k> if you insist), to connect them (trivially, so just the first inlet)
-
to connect a (signal) outlet to multiple arbitrary inlets, you can now press <Shift> while hovering the yet-unconnected cord over an inlet
-
to add more connections between two already connected object, select the connection and pressl <Ctrl>+<d> to extend the connections to the right ("duplicate")
-
to fully connect two objects, select both objects before connecting them.
-
to connect multiple objects to a single inlet, select all the source objects (but not the sink object) before connecting them.
-
(the other way round works as well, but will give you fan-outs!!!)
-
to connect multiple objects to a multi-inlet object, select all the source objects and the sink object before connecting the leftmost source to the leftmost inlet.
-
to connect a multi-outlet object to multiple objects, select all the source object and all the sink objects before connecting the leftmost outlet to the leftmost sink.
:end quote
May the info/techniques help to expedite yr work flow.
Peace through sharing.
-S