csound M4L devices made from Max help patches

Examples of editing Max help files to build Csound M4L devices

fof

A formant based Midi synth using Csound FOF – from the Max help file for [csound~]

from “The Csound Book” by Dr. Richard Boulanger

download

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

folder: csound

device: csound-fof3-tz.amxd

instructions

  • drag csound-fof3-tz.amxd file into a midi track
  • arm the track for recording and play some midi notes

svfilter

Sample playback using a state variable filter using Csound SVFILTER – from the Max help file for [csound~]

from “The Csound Book” by Dr. Richard Boulanger

download

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

folder: csound

device: svfilter-tz.amxd

instructions

  • drag svfilter-tz.amxd file into a midi track
  • drag a file into the waveform display (or use the default file)
  • With the mouse, select a section of the waveform to start playback

general suggestions

for converting Max help files to M4L devices:

  • Replace UI objects with Live versions. For example, toggle becomes live.toggle
  • Replace audio inputs/outputs with plugin~/plugout~
  • Select UI objects for presentation mode
  • In inspector, change default Scripting names for UI objects to allow automation

build M4L devices using Max help patches

Edit Max help files to build M4L devices

An audio pitch transposer made from [gizmo~]

download

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

folder: gizmo

device: gizmo-mod-example.amxd

instructions

  • drag gizmo-mod-example.amxd file into an audio track
  • use dial to pitch-shift audio

Leap Motion version

If you have access to a leap motion sensor, here is the same device using hand gestures to control the pitch.

device: gizmo-thing-700.amxd

externals and dependencies

Uses the aka.leapmotion external – which needs to be in your Max file path. Download from here: http://akamatsu.org/aka/max/objects/

instructions

  • plug in a Leap Motion sensor
  • drag gizmo-mod-700.amxd file into an audio track
  • Click the toggle to start reading Leap Motion data
  • Wave your hands around to pitch-shift audio

general suggestions

for converting Max help files to Max for Live devices:

  • Replace UI objects with Live versions. For example, toggle becomes live.toggle
  • Replace audio inputs/outputs with plugin~/plugout~
  • Select UI objects for presentation mode
  • In patch inspector, set the patch to open in presentation mode
  • In UI object inspectors, change default Scripting names to allow automation. “Long Name” is the name used by Live for automation

Granular time stretching in Max

Adaptation of Andy Farnell’s Pd granular timestretch patch

Adjustable chunk-size, pitch, and speed – as well as manual scrubbing.

The original Pd patch (timestretch.pd) is available here: http://aspress.co.uk/sd/index.php

download

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

folder: granular-timestretch

patches

  • timestretch5.maxpat (main patch)
  • tabread4~.maxpat (Pd abstraction) 
  • hip~.maxpat (Pd abstraction)

How it works

An index pointer (file phasor) scans from the beginning to the end of the file. For example, at 44.1KHz, a 1 second file of audio would have 44,100 samples. Each sample is 022676 ms. Another phasor (grain phasor) scans small chunks (grains) of audio. If audio is playing back at the normal rate and pitch, this grain phasor runs at zero. the file phasor just moves sequentially from one grain to the next.

To stretch the time, the file phasor is slowed down, but the grain phasor speeds up, scanning grains of audio, that start at the current file phasor index. In this way, in listening to the file from beginning to end, you are actually listening to a series of overlapping grains.

As the chunk (grain) size increases the grain phasor frequency decreases.

To raise the pitch, the grain phasor frequency would be increased. To lower the pitch, the phasor frequency goes negative and increases in a negative direction to reduce pitch further.

As you can see, while running this patch, the chunk size, pitch, and speed are all related by a single equation.

phasor frequency = ((pitch / 120)**2 – speed) / chunksize

  • where pitch is in cents (0 is normal)
  • speed is a scaling factor (1 is normal)
  • chunk (grain) size  is in ms.

So the input values interact with each other.

In addition, the grain player uses a technique called PSOLA. Pitch synchronous overlap and add. There are actually two grain players playing simultaneously 180 degrees out of phase. Each is windowed using a positive cosine function. This helps to reduce clicks by crossfading from one grain to the next.

There is some comb-filtering and ringing present on the audio. There are various techniques to reduce this, including:

  • trying different window functions
  • higher sample rates
  • changing the overlap
  • varying the grain size
Interesting artifacts:
  • reducing the grain size to several ms. causes oscillation similar to the Karplus-Strong effect
  • increasing the grain size to around 1000 ms. causes a feedback delay effect due to the out of phase grain players
  • setting the overlap to anything other than .5 causes random phase cancellation
Manual or automated scrubbing.

There is also an option to manually scrub the file. This way you can listen to the texture of grains of various sizes from various points in the file.

You can also set random automatic scrubbing to branch to various points in the file.