-
not.tachyons
https://github.com/enzienaudio/hvcc/blob/master/README.md
There’s the newly open source code. Heavy compiles highly effiecient and optimized C code from patches (you can only use a subset of objects, but they have stand-ins for ones you might miss).
A lot of options are for embedding patches into other development environments. But it can create VST’s from your patch, and possibly externals for Pd (there’s a generator called Pdext). If so, it would be a great way to turn subpatches/abstractions into resource efficient objects. There’s also other options for optimizing code for your hardware (like embedded ARM applications).
This is a great resource, and now that its open source it would be great to see it adopted by the community and actively developed. I personally wouldn’t mind seeing this code find its way into things like Purr data. It might be useful for a “performance mode” or something similar.
-
not.tachyons
Another update, because I finally figured this out and haven’t seen a proper solution anywhere else. So if someone else searches for how to do this, hopefully this will help.
Go install adafruit’s retrogame script. Assign pins to keyboard keys (there’s a list of game specific keys you use), and use the various key objects in Pd to read the values triggered by buttons. Its simple and foolproof, the script runs on boot and is written in C, keyboards and key objects will always work, and its built right into linux and raspbian. No python, no figuring out which of the many ways to script works best for real-time, no ports or servers, no buggy externals that depend on and get broken by other libraries, it just works.
-
not.tachyons
Update: wiringpi’s gpio utlity works fine, but it isn’t loaded by modprobe as that link says to do. The Disis_gpio help patch is all errors trying to locate pins. This is when running as sudo, which Pdwiringpi recommends so it can read pins directly. Root disis_gpio looks for pins in the same slow way as non-sudo Pdwiringpi, but it fails to find the gpio directories in the error messages.
The k12 module flag doesn’t seem to do anything as far as I can tell. I know updates to wiringPi have broken the object before, but I have no idea what’s going on. Puckette’s gpio object and PdwiringPi are outdated and difficult to figure out. So a simple gpio netsend script seems like it would be far easier and more reliable.
-
not.tachyons
@whale-av I have seen that, and it looks like I’ll just have to put a lot more time into it. I’m hoping I can set everything else as creation arguements besides just the pins.
I’ve seen others use python and proccessing to go through netsend, that just might be easier and more efficient.
And if lightning struck down my Pi, I’d just assume it was meant to be for some reason haha. I believe you can get the new 3 B+ on adafruit or amazon. The Pi zero’s are $5, with wifi/bluetooth $10, and adafruit sells one with pre-soldered headers.
The Zero’s are based on, but faster than the older single core Pi’s, but I’d go for a multicore one myself. In linux, you can set the OS and any other cpu overhead to run on one core, and set the others for instances of Pd and Jack2 (2 uses multiproccessing). It gets you pretty close to running Pd hard real-time. I have yet to set that up on mine though.
Besides that, you can use netjack and Pd’s net objects to cluster Pi’s, and break up a complex patch or spead multiple ones across them. If you can set them up, these little affordable things can theoreticaly do much more than any Laptop.
-
not.tachyons
I made a Pd instrument with a Raspberry pi and arcade buttons. The buttons are connected to the Pi’s gpio, and now I’m trying to interface them with Pure Data.
There’s the disis_gpio external in Purr data, but I’m having trouble since it seems more suited to output. For triggering events in real time, I’d have to set a metro object to constantly refresh disis_gpio. Will that create a lot of CPU overhead?
Besides that, I’m just lost trying to use it with button input. I found out that the pin numbering is not the same numbering in RPi’s documentation, gpio drivers might need to be started manually, and I’m unsure if the external includes or needs the wiringpi library.
Usually I can trial and error these things, but I have no idea where to start troubleshooting. Any advice on using disis_gpio for this? Are there alternatives? I know there’s Pd-wiringpi, but it also doesn’t use the library’s interrupt thread for input. I’ve heard of Miller’s own GPIO object, but I believe that’s only part of an outdated Raspbian image he created a while back.
-
not.tachyons
There’s also clock hats for the Pi, they let you keep time without an internet connection
-
not.tachyons
I was curious about a few technical points of Purr Data. I know you can run multiple instances in parallel with the unique flag, but can they still communicate? Also, was the Pd~ object ever worked out, or have there been updates to parallel processing?
Aside from that, I was also wondering about the GUI. I read that Purr does utilize multiple cpu cores, but is it still treated as a seperate program? With vanilla, you can SSH between Pd and the GUI running on seperate machines.