Max/MSP text to Morse code generator

work in progress. not published.

I needed a text to morse code generator in Max for the Twitter streaming map project. There was an ancient one that used [mxj] but its kind of a pain to use that object. I thought it can’t be that difficult to write one? I didn’t really have any idea where to start. Something about the blank Max patch causes brain activity? I went through about 5 different approaches. Eventually came up with this pattern thing, from thinking about the lighted buttons on the tr-808 drum machine.

For example, the letter A is . _ (dot dash)

morse code has rules for spacing:

dot = 1
space between tones = 1
dash = 3
space between letters = 3
space between words = 7

If you think of a drum machine pattern, the pattern for letter A would be: 1 0 1 1 1 0 0 0  (with the 3 trailing 0’s for letter spacing)

I made a [coll] with all the letter patterns indexed by ascii codes.

Then just concatenate letter patterns, for a given block of text,  together into one big list and run it through [zl.nth] clocked by a [metro] and [counter]. the ones and zero’s turn an oscillator on and off.

local file: tkzic/internetsensors/twitter-stream2/morse5.maxpat

Python3 tcp client for Max

Using OSC from [udpsend]

I needed a better way to send radio frequency data from Max to a rigcltd daemon (via tcp). This is the method of tuning SDR devices hosted by CubicSDR.

From the max8radio folder run:

py3rigctl2.py

The input is OSC frequency data, on port 8001, in the form: /F 7001000

(This would be for 7.001 MHz)

An OSC server in the python program listens for these messages and then reformats and sends them to a running rigctld daemon running in the background on port 4532

rigctld -m 1 4532 &

The frequency message going to rigctld would be in the format: F+ 7001000

 

Python3 tcp client and server

Substitute for command line netcat (nc)

Running nc from the Max [shell] object was not only slow, but also caused audio clicks in CubicSDR. So here’s a link to python code using sockets to build a tcp client and server.  from this link: https://stackoverflow.com/questions/34653875/python-how-to-send-data-over-tcp

import socket

host = socket.gethostname()
port = 12345                   # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))

Python2 is not Python3

Less than subtle differences

The default python on Mac Catalina is 2.7.16.

But python 2 is officially deprecated. So to use a current version of python and pip in Mac OS you need to specify python3 and pip3.

Most of the python2 and python3 examples I found were not compatible. For example, the print command.

Video media converter ADVC-110

Bidirectional analog/digital conversion of composite, s-video, and firewire/ilink.

By Grass Valley

http://www.grassvalley.com/products/advc110

20091222_prodctShot_ADVC110.1920x1080.VidRes.png_305_0

Using this device on Mac OS X 10.9, analog video input shows up as a system device. It also works as a firewire video output device.

Input

 

Using Jitter you can get real time input from analog video devices like cameras and VCR’s. Here’s an example using jit.grab (Max help file) to get input from an analog camcorder.

Screen Shot 2015-04-22 at 8.48.35 PM

 

Output

Sending output via firewire to a TV using jit.qt.videoout (Jitter tutorial 22):

Screen Shot 2015-04-22 at 9.53.39 PM

This is what it looks like on a TV:

tv-out2