For years, I've wanted to be able to make music with the help of real world data like weather. Using weather, bus patterns, stock data, oceanographic data, ect., you'd be able to make real "live" music that will never repeat again and reflects something happening in the world. I've tried to implement this using software like Max/MSP, Pure Data, and others, but I was never able to properly interface with the various APIs. While working at Quirky, I've learned a lot about how the internet works and that it really isn't such a scary beast; it is actually quite simple.
Since my modular synth has been the focus of my attention over the past few months, I decided to build a piece of hardware that will interface with the internet to pull real time data from APIs.
The hardware of choice was the Electric Imp. Using the Imp, you can connect to your WiFi network and program it to both pull and send data to the internet.
It took me about an hour to get the Imp set up with an API from a weather website in JSON format. The website was free, so I was only able to pull in temperature data and it refreshed every few minutes; it was by no means real time. I set up the Imp to output analog voltages via one of it's two DAC pins and eagerly plugged it into my Euorack's Pittsburg Modular Waveforms. Not sure what I was expecting; nothing exciting happened.
What you see there is the Imp plugged into the synth. USB is only plugged into the Imp to power it, not for data. The computer has a simple slider webpage that sends the slider values to Firebase, a great free data syncing website with an easy API. The Imp then reads the values from Firebase in the Agent code, sends it to the device code, then outputs the float out of the DAC.
Nothing too exciting, but it is still a synth being controlled over WiFi from a website.
The next day, I got set up with the iOS developer program at work, so when I got home, I eagerly made a quick iPhone app to control the synth.
I broke out the rest of the pins on the Imp and mounted them to my Quirky Business card since I didn't have any project boxes handy.
With all the Electric Imp Pins broken out, I had 2 pins set up as analog outs, and 4 digital pins that can output PWM. I really wish the Imp had more than 6 pins. There are other Imp modules in existence, but this is the only one with DACs at the moment.
I also have to mention that the Imp only puts out a maximum of 3.3V, so amplification is needed to make this work properly with my Eurorack. I plan to do this in the coming week with a TL072 for the analog and TL04s for the digital. This way, I can swing the signals from 0-10 volts and properly trigger the Eurorack and get a longer range of CV control.
I made an iPhone app with 2 pages. The first has 2 sliders to change the analog outputs from 0-1.
The second page controls the digital pins. Each pin has an option to set it high (1), low (0), or turn on the PWM to use it as a clock/square wave with 50% duty cycle. This was especially fun with the Make Noise Pressure Points where I can control the clock speed, direction, and run on/off with the iPhone.
In the coming week, I hope to settle the analog amplification of the Imp's pins.
I also hope to find free APIs I can use to start triggering the Eurorack with real time data.
I will hopefully have an update in the coming weeks along with source code.