SuperCollider CLASSES (extension)

KeyMode
ExtensionExtension

Find best correlated key mode with chromagram between major, minor and chromatic cluster
Inherits from: UGen : AbstractFunction : Object

Description

A key mode tracker where output 0 = major, 1 = minor, 2 = chromatic (cluster).

Based on a pitch class profile of energy across FFT bins, matching this to templates for major, minor and 7 note cluster chromatic scales in all transpositions. It assumes a 440 Hz concert A reference. The winning mode is based on the strength of the match, e.g. maximal correlation with key profiles for either major, minor or chromatic cluster (appropriately normalised to a probability distribution summing to 1.0).

Class Methods

*kr (chain, keydecay: 2, chromaleak: 0.5)

Arguments:

chain

[fft] Audio input to track. This must have been pre-analysed by a 4096 size FFT. No other FFT sizes are valid except as noted below.

// With standard hop of half FFT size = 2048 samples
b = Buffer.alloc(s,4096,1); // for sampling rates 44100 and 48000
//b = Buffer.alloc(s,8192,1); // for sampling rates 88200 and 96000
keydecay

[sk] Number of seconds for the influence of a window on the final key decision to decay by 40dB (to 0.01 its original value).

chromaleak

[sk] Each frame, the chroma values are set to the previous value multiplied by the chromadecay. 0.0 will start each frame afresh with no memory.

Inherited class methods

Instance Methods

Inherited instance methods

Examples

d = Buffer.read(s, "/data/audio/mirdata/pixiesivebeentired.wav")

d = Buffer.read(s,"/data/audio/mirdata/Beethoven8mvt4.wav")

b = Buffer.alloc(s, 4096, 1); // for sampling rates 44100 and 48000

(
{
var in, fft, resample;
var mode;

in = PlayBuf.ar(1, d, BufRateScale.kr(d), 1, 0, 1);

fft = FFT(b, in);

mode=KeyMode.kr(fft, 2.0, 0.5);

mode.poll;

Out.ar(0,Pan2.ar(in));
}.play
)