By Christopher Dobrian at UCI
differences between Pd and Max
From the Pd manual
http://puredata.info/docs/manuals/pd/x5.htm
5.3. differences from Max/MSP
It wasn’t anyone’s intention to make Pd a Max/MSP clone, but on the other hand, if there’s no reason for a feature to appear differently in Pd than in Max/MSP, the choices in Pd tend to hew to those in Max/MSP. Moreover, some effort has been undertaken (but more is needed) to make the two interoperable.
You can use Pd to import and export patches to Max/MSP; just save as text to a file with extension “.pat”, and then open it in Pd. You’ll at least get something. If you stick to common or commonizable features you can actually develop patches for both platforms.
When specific objects exist on one platform and not on the other, it’s often possible to make abstractions to imitate the missing objects, in a kind of personalized compatibility library.
There are, however, differences in semantics you’ll want to know about; a partial list follows.
abstraction arguments. In Pd you can edit instantiations of abstractions and save the result back to the file of the abstraction. This isn’t possible in Max, because the instantiations are different from the abstraction itself in that “#1”, etc., are replaced by the instantiation arguments. In Pd, these arguments appear as “$1”, etc, and are translated at a slightly later stage of the instantiation process so that you still see them as “$” variables in the instantiation. (see Section 2.7. abstractions)
In Pd, to make current all instantiations of the abstraction, either delete and recreate them or close and open the patch; this is done automatically in Max/MSP.
In Pd, if you select “save” while in a subpatch, the parent is saved. In Max/MSP, if you do this a dialogue box comes up asking if you want to save the subpatch as a separate file. (if you want to save a subpatch to a file in Pd, you have to copy and paste the contents to a new document.
In Pd, inlets and outlets are ordinary text objects; in Max/MSP they’re “gui” objects from the palette.
In Max/MSP, if an object’s outlet is connected to several destinations, corresponding messages are always sent in right-to-left screen order. In Pd, the messages are sent in the order you made the connections in. In either case, in situations where you care about the order it’s appropriate to use a “trigger” object to specify.
In Pd, there’s no “gate”; instead it’s “spigot” with the inlets in the opposite, more natural order.
Switching subsets of the DSP patch on and off is done in completely different ways in Pd and Max/MSP, and block sizes are handled differently as well.
Max offers many “GUI” objects such as sliders, dials, VU meters, piano keyboards, even “bpatchers.” Until version 0.34, the only two in Pd were the number box and graphical arrays. Starting in version 0.34, Pd incorporates Thomas Musil’s GUI objects: sliders, switches, and so on. (Thanks Thomas!) Beyond this essential collection of GUI objects, it’s unlikely you’ll ever find any commonality between the two. Also, as of 0.34, importing and exporting to Max doesn’t know about the Musil objects; I’ll try to get that fixed for 0.35.
In Pd there’s no “preset” object (I now think it’s basically a bad idea) and you have to use explicit sends and receives to restore values to number boxes. Then just make a “message” box to re-send the values you want.
In Macintosh land, instead of getting tabosc4~ and arrays, you get cycle~ and buffer~. The only gotcha is that you probably can’t draw in buffer~ with the mouse as you can with arrays, but at least it’s possible to make a patch that copies a “table” into a “buffer~”.
The “bpatcher” feature in Max has a correlate, “graph on parent” subpatches, in Pd; however, Pd’s version is quite different from Max’s.
pd to Max converting wrap~
notes
Use [pong~ 1.] instead of [%~ 1.] see note below about negative numbers…
hi julien,
for non-negative input you will get the same output from [%~ 1.], as from wrap~. However, for the whole domain, wrapping pong~, [pong~ 1], does the job (although it costs more)
Krzysztof
juli…@tremplin-utc.net wrote: …
is the Max/MSP object [%~ 1.] an equivalent to the Pd object [wrap~] ?
Designing Sound
“Designing Sound” in SuperCollider
Examples from Andy Farnell’s “Designing Sound” recreated in SuperCollider.
By various authors, at WIkiBooks
http://en.wikibooks.org/wiki/Designing_Sound_in_SuperCollider
war on drugs
By Mike Riggs at reason.com
http://reason.com/blog/2012/10/11/forty-years-of-drug-war-failure-in-a-sin
Max/MSP Introduction to Filters from CNMAT
Bicycle speed sensors
Arduino bike speedometer.
by amandaghassaei at Instructables
http://www.instructables.com/id/Arduino-Bike-Speedometer/
Radio shack magnetic reed switch.
http://www.radioshack.com/product/index.jsp?productId=12706327
speed vest project…
By Mykle Hansen at Make
http://makeprojects.com/Project/Speed-Vest/1344/1#.UHcZaa5U3Tq
Wheel sensor , from a wired (not wireless) bicycle speedometer (aka cyclocomputer) The sensor must perform like a reed switch, which is binary, rather than use the magnet on the spoke to vary the inductance. We used a Sigma Sport BC 500, which costs $15, but the city of Portland gives them to residents free, to encourage bicycling! Ask a bike shop if they can sell you just the wheel sensor part, without the computer and display.
Calibrating bike wheel sensors…
By Sheldon Brown
http://sheldonbrown.com/cyclecomputer-calibration.html
Arduino code for measuring reed switch and magnet
By Greg Borenstein
https://github.com/atduskgreg/bike_mountain_speedometer
Pitch transposing a baby
Very difficult to listen to.
By Jacob at breakcorechoirboy
http://breakcorechoirboy.tumblr.com/post/33317890835/so-a-friend-of-mine-pitched-down-the-sound-of-a
Measuring rotation
We are trying to measure RPM of a bicycle wheel by reading the accelerometer data stream of a Wiimote wedged between the spokes of the wheel.
When the wii-mote is in the bicycle wheel it generates a stream of numbers much like a sine wave. Lets say we want to just get the speed of the wheel. It would be the frequency of these ‘sine’ pulses.
Strategy: use [past] object send a bang once each cycle. Then use a tap-tempo patch to convert pulses into bpm, mph, etc.,