http://curl.haxx.se/docs/httpscripting.html
Today I got Csound running inside Pure Data (using the [csoundapi~] object) on Raspberry-Pi.
These instructions assume you have already installed pd-extended on R-Pi. See this post to learn how. https://reactivemusic.net/?p=4930
Install Csound
# sudo apt-get install cloud
Install csoundapi~
# sudo apt-get install pd-csound
Copy csoundapi~ library into the pd-extended extras folder
# cd /usr/lib/pd/csound/extras # sudo cp csoundapi~.pd_linux ../../pd-extended/extra
Here’s a test patch:
Here’s the Csound source file (should be in the same folder as the test patch)
<CsoundSynthesizer> <CsOptions> </CsOptions> <CsInstruments> ;Example by Joachim Heintz sr = 44100 nchnls = 2 0dbfs = 1 ksmps = 8 giSine ftgen 0, 0, 2^10, 10, 1 instr 1 kFreq invalue "freq" kAmp invalue "amp" aSin oscili kAmp, kFreq, giSine outs aSin, aSin endin </CsInstruments> <CsScore> i 1 0 10000 </CsScore> </CsoundSynthesizer>
Here are the source files:
http://zerokidz.com/rpi/csound/cstest2.pd
http://zerokidz.com/rpi/csound/control.csd
Here’s the command line to run the test:
# pd-extended -nogui -noadc cstest2.pd
Here are general instructions on running csound in Pure Data from Victor Lazzarini:
http://booki.flossmanuals.net/csound/_draft/_v/1.0/csound-in-pd/
A preliminary test before trying this in Raspberry-Pi, I used the general instructions for csound in pd from Victor Lazzarini found here:
http://booki.flossmanuals.net/csound/_draft/_v/1.0/csound-in-pd/
to get csound running in pd-extended in Mac OS.
Looks pretty straightforward – biggest question will be compiling the external if it doesn’t install via package manager.
local test files are in tkzic/rpi/pd/csound
Here’s something from Victor Lazzarini which shows csound running on R-Pi
http://csound.1045644.n5.nabble.com/csound-on-raspberry-pi-td5718623.html
Here is installation instructions from Richard Dobson
http://csound.1045644.n5.nabble.com/Raspberry-Pi-w-Csound-td5717410.html
For jit.uldl- status reports get sent out the right outlet and errors are reported in the Max window. However their doesn’t appear to be a way to get the http: status codes or other header data.
For curl, you can write the response (JSON for example) to a file. Then you can read the file using the [js] object and parse the JSON. If you are using [aka.shell] to run the curl command, the stdout and stderr can be routed from the object – for instance, into the Max window. The -v flag (verbose mode) causes curl to output a bunch of header data.
By John Biggs at Tech Crunch
http://youtu.be/avcdq7_-Iwg
Much of our driving experience is wrapped up in sounds that happen when you press the pedal to the metal. Like Superman emerging from a phone booth, this 2006 Jetta seems different. The project connects RPM data from an OBD2 diagnostic sensor with the input of the car radio. Via synthesizers.
[update 11/2013 – source code is available at https://github.com/tkzic/automax – this version features
This project uses the RPM data from an automobile OBD-II port to control the engine speed of an engine simulation from Andy Farnell’s book “Designing Sound”
Here’s the patch that polls and translates OBD-II data
patch is tkzic/automax/rpm4.maxpat
Here’s a Max version of the Farnell car engine simulation:
patch is tkzic/automax/waveguide_engine2e-1.maxpat
Update 6/2014: The Max patch is available from the max-projects archive: https://reactivemusic.net/?p=11130
original post
I had a difficult day with wiimotes…
Here’s a general purpose Max patch to read Wiimote Osc data from Osculator:
Located in tkzic/max teaching examples/wiimote/wiimote_read.maxpat
⇓ Click to expand or contract Max patch
Some tips…
Using node.js
Time compressed video of Irish railway data from November 30th 2012.
After many years…. I was able to get this running
Also using sample webSockets code from here to handle the map points: https://masteringjs.io/tutorials/node/websockets
I would like to update all of this in node for max – but its also nice to have an example of doing OSC communication with Max the old way.
This map is centered on Dublin. Each train is a different color and the train number gets printed next to the current position. So for example you can see P607 coming into Dublin from the South.
It gets updates every 10 seconds or so – but sometimes the trains seem to ‘jump’ so I don’t think the actual data itself gets updated that fast.
https://github.com/tkzic/internet-sensors
folder: trains
Install node.js on your computer (or a separate server). Instructions here: http://nodejs.org
In a terminal window go to the project folder ie., /internetsensors/trains
type: npm init
(just accept all the default values)
The following node packages are required. Install using npm. For example:
type: npm install request
Do the same with all these packages
These instructions are a bit confusing. A simpler UI is in the works. (that’s funny – I said it 8 years ago)
node ./max-train1.js
When you connect to the node server in a web browser, for example using the following url:
http://localhost:8124
You will get a message welcoming you and asking you to enter your name. After you enter your name, Max will send you a response. Then you can enter map points using the following format:
Dublin 53.15 -6.90
The map point will be drawn on the map in the Max patch.
Data communication is done with OSC messages. Here’s how
Here’s what the raw data looks like:
Note: if there’s no data at this link, check the time of day. Trains stop running around midnight UTC.
Essentially what this program does is collect current train position data from Ireland and display it as points on an XY grid.
components:
The server is written in node.js. This was my first real project using node. So I tried to make it do a bunch of things, just to test them out.The necessary features are
This is probably the most confusing part about this program. You can run it on the Mac in localhost mode, or you can run the node.js program on a separate server, as long as there is a direct ip path back to the computer where Max is running. Running a separate server makes more sense if you are using the chat or a remote web control aspect of this. I have run the node program on a Ubuntu server on my local network without making any changes other than to the IP addresses as explained next.
You need to make 2 changes to go from localhost mode, to separate server mode:
In the client program, max.html – near the top, change the ip address from localhost to the specific ip like this:
// note: if you want to run this program on something other than localhost, then put in the ip // address of the server here, instead of local host... // var socket = io.connect('http://localhost:8124'); // var socket = io.connect(192.168.1.10:8124');
In the server program, max-train1.js – change the destination address for UDP to the address of the computer where max is running:
var dSendAddress = '127.0.0.1'; // send response messages to max at this address // do this if max is running somewhere other than the same computer as the node server // var dSendAddress = '192.168.1.104'; // send response messages to max at this address
Also in the Max patch max-train3.maxpat you will need to change the [udpsend] object to give it the host address of the node server.
train-drawing4.maxpat
Data recorder:
To be able to save and replay data I included a data recorder in the patch. Its a revision of the data recorder from CNMAT by Michael Z. This version
The actual code for the patch is horrendous. Its filled with debugging objects and is a maze of patch cords lacking explanation. But it works…
Using xively.com and zapier.com
Note: To get this project to work you’ll need a Twitter account. And you’ll need to set up a device (feed) at xively.com and a ‘zap’ at zapier.com as directed in this post. It explains how to send tweets using triggers.
https://reactivemusic.net/?p=6903
Also, you may notice delays due to the number of steps involved.
Looking for an easier way? Send Tweets using ruby: https://reactivemusic.net/?p=7013
https://github.com/tkzic/internet-sensors
folder: twitter-curl
[aka.shell] download from here: http://www.iamas.ac.jp/~aka/max/ – and add the path to the folder to Options | File Preferences in Max
You can use curl for http: requests in Max by formatting the command line with [sprintf] and running it in [aka.shell]. There are a few idiosyncrasies – for example with escape sequences.
In tweetCurl5a.maxpat, the curl command is built in two sections:
Using ‘quotes’ with [sprintf]
You’ll notice a lot of backslashes used in [sprintf]. This is done to preserve quotes. Normally a quote in [sprintf] indicates a string. Use 3 backslashes to escape a quote:
\\\"
Passing arguments into [sprintf]
The [sprintf] code is obtuse because we are formatting JSON data. The resulting data looks like this:
{ "id":95586, "datastreams":[{ "current_value":"this is a tweet", "id": "tweet"}]}
Note that you can pass arguments into [sprintf] using %s – but if you are using a [textedit] to collect data from the user, you’ll need to use [tosymbol] to consolidate the text into a single symbol before passing into [sprintf]
Here’s the code which writes the formatted JSON data to a file:
The next step is to format the curl command, which will read the JSON data file and send an http: request to cosm.com. Here you can see the [sprintf] for this command.
At the very end of the [sprintf] you will see
>2&1
This is the linux method to redirect error messages and standard output from [aka.shell] to the same place, which in this case will be the Max window.
By the way, here is what the curl command will look like on the command line
curl -v --request PUT --data-binary @/tmp/abc.json --header "X-ApiKey: abcdefg1234567" http://api.cosm.com/v2/feeds/95586.json 2>&1
Note: The actual ApiKey above has been replaced with: abcdefg1234567 – so that you don’t accidentally send embarrassing Tweets from my account.
update 6/2014: Internet Sensors projects: https://reactivemusic.net/?p=5859
original post
http://zerokidz.com/internetMax.pdf