EP-3xx41 Max – week 1

Design

  • People
  • Ideas
  • Connections

Max patches

[wpdm_file id=3]

Projects

Conversation with robots

https://reactivemusic.net/?p=4710

Frame subtraction remixer by Adam Rokshar

Using video to control audio

Twitter Streaming Radio

https://reactivemusic.net/?p=5786

AR-drone Quadcopter

code not available

The sound of a new machine

https://reactivemusic.net/?p=5945

“Designing Sound” by Andy Farnell. Max examples: Helicopter, TOS transporter,
SynthCar, Jet Engine, Granular Timestretch.

Mira by Sam Tarakajian

The [gizmo~] help file
Demonstration
Little Tikes Piano controller

https://reactivemusic.net/?p=6993

Assignment

Build a control panel in Max. It should look amazing. It should be the coolest control panel you can imagine. Use any objects, colors, shapes that you can find. But… it shouldn’t actually control anything.

Due: Have a first draft on your computer for next week. Final version due before class on 9/23. Email me the Max patch (maxpat) file or a link.

EP-4xx13 DSP – week 1

The Future

  • Living In the moment, the past, and the future.
  • Benjamin Zander: “Your future self”
  • Evolution of music.

DSP

  • analyze
  • measure
  • transform

examples

Note: some of the projects are in project examples below

  • Adam Rokhsar’s video frame subtraction
  • Little Tikes piano controller
[wpdm_file id=4]
projects

Conversation with robots

https://reactivemusic.net/?p=4710

Twitter Streaming Radio

https://reactivemusic.net/?p=5786

Plink by Dinahmoe

http://labs.dinahmoe.com/plink/#

Infinite Jukebox by Paul Lamere

http://labs.echonest.com/Uploader/index.html

Max/MSP Echonest player

https://reactivemusic.net/?p=6296

The sound of a new machine

https://reactivemusic.net/?p=5945

“Designing Sound” by Andy Farnell.

  • Max examples: Helicopter, TOS transporter,
  • SynthCar, Jet Engine, Granular Timestretch.

Little Tikes Piano controller

https://reactivemusic.net/?p=6993

Mira by Sam Tarakajian

Ableton Live Template Remixer (with dummy clips)

https://reactivemusic.net/?p=2658

Assignment

Go to the future. Make music. Bring it back to the present.

It should be a very short piece or an excerpt. Less than two minutes. It can be a remix of a song that you believe represents a future direction in music. Near future or distant future – your choice. Use any tools to create the music. The result: an audio file (mp3) or a link to audio or video on the Internet – like Soundcloud or Youtube.

Due: before the 9/23 class. Send an email attachment or link.

Max Twitter client using ruby

Send and receive Tweets using Max via OSC to a background ruby server.

An advantage of this method is that both the patch and the server are  compact and easy to understand. The Max patch does things in a Max way. And likewise with the ruby scripts.

download

https://github.com/tkzic/internet-sensors

folder: twitter-ruby

files

Max
  • twitter-client.maxpat
ruby
  • twitter-server-send.rb (for sending Tweets)
  • twitter-server-get.rb (for receiving Tweets)
ruby gems

The ruby script requires installation of the following gems

  • json
  • osc-ruby
  • twitter

For example:

# sudo gem install twitter


Twitter authorization

In addition to having a Twitter account, you will need to set up a Twitter application from the developer site here:

https://dev.twitter.com/apps

Good instructions on how to do this can be found in this stackoverflow.com post under this heading: So you want to use the Twitter v1.1 API?

http://stackoverflow.com/questions/12916539/simplest-php-example-for-retrieving-user-timeline-with-twitter-api-version-1-1

When you get to step 5 – in the instructions – instead of writing your own code, just use a text editor to copy your access tokens into these ruby programs:

  • twitter-server-send.rb
  • twitter-server-get.rb

Replace the strings in this line of code by copying and pasting the appropriate ones from your Twitter application:

twitterClient = Twitter::REST::Client.new do |config|
  config.consumer_key = "mqQtoYh16343tDFG3BK7QQ"       
  config.consumer_secret = "X0KexjlK49fhhrnn9EztapZfATCQqWCc5fXVJH2pE"      
  config.oauth_token = "205589709-5krgh9FR3KkLGRDnewiU7GKKBMA6i2La84c"       
  config.oauth_token_secret = "LNARAeooN2vkklkF006GRdihQ5D8YYkm8dYvEs68M"  
end
Yeah – its cryptic, but trivial compared to writing the ouath code. Just a reminder, if even one letter or quote mark, or anything is out of place, the authorization will fail.

instructions

(note: currently running with ruby version 2.0) Display your ruby version by typing: ruby –version

Sending Tweets
  • Open the Max patch: twitter-client.maxpat
  • In a terminal window run the ruby script:
# ./twitter-server-send.rb

  • In the Max patch, type in a Tweet. Press the green button to send. 
  • When you have tweeted enough, end the ruby server program by typing <ctrl-c>
 Receiving Tweets
  • Open the Max patch: twitter-client.maxpat
  • In a terminal window run the ruby script:
  • From Twitter, send a Tweet to the user name embedded in the server
# ./twitter-server-get.rb

Both ruby servers can run at the same time.

What’s next?

  • Parse incoming Tweets into various components
  • Combine the 2 Ruby servers

revision history

  • 5/21/2014 – refactored app names. Added receive server
  • 5/19/2004 – moved to twitter-ruby folder
  • 1/18/2014 – minor fixes to ruby server for current ruby version 2.0
  • 9/7/2013 – uses oauth to communicate directly to Twitter from ruby

Adam Rokhsar’s Max frame subtraction example

Uses video frame subtraction in jitter to control playback of audio clip.

download

https://github.com/tkzic/max-projects

folder: frame-subtraction

patch: frameSubtraction_example.maxpat

You will also need an audio file: aiff, wav, etc., to load into a Max buffer.

dependencies

You will also need the cv.jit library (computer vision): http://jmpelletier.com/cvjit/

Add the location of these files to your path in Max using Options | File Preferences.

Note: When I loaded the patch in Mac OS 10.8 – the computer automatically downloaded and installed Java updates.

instructions

  • Load an audio file for playback
  • Try setting minimum summed pixels to 150,000 or less for greater effect – depending on amount of light in the room

Send Tweets with a Little Tikes piano

This project uses the Max fzero~ object to detect which key of the piano gets pressed and send a pre-written Tweet like “Signs point to yellow” based on the color of the key.

It works with the Internet sensors project that sends Tweets from Max using Ruby. https://reactivemusic.net/?p=7013

download

https://github.com/tkzic/internet-sensors

folder: twitter-ruby

instructions

  1. Follow instructions here to send Tweets using Max and Ruby: https://reactivemusic.net/?p=7013
  2. At this point you will have a Max patch open and a Ruby server running in a terminal window.
  3. Now open little-tikes.maxpat
  4. Carefully play individual tones on the Little Tikes piano. 

notes

fzero~ is probably not the best choice for this. It doesn’t work above 2500hz which means it won’t probably distinguish between the lowest and highest key which are an octave apart. In fact the Little-Tikes piano, for a pitched instrument, is difficult to analyze. Due to relatively equal weight of partials to fundamental, and the quick decay. Other choices, would be pitch~ (Jehan) fiddle~ (Pucket…)

I remember seeing an Arduino project where somebody did this in reverse – actually built a motorized striker to play the piano)

… insert link to video here…

 

Tweet from Max with ruby

Update 6/2014: working version here: https://reactivemusic.net/?p=7013

notes

The zapier.com trigger method of sending tweets from Max is limited by number of tweets and sync rate. So it would be nice to set up another intermediary server program in ruby or php which eliminates the middle-man and just sends tweets directly.

Or you could use the mxj searchTweet program, which has been updated to do this on the search side.

twitter gem

update: Got it working with this gem: https://github.com/sferik/twitter. Its much easier than dealing with xively.

docs: http://rdoc.info/gems/twitter

how to destroy a tweet: http://stackoverflow.com/questions/10640811/twitter-gem-how-to-get-the-id-of-a-new-tweet

how to get a timeline: http://bobbyprabowo.wordpress.com/2010/01/01/simple-twitter-gem-tutorial/

example of error handling code:

MAX_ATTEMPTS = 3
num_attempts = 0
begin
  num_attempts += 1
  retweets = Twitter.retweeted_by_user("sferik")
rescue Twitter::Error::TooManyRequests => error
  if num_attempts <= MAX_ATTEMPTS
    # NOTE: Your process could go to sleep for up to 15 minutes but if you
    # retry any sooner, it will almost certainly fail with the same exception.
    sleep error.rate_limit.reset_in
    retry
  else
    raise
  end
end

 

Another useful SO post: http://stackoverflow.com/questions/16618037/twitter-rate-limit-hit-while-requesting-friends-with-ruby-gem/16620639#16620639

 

How to set up Max Twitter triggers with Xively and Zapier

note: 6/2021 – Everything on this post no longer works, except the idea. See Internetsensors posts for current methods

notes

pachube.com and cosm.com have now changed into xively.com. Also Twitter has migrated to the version 1.1 API. The old method of sending tweets with cosm.com no longer works as of of June 2013.

Here are revised instructions for setting up an intermediary program that allows you to send Tweets from Max/MSP using a xively.com “device” (feed). This setup is required by the tweetCurl patches in the Max/MSP internet sensors project:

https://reactivemusic.net/?p=5859

Summary: the Max program will issue an http: put request to your xively.com feed with the Tweet text as data. When the data is received it triggers a request to xapier.com which logs into your Twitter account and sends the Tweet. xapier.com handles authentication using Oauth.

1. set up a xively.com account (self explanatory)

2. add a device. From the xively.com home page select “develop” from the “web tools” menu. You’ll get a screen like this one:

Click on +add device. The following screen will appear:

Fill in the fields. The names and choices can be whatever you want.  Then click the “Add Device” box to get the following screen:

Now click on +Add Channel. Fill in the Channel ID field with the name: tweet (as shown below) then click the “save channel” box.

3. Add Trigger. The trigger will link this channel to Twitter. Please follow the instructions here: https://xively.com/dev/tutorials/zapier/

Notes:

  • You will need to sign up for a free zapier account
  • assign Twitter as your action service for the “zap”
  • For the ‘message’ field of your zap select “body trigger datastream value value”. This will be the actual text of the tweet coming from xively.com
  • limited to 10 tweets per hour
  • when you select twitter as an action in zapier, it will attempt to log you in to do the oauth authentication. If you are already logged into Twitter – make sure its the correct account.
  • zapier will provide you with the URL to insert into the trigger field in your xively.com device.
4. From the xively.com device screen copy the feed-ID and API-key into your Max patch in the appropriate fields.

 

 

 

 

Tesla vehicle API with Max/MSP

notes

update 12/2013 – see this post for an example of how to display geo-coded data from Max/MSP to Google maps https://reactivemusic.net/?p=8115

original post

This is a reference to some notes. In June, I wrote a Max patch to communicate with my brother David’s Tesla Model S, using an API which runs on Tesla servers and communicates with the car. You can do things like honk horn, flash lights, open doors – and also receive data on speed, position, and battery condition.

Can’t really test the control part of this – without the possibility of causing a car accident in California, but here’s a screen shot of the files. Essentially  I just ran a node server for the API and communicated from Max using Osc.

The last thing I did was to track his return trip from SFO to Santa Cruz and plot points on a map.We will eventually update this prototype to plot data on a Google Map.

Much of the logic was borrowed from the Irish Train mapping project: https://reactivemusic.net/?p=5477

 

 

 

How to change Twitter trigger with Xively to use Zapier

notes

This method was used to fix the tweetcurl series of Max patches and anything else which uses Tom Igoe’s method of sending tweets from Arduino via cosm.

http://www.tigoe.com/pcomp/code/arduinowiring/1135/ (old method)

The automatic twitter trigger used in the “internet sensors” project via cosm, stopped working when cosm migrated to xively.com. But it works correctly from a device (or Max) to xively. So you don’t need to change anything except the xively trigger associated with the feed.

The fix is to go into your xively feed (legacy feed) delete the existing trigger and set up a new trigger using zapier – using the instructions in this tutorial.

https://xively.com/dev/tutorials/zapier/

Notes:

  • You will need to sign up for a free zapier account
  • the text value of the tweet for zapier is called “body trigger datastream value value”
  • limited to 10 tweets per hour
  • when you select Twitter as an action in zapier, it will attempt to log you in to do the oauth authentication. If you are already logged into Twitter – make sure its the correct account.

If you really want to send Tweets from Max, check out the Twitter client that uses ruby: https://reactivemusic.net/?p=7013