Pd crashes when pd~ starts on RPi 3 (how to see these errors?)
Okay, I got it working when starting up from Terminal. But I still don't know what's going on.
When I open the patch (with a pd~) from Terminal with "-nogui -nrt" it works.
When I open it from Terminal with "-nogui -nrt -nosleep" I get an 'audio I/O stuck' error.
When the patch runs from startup with "-nogui -nrt" OR "-nogui -nrt -nosleep" it doesn't work. Again it stops when opening the pd~ subpatch.
The funny thing is that when I don't have a pd~ object, but just osc~ the patch WON'T open when using '-nosleep' from Terminal somehow.
But it DOES work if I'm using "-nosleep" when the patch runs from start-up.
Can anyone shine some light on the start-up flags? A link to more in-depth information than what the Pd-site says or so? And does anybody know why Pd reacts different when a patch opens from start-up compared to when opening from Terminal?
Dissecting doitnowlabs rpieffectbox
@whale-av thanks for the reply. I'm actually interested in using this project as a template for a slightly different project. Instead of using knobs to control the effect parameters I plan to use a mouses XY coordinates. Is there any reason my project couldn't be handled entirely by pure data? Gettin input from the mouse seems simple enough, i just don't understand how I'd use that input to control the various FX that are being switched between. The server patch seems to be opening and closing the various FX patches, is there a simple way of getting the mouse input to whichever patch is open, or would I need to include all of the FX patches in the server patch as subpatches, attaching the mouse input to all of the different FX?
Playing back a sequence of text in Pure Data.
That does seem to be the most simple method, yes.
I just searched some more and discovered the
qlist object, a text-based sequencer, which I'm reading up on as I type, apparently the programming language Lisp should be usable as way to generate and process externally created lists. Maybe that's what I'm looking for, but as of now, I have no idea if it's usable to me, as I'm quite inexperienced with programming languages and I have no idea how transparent they are compared to each-other.
What would be the best possible outcome is if I had some small program that a text-writer could open up without having to know the ins and outs to write the text, generate the textfile with time-marks and send it to me for processing.
Have you got any suggestions as to how one would do that? It's a much more time-consuming process if there is not such a program already made for use as it would require the creation of such a patch in a programming language I'm not familiar with.
Playing back a sequence of text in Pure Data.
Hello. I've got a very specific and possibly convoluted request.
I have some ideas of trying to compose with live 'recordings' of text and having that data control the parameters of a patch in PD.
I assume I would need the following two things:
- A program which allows me to log and record text being written in a word processor, each keystroke marked in with a specific time.
- Suggestions as to how I would go about playing back this sequence in Pure Data.
In these times of mass surveillance I can only imagine that there must exist some program that does what I specified in the first point. I know of programs that log and visualise the activity of the computer mouse and mousepad and programs that log every computer activity, primarily used to 'optimise' the efficiency of company employees.
As far as the second point goes, I imagine some sort of external that would allow this text sequence being played back stroke by stroke into a symbol box, which would allow me to give each character of the keyboard a specific action, which it would then trigger.
While writing this I realise that it would quite possibly be easier to have the patch and relevant text-recording programs running and having the data being sent to PD in realtime as this would render the time-marks for the individual keystrokes unnecessary. But the whole point is to have a person write a piece of text with the text-logger running in the background and then transferring that string of data to me to process and play back.
Edit: I am running Pure Data extended on OSX Mavericks.
I know this has been asked a few hundred thousand times- i know because i've been reading everything i can find. But most of the documentation and posts are apparently outdated, or don't seem to work for me.
I had been learning pure data for a few weeks about a year ago using pd extended, but noticed that the libs haden't been updated for a long time, so when i got back into it yesterday i decided to start with the nonextended version.
At first i didn't realize that Gem isn't a standard library, so downloaded it, installed, eventually found that someone suggested to go to edit/preferences/startup, make a new entry and just type "gem" and add it. I did that, restarted. The log window still shows a lot of error messages, it looks like PD is searching for two files:
There are a lot of lines that indicated tried and failed for both, but eventually i see "succeeded" for gem.dll, but not for Gem.m_i386.
Anyway i 'put' an object called gemwin and two messages, create and destroy and link them both to gemwin after creating a new project, then switch to run mode ctrl-e and click on create. Nothing happens. It should make a black, empty gem window, but it doesn't.
In the log window, there are no entries added after clicking on create/destroy, i don't know what i'm doing wrong, can someone suggest what to do?
I've been reading for hours, a lot of pages suggest where to look, but have dead links, or the suggestion didn't help, any ideas?
I pasted below the full startup log (the full log using the "all" option).
------------------ done with main ---------------------- input channels = 2, output channels = 2 Default font: DejaVu Sans Mono tried ./Gem.m_i386 and failed tried C:/Users/me/AppData/Roaming/Pd/Gem.m_i386 and failed tried C:/Program Files (x86)/Common Files/Pd/Gem.m_i386 and failed tried C:/Program Files (x86)/pd/extra/Gem.m_i386 and failed tried ./Gem.dll and failed tried C:/Users/me/AppData/Roaming/Pd/Gem.dll and failed tried C:/Program Files (x86)/Common Files/Pd/Gem.dll and failed tried C:/Program Files (x86)/pd/extra/Gem.dll and failed tried ./Gem/Gem.m_i386 and failed tried C:/Users/me/AppData/Roaming/Pd/Gem/Gem.m_i386 and failed tried C:/Program Files (x86)/Common Files/Pd/Gem/Gem.m_i386 and failed tried C:/Program Files (x86)/pd/extra/Gem/Gem.m_i386 and failed tried ./Gem/Gem.dll and failed tried C:/Users/me/AppData/Roaming/Pd/Gem/Gem.dll and failed tried C:/Program Files (x86)/Common Files/Pd/Gem/Gem.dll and failed tried C:/Program Files (x86)/pd/extra/Gem/Gem.dll and succeeded GEM: Graphics Environment for Multimedia GEM: ver: 0.93.3 GEM: compiled: Nov 10 2011 GEM: maintained by IOhannes m zmoelnig GEM: Authors : Mark Danks (original version) GEM: Chris Clepper GEM: Cyrille Henry GEM: IOhannes m zmoelnig GEM: with help by Guenter Geiger, Daniel Heckenberg, James Tittle, Hans-Christoph Steiner, et al. GEM: found a bug? miss a feature? please report it: GEM: homepage http://gem.iem.at/ GEM: bug-tracker http://sourceforge.net/projects/pd-gem/ GEM: mailing-list http://lists.puredata.info/listinfo/gem-dev/ GEM: compiled for SIMD architecture: SSE2 MMX GEM: using SSE2 optimization The Pd window filtered 40 lines The Pd window filtered 41 lines```
settable send~ object?
@LiamG I saw somewhere (I have stumbled upon it twice..... maybe on this forum.....but where?) that a canvas can be given a "dirty" tag so as to suppress messages to the terminal. The problem here is that the terminal is doing the complaining because it sees a receive with no matching send. It's probably not possible even to create a "dummy" before terminal throws the error...... so I think that hiding the terminal is probably the only solution.
Maybe alexandros is suggesting [matrix~ 10 10 1 100] ........... you need to put the arguments or it will not create. It gives you a "soft" switching matrix (although you can also set levels within the messages that you give it), and if you set up send objects (in advance........ I know, not "truly" dynamic) for the outlets then you have a (sort of) dynamic sender. I use it for my in-ear monitoring system with up to 64-in 64-out mixing......flawless.
Give it as many inputs/outputs as you need, and it jumps all of the [s~] [r~] [throw~] [catch~] hurdles....... with no clicks!
Midi to hz, and hz to midi formulas
well, to contribute to the vile institution of equal temperament then:
in the first equation the input has 69 subtracted from it. This is in order to get the semitones difference between the input note and 69, which is the a above middle c, (the standard is that this note has a frequency of 440). Then this is divided by 12 in order to get the number of octaves that the input is different from a440 (linearly). 2 is then raised to this power.
The reason for this is that if 2 were raised to the 1st power, 1 octave would be traversed upward. similarly, if 2 were raised to the -1 power the octave would be traversed down, because 2^-1 = 0.5, which is a frequency of the octave below.
And because the midi note 69 was the reference point, what is being determined is the ratio of the frequency difference between the input and a440. Therefore, once we know the frequency ratio between the input note and midi note number 69, it is multiplied by 440 in order to get the result
the next formula is this one in inverse:
The input frequency is divided by 440 to get the frequency ratio between the input and 440. Then log2 is taken of it, which is the power that 2 needs to be raised by in order to get the ratio. So this will be the number of octaves difference between the 2 notes.
The number is multiplied by 12 to convert to 1/2 steps, and then 69 is added to get back up to the note a above middle c because 440 was the reference point in the beginning
@dangrondang out of curiosity, do you have any references for the accepted value of pi being wrong? for all of the talk about the sanctity of mathematics this other value does not seem to agree with mathematical principles relating to series convergence formulas for pi. A simple one of these formulas is the Leibniz one. There is a proof of it on the page also
Regarding your putrid opinion on equal temperament, I would also be curious how you would modulate freely between keys on a keyboard instrument. Are you advocating for well-temperament? a system of pythagorean tuning with movable root? The reason equal temperament exists is mainly to create a system where all keys sound the same. Much of music by the mid-1800s e.g. Beethoven was already freely modulating to far away keys and that does NOT sound very good in pythagorean or even simple well temperament (although certain keyboards in the day had many "versions" of notes and scales)
edit: didn't realize this was such an old topic! oh well, perhaps useful still
Loading patches on the fly
How does one change an object on the fly? E.g. I have effect1_patch~ as an object, but I want to change it to effect2_patch~ , effect99_patch~, or any arbitrary patch in order to switch between my library of effects during performance (without hard coding each effect into the main program).
So I am making a live performance setup.
The pipeline I have set up now within my main PD program is: read mic/midi --> effects --> looper --> mixer --> out
The problem is I have a lot of different effects patches already and plan to have many more. The ideal would be that my effects program takes a midi input and dynamically loads a corresponding patch. I know how to handle the midi input, but is there an easy way to do dynamic loading of patches i.e. changing the patch a PD object refers to on the fly?
Thanks for your help!!
"audio i/o stuck"
For each program that is using the ASIO drivers, an ASIO control panel will pop up in the system tray (you might need to adjust your system tray preferences). Each panel controls an instance of the ASIO drivers for that program. You can open that panel and set the inputs and outputs you want to use for that instance.
I said in the above post that ASIO can connect to one program at a time....but that isn't the full explanation. Each ASIO instance can connect 1 program to the same hardware inputs and outputs at a time.
So if you had a soundcard that had 4 outputs, you can setup 2 programs to use the ASIO drivers, one instance goes to output1 and output2, and the other instance can go to output3 and output4.
Getting your sound program running through ASIO (that's by default connected to all inputs and outputs) and getting sound from the browser (Firefox? Chrome? IE?)
is tricky. The browser doesn't use ASIO, it's using the default windows sound driver to access the soundcard. Try loading the browser first then load PD with ASIO or vica versa.
I've only been able to get a consistent working setup by having multiple (2 or more) soundcards. Windows controls one (browser sound, programs that don't use ASIO) and ASIO drivers control the other (PD, tracktor, cubase, FLstudio, etc). Route the sound output from both cards into an external mixer, and the mixer controls the main speakers (or monitors)
I conceptualized this the other day. The main reason I wanted to make this is because I'm a little tired of complicated ableton live. I wanted to just be able to right click parameters and tell them to follow midi tracks.
The big feature in this abstract is a "Midi CC Module Window" That contains an unlimited (or potentially very large)number of Midi CC Envelope Modules. In each Midi CC Envelope Module are Midi CC Envelope Clips. These clips hold a waveform that is plotted on a tempo divided graph. The waveform is played in a loop and synced to the tempo according to how long the loop is. Only one clip can be playing per module. If a parameter is right clicked, you can choose "Follow Midi CC Envelope Module 1" and the parameter will then be following the envelope that is looping in "Midi CC Envelope Module 1".
Midi note clips function in the same way. Every instrument will be able to select one Midi Notes Module. If you right clicked "Instrument Module 2" in the "Instrument Module Window" and selected "Midi input from Midi Notes Module 1", then the notes coming out of "Midi Notes Module 1" would be playing through the single virtual instrument you placed in "Instrument Module 2".
If you want the sound to come out of your speakers, then navigate to the "Bus" window. Select "Instrument Module 2" with a drop-down check off menu by right-clicking "Inputs". While still in the "Bus" window look at the "Output" window and check the box that says "Audio Output". Now the sound is coming through your speakers. Check off more Instrument Modules or Audio Track Modules to get more sound coming through the same bus.
Turn the "Aux" on to put all audio through effects.
Work in "Bounce" by selecting inputs like "Input Module 3" by right clicking and checking off Input Modules. Then press record and stop. Copy and paste your clip to an Audio Track Module, the "Sampler" or a Side Chain Audio Track Module.
Work in "Master Bounce" to produce audio clips by recording whatever is coming through the system for everyone to hear.
Chop and screw your audio in the sampler with highlight and right click processing effects. Glue your sample together and put it in an Audio Track Module or a Side Chain Audio Track Module.
Use the "Threshold Setter" to perform long linear modulation. Right click any parameter and select "Adjust to Threshold". The parameter will then adjust its minimum and maximum values over the length of time described in the "Threshold Setter".
The "Execution Engine" is used to make sure all changes happen in sync with the music.
IE>If you selected a subdivision of 2, and a length of 2, then it would take four quarter beats(starting from the next quarter beat) for the change to take place. So if you're somewhere in the a (1e+a) then you will have to wait for 2, 3, 4, 5, to pass and your change would happen on 6.
IE>If you selected a subdivision of 1 and a length of 3, you would have to wait 12 beats starting on the next quater beat.
IE>If you selected a subdivision of 8 and a length of 3, you would have to wait one and a half quarter beats starting on the next 8th note.