Data.
Building a Max patch that displays, transforms, and responds to internet data.
building materials
- Max (6.1.7 or newer)
- Soundflower –
Both available from Cycling 74 http://cycling74.com/
The Max patch is based on a tutorial by dude837 called “Automatic Silly Video Generator”
download
The patch at the download link in the video is broken – but the javascript code for the Max js object is intact. You can download the entire patch from the Max-projects archive: https://github.com/tkzic/max-projects folder: maxvine
Internet API’s
API’s (application programming interfaces) provide methods for programs (other than web browsers) to access Internet data. Any app that access data from the web uses an API.
Here is a link to information about the Vine API: https://github.com/starlock/vino/wiki/API-Reference
For example, if you copy this URL into a web browser address bar, it will return a block of data in JSON format about the most popular videos on Vine: https://api.vineapp.com/timelines/popular
HTTP requests
An HTTP request transfers data to or from a server. A web browser handles HTTP requests in the background. You can also write programs that make HTTP requests. A program called “curl” runs http requests from the terminal command line. Here are examples: https://reactivemusic.net/?p=5916
Response data
Data is usually returned in one of 3 formats:
- JSON
- XML
- HTML
JSON is the preferred method because its easy to access the data structure.
Max HTTP requests
There are several ways to make HTTP requests in Max, but the best method is the js object: Here is the code that runs the GET request for the Vine API:
function get(url) { var ajaxreq = new XMLHttpRequest(); ajaxreq.open("GET", url); ajaxreq.onreadystatechange = readystatechange; ajaxreq.send(); } function readystatechange() { var rawtext = this._getResponseKey("body"); var body = JSON.parse(rawtext); outlet(0, body.data.records[0].videoUrl); }
The function: get() formats and sends an HTTP request using the URL passed in with the get message from Max. When the data is returned to Max, the readystatechange() function parses it and sends the URL of the most popular Vine video out the left outlet of the js object.
Playing Internet audio/video files in Max
The qt.movie object will play videos, with the URL passed in by the read message.
Unfortunately, qt.movie sends its audio to the system, not to Max. You can use Soundflower, or a virtual audio routing app, to get the audio back into Max.
Audio from video
https://reactivemusic.net/?p=12570
- Color tracking (histogram analysis: https://reactivemusic.net/?p=12598
- frame subtraction
- frame subtraction with jit.cv
- Cyclops (by Eric SInger)
Video from audio
https://reactivemusic.net/?p=12570
- Vizzie https://reactivemusic.net/?p=11777
- Amplitude, spectrum, and transient detection.
- spigot~ https://www.youtube.com/watch?v=qSOqC3lqEnY
Other Internet API examples in Max
There is a large archive of examples here: Internet sensors: https://reactivemusic.net/?p=5859
We will look at more of these next week. Here is simple Max patch that uses the Soundcloud API: https://reactivemusic.net/?p=17430
Gokce Kinayoglu has written a java external for Max called Searchtweet: http://cycling74.com/toolbox/searchtweet-design-patches-that-respond-to-twitter-posts/
Many API’s require complex authentication, or money, before they will release their data. We will look ways to access these API’s from Max next week.
Aggregators
There are API services that consolidate many API’s into one API. For example:
- Temboo https://www.temboo.com/library/
- Mashape
- IFTTT
Scaling data
Look at the Max tutorial (built in to Max Help) called “Data : data scaling” It contains most of what you need to know to work with streams of data.
Assignment
Using the Vine API patch that we built during the class as a starting point: Build a better app.
Ideas to explore:
- Is it possible to run several API requests simultaneously?
- Recording? Time expansion? Effects that evolve over time?
- Generate music from motion, data, and raw sound?
- Make a video respond to your instrument or voice?
- Design a better user interface or external controller?
- Will this idea work in Max For Live?
- How would you make adjustments to the loop length, or synchronize a video to other events?
- Make envelopes to change the dynamic shape?
- Destruction? Abstraction?
- Find or write a Max URL streaming object?
- What about using a different API or other data from the Vine API?
This project will be due in 2-3 weeks. But for next week please bring in your work in progress, and we will help solve problems.