How to set up the client side of the remote radio system.
(under construction) patches have not been uploaded to github
This client works with the sever described in the previous post. We are running a MacBook Pro OSx 10.11.4. with the following:
logmein hamachi VPN
Soundjack VOIP
Max/MSP
Novation launchpad
DJ-Tech CDJ-101 controller
VPN
Install and set up LogMein Hamachi. It is free, for a limited number of computers. Set up a Hamachi server on both the server and client. It should look something like this:
VOIP
We are using Soundjack VOIP. It is also free. Use the following parameters on the client side.
mic: soundflower 2ch (or something that is not currently producing input!)
headphone: default output (or whatever you want to listen on)
You can ignore the rest of the settings, since we are not sending audio. Most of the configuration is done on the server side.
Max
We are using several patches, depending on which hardware controllers you are using. Make sure that the hardware controllers are connected before opening Max.
patches:
eagle-ui5.maxpat – User interface and main entry point for client communication and CDJ-101 abstrations
freqdb4.maxpat – database handler
lp_radio2.maxpat – launchpad driver
After the max patches are loaded, you should be able to control the radio using the UI and the CDJ-101 controller. The red Mixer button in the upper right corner of the Launchpad should be lit.
How to run the server side (base station) of the remote shortwave radio system.
(Under construction) The patches have not been uploaded to github yet.
Assuming that the radio and antenna system are operating. We are using an internet connected MacBook Pro running OSx 10.9.5, with a MOTU 828 MK3 audio interface.
VPN
Install and set up LogMein Hamachi. It is free, for a limited number of computers. Set up a Hamachi server on both the server and client. It should look something like this:
VOIP
We are using Soundjack VOIP. It is also free. Use the following parameters on the server side.
Local Settings:
mic: audio interface channel that is connected to radio audio output
headphone: doesn’t matter
volume: 0
audio block samples: 512
channels: 2
network packet samples 512
quality: high
userlist: manual
User list:
UDP/IP: enter hamachi IP of client.
When Soundjack is set up on the client. Press the green start button on the right side of the user list window on the server.
If all goes well, you should hear the radio on the client. Note: The input meter under local settings should be registering audio from your radio. If not, there is a problem with the audio interface.
Max Server
The Max/MSP server exchanges CAT commands via the server serial port to the radio. The command data is exchanged with a Max patch on the client using OSC (over UDP).
patch:
eagle-cat8.maxpat
instructions:
select the radio serial port from the menu (for example: usbmodem 14531)
initialize port settings
set toggle to poll the serial port
At this point you should be able to try the example commands, for instance to get the version or set frequency. If the commands are not working, it indicates a problem with the serial connection to the radio.
Next, check the IP address of the udpsend object. It should be the hamachi IP of the client.
The first in a series describing a system for internet remote control of a shortwave radio station. Its not something new. There are commercial products that provide remote operation of amateur radio transceivers. The purpose of this project is to make it possible to use shortwave radio sounds in musical performance, without the need of an antenna system.
Features:
Max/MSP for USB serial control of radio, OSC remote interface, user interface, Midi device handling, and an SQLITE database of preset frequencies.
Low latency, good quality audio using Soundjack by Alex Carot.
Hardware control of radio using Midi controllers (CDJ-101 and Launchpad)
Bi-directional OSC and VOIP using Logmein Hamachi VPN
Additional hardware control of AC power and antenna selection using Arduino and a WeMo switch.
TouchOSC Ipad audio mixer control using MOTU Cuemix
TeamViewer remote desktop software for logging into to base station compuer
Optional radio user interface control with Ipod TouchOSC, Griffin Powermate dial, and Korg Nano-kontrol.
Overlapping loops of varying duration to represent natural cycles.
In October I collaborated with Wade Kavanaugh and Stephen P. Nguyen to compose and perform the sounds of a glacier for their installation at the Gem theatre in Bethel, Maine. The glacier was made from paper.
Wade and Stephen:
A time-lapse video of the project:
A time-lapse video of a similar project they did in Minnesota 2005:
The approach was to take a series of ambient loops and organize them by duration. The longer loops would represent the slow movement of time. Shorter loops would represent events like avalanches. One-shot samples would represent quick events, like the cracking of ice.
It took several iterations to produce something slow and boring enough to be convincing. I used samples from the Ron MacLeod’s Cyclic Waves library from Cycling 74 https://www.ableton.com/en/packs/cyclic-waves/. Samples were pitched down to imply largeness.
Each vertical column in an Ableton Live set represents a time-frame of waves. That is, the far left column contains quick events and the far right column contains long cycle events. Left to right, the columns have gradually increasing cycle durations. I used a Push controller to trigger samples in real time as people walked through the theatre to see the glacier.
The theatre speakers were arranged in stereo but from front to back. Since the glacier was also arranged along the same axis, a slow auto-panning effect sent sounds drifting off into the distance, or vice versa. Visually and sonically there was a sense that the space extended beyond the walls of the theatre.
In the “control room” above the theatre… using Push to trigger samples and a Korg NanoKontrol to set panning positions of each track:
The performance lasted about 45 minutes. Occasionally the cracking of ice would startle people in the room. There were kids crawling around underneath the paper glacier. Afterwards we just let the sounds play on their own. A short excerpt:
How to control an amateur radio transceiver over the internet, using Osc (Open Sound Control), VOIP (Voice over Internet Protocol) and VPN (Virtual Private Networks).
What problem does this solve?
Using a shortwave radio receiver in a live performance without installing a large antenna system.
This method gives low-latency real-time access to audio, and radio control using a laptop computer from anywhere. I suppose it could also remote-control a synthesizer, if you’re into that kind of thing.
CAT
Modern ham radio receivers can be controlled using serial commands using the CAT (Computer Aided Transceiver) protocol. Usually this is done via a USB port. There are hardware solutions for remote controlling radios over the internet, like RemoteRig http://www.remoterig.com/wp/. But there is also a free, or low cost, solution using software.
System diagram
The ‘base’ computer is connected to the radio/antenna. The ‘remote’ computer is a laptop that could be anywhere connected by WiFi
For this experiment we used a TenTec Eagle transceiver connected to a MacBook USB port. The audio output of the radio connects to the audio input of the MacBook. The MacBook is directly connected to an internet WiFi router using an ethernet cable.
VOIP
A mumble client runs on the base computer, https://en.wikipedia.org/wiki/Mumble_(software) and also on the remote laptop. Both clients are connected to a Mumble server (Murmur) at Mumble.com http://www.mumble.com/mumble-download.php. You could also run your own server. I set the audio to the best quality and muted the microphone on the remote laptop. We are only using the laptop as a receiver. For transmitting, you could simply open up another channel on the Murmur server. Mumble has very low latency (compared to Skype) and decent audio quality.
Bi-directional commands using VPN and OSC
CAT commands go in both directions – to and from the radio. For example, you would send a command to the radio to change frequency. The radio would send acknowledgements back to the remote laptop.
This is a problem for networks that use NAT (Network Address Translation) because local IP addresses are private, hidden behind routers. The solution that eventually worked was using a VPN called Hamachi https://secure.logmein.com/products/hamachi/download.aspx on both the remote and base computers. Hamachi servers are setup on both computers and connected to each other. This allows the computers to ‘see’ each other as if they were on a local network.
Max and Osc
Max patches are run on both the base and remote computers. The Max patch on the base computer connects to the radio using the serial object and passes commands back and forth over the internet using udpsend and udpreceive (which use Osc).
The Max patch on the remote MacBook sends and receives commands from the base computer using updsend and udpreceive. With the Hamachi VPN, Osc works just like it does on a LAN (local area network).
Automatic reconfiguration of clients
The main advantage of this system is that when you move the remote MacBook to a new location – for example, a coffee shop with public Wifi – both the Mumble and Hamachi clients automatically reconfigure for the location. So you don’t need to know the actual IP address of your computer in the coffee shop. The reconfiguration usually happens within seconds after the Wifi connection is made.
Alternatives
If you are just working across a LAN, you don’t need a VPN. Osc will run on a local network using private IP’s.
For uni-directional Osc communication from remote to base, in a WAN (wide area network) you can use a static IP address for the target.
Skype is another (free) solution for transmitting VOIP audio. Set the base computer in auto-answer mode and call it from the remote computer. Skype will process the audio more than mumble, with noise gates and such. And the latency is higher. But its very easy to set up.
Development
The next step is to build a remote interface for the radio that uses Midi/Osc controllers, so for example you can turn a dial on the Midi controller to change frequency or filter settings on a base radio.
The simulation serves no purpose, but its fun. There are 4 versions. I think the third one sounds best (rf-mixer-sim3.maxpat). Its interesting to hear how much spectral distortion happens from multiplying sawtooth waves.
There is some confusion about how to use Max presets in a M4L device. The method described here lets you save and recall presets with a device inside of a Live set, without additional files or dialog boxes. It uses pattrstorage. It works automatically with the Live UI objects.
It also works with other Max UI objects by connecting them to pattr objects.
Instructions are included inside the patch. You will need to add objects and then set attributes for those objects in the inspector. For best results, set the inspector values after adding each object
Write the patch in this order:
A1. Add UI objects.
For each UI object:
check link-to-scripting name
set long and short names to actual name of param
A2 (optional) Add non Live (ie., Max UI objects)
For each object, connect the middle outlet of a pattr object (with a parameter name as an argument) to the left inlet of the UI object. For example:
Then in inspector for each UI object:
check parameter-mode-enable
check inital-enable
B. Add a pattrstorage object.
Give the object a name argument, for example: pattrstorage zoo. The name can be anything, its not important. Then in the inspector for pattrstorage:
check parameter-mode enable
check Auto-update-parameter Initial-value
check initial-value
change short-name to match long name
C. Add an autopattr object
D. Add a preset object
In the inspector for the preset object:
assign pattrstorage object name from step B. (zoo) to pattrstorage attribute
Notes
The preset numbers go from 1-n. They can be fed directly into the pattrstorage object – for example if you wanted to use an external controller
You can name the presets (slotnames). See the pattrstorage help file
You can interpolate between presets. See pattrstorage help file
Adding new UI objects after presets have been stored
If you add a new UI object to the patch after pattrstorage is set up, you will need to re-save the presets with the correct setting of the new UI object. Or you can edit the pattrstorage data.
Several ways of working with Ableton Live parameters in a M4L patch. (This is an improved version of the patch we built in class) https://reactivemusic.net/?p=18401
Office hours: Tuesday 1-2 PM, or Tuesday 4-5PM, at the EPD office #401 at 161 Mass Ave. Please email or call ahead.
Assignments and class notes will be posted to this blog: https://reactivemusic.net before or after the class. Search for: ep-426 to find the notes
Examples, software, links, and references demonstrated in class are available for you to use. If there is something missing from the notes, please ask about it. This is your textbook.
Syllabus:
Everybody calls this course “The Jitter class” – referring to Max/MSP jitter from Cycling 74. You will learn to use Jitter. But the object is to create interactive visual art. Jitter is one tool of many available.
The field of interactive visual art is constantly evolving.
After you take the course, you will have designed projects. You might design a new tool for other artists. You will have opportunities to solve problems. You will become familiar with how others make interactive art. You will explore the connection between sound, video, graphics, sensors, and data. You will be exposed to to a world of possibilities – which you may embrace or reject.
We will explore a range of methods and have opportunities to use them in projects. We’ll look at examples by artists – asking the question: How does that work?
Topics: (subject to change)
Jitter
Matrixes
Reverse engineering
Visualization of audio
Visualization of live data, API’s
Video analysis (realtime)
Video hardware and controllers
Prototyping
Video signal processing
OpenGL
Other tools: Processing, WebGL, Canvas, 2d graphics
Portfolios
Live performance
Grading and projects:
Grades are based on two projects that you will design – and class participation. Please see Neil Leonard’s EP-426 syllabus for details. I encourage and will give credit for: collaboration with other students, outside projects, performances, independent projects, and anything else that will foster your growth and success.
I am open to alternative projects. For example, if you want to use this course as an opportunity to develop a larger project or continue a work in progress.