Jitter in javascript

Why would you write Jitter code inside a js object?

  • Math expressions
  • File IO
  • Borrowed code
  • You’re just that way

There are three Jitter javascript tutorials (built in to Max) 45-47

Screen Shot 2015-04-24 at 12.55.44 AM

The Max javascript documentation is generally far flung. A helpful reference by Tim Schenk https://reactivemusic.net/?p=17445

Here’s an example to get started with. It downsamples a movie and changes the background color. Something I often dream about.

Screen Shot 2015-04-24 at 12.35.31 AM

Download

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

Folder: jitter-js

  • patch: downsamp-thing.maxpat
  • javascript source: downsamp.js

Writing Jitter external objects

Not as easy as it looks.

Screen Shot 2015-04-24 at 12.48.55 AM

Getting started

First, think of a way to get the same results without writing an external. For example, borrow other code, use javascript, gen, Processing, or MSPaint.

Apparently that didn’t work out. Well I can only get you so far.

Assuming that you have already done the following

Learn how to write non-Jitter externals:

Edit the examples

Currently the Jitter examples in the SDK are in the folders: examples/matrix and examples/gl. We’ll pretend we didn’t see GL.

Here’s a sensible approach on Mac OS.

  • Duplicate the example folder: jit.clip and rename the duplicate to something like jit.cliptz
  • Inside jit.cliptz open the Xcode project
  • Rename the Xcode project while in Xcode by single-clicking on the project name and editing it.
  • Now feel free to alter the code in any way. Look in jit.clip.c

In jit.clip.c, find the functions starting with

void jit_clip_vector_char(long n, t_jit_clip_vecdata *vecdata, t_jit_op_info *in, t_jit_op_info *out)

These are functions that processing the matrix vectors for char, long, and float matrixes respectively. We’ll work with the char function.

Change the code so that the pixel values are inverted as well as clipped by subtracting pixel values from 255.

Change two lines of code, marked here by the comment: // invert

	if ((is==1)&&(os==1)) {
		++n;--op;--ip;
		while (--n) {
			tmp =  *++ip;
			*++op = 255 - tmp>max?max:tmp<min?min:tmp; // invert
		}		
	} else {
		while (n--) {
			tmp =  *ip;
			*op = 255 - tmp>max?max:tmp<min?min:tmp; // invert
			ip+=is;op+=os;
		}
	}

 

  •  Clean and build the project.
  • The .mxo file will be under the Products folder. <Ctrl> click to show in finder
  • Copy the .mxo file into the same folder as your Max patch
  • What Max patch? This one:

Screen Shot 2015-04-24 at 12.38.14 AM

The window on the left is inverted because its getting that way in the object we just hacked.

That’s all

I didn’t really explain anything. Sometimes going through the motions is a start. If I had to do this for a living I would find the example that is most like a desired result and hack away.

Download

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

folder: jitter-dev

files:

  • test-object.maxpat
  • jit.cliptz.mxo (external) you will make your own version of this in Xcode

 

Jitter gen

Tutorials by Gregory Taylor

gen~ for beginners (not Jitter) https://cycling74.com/wiki/index.php?title=gen~_For_Beginners

Delicious Max Tutorials by dude837 

http://otherbirds.com/tutorials/

Pixelface (gen): https://www.youtube.com/watch?v=e49qgv5NuUQ

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

jit.ameba

Downsample/upsample with non obvious results.

Screen Shot 2015-04-13 at 2.22.43 PM

 

Mystery surrounds jit.ameba.

From earlier (Max 5)  Cycling 74 documentation https://docs.cycling74.com/max5/refpages/jit-ref/jit.ameba.html:

“The jit.ameba object began life as a completely failed attempt at a linear interpolation object. As the Oblique Strategies say, “Honor thy error as a hidden intention.” If you’re interested in linear interpolation objects, try the jit.plur object. Otherwise, please enjoy the mess.”

Horizontal and vertical quantization

What actually does that mean?

From the Cycling 74 Wiki

https://cycling74.com/wiki/index.php?title=jit.ameba

(There is no information here)

From Peter Elsea

http://peterelsea.com/Maxtuts_jitter/Gallery.pdf

“This is a pixilation (resampling) trick. The help file admits this was supposed to be something else, but didn’t work. Needs a spell check too, but pretty interesting. ”

 

SSTV in Max

Slow scan television simulation using Jitter.

See this Cycling 74 forum post for an explanation of how frame rate is limited by audio sample rate and  horizontal resolution: https://cycling74.com/forums/topic/jit-poke-vertical-bars-at-high-scan-frequencies/

Download

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

Screen Shot 2015-04-09 at 7.24.11 PM

Folder: sstv

Patches:

  • raster-scan4.maxpat (original)
  • raster-scan5.maxpat (better frame rate by lowering screen resolution to 160 x 120)
  • raster-poly-wrap5.maxpat (even better frame rate – up to 15 fps – by up sampling to 384 KHz)

Note – set your audio sample rate to 96KHz if possible, to get the results described above.