Spectrogram a spectral analysis view

OSX only at the moment.

SuperCollider allows for various modes of graphical representations of sound. The Spectrogram adds yet another mode (spectral view) to the Wave scope or the Frequency scope.

See also: SpectrogramWindow, FreqScope and Stethoscope

The Spectrogram comes in two modes, as a view that can be added to any SCWindow, and a special window that functions like the FreqScope window. See example below for the spectrogram window.

Creation / Class Methods

*new (parent, bounds, bufSize, color, background, lowfreq, highfreq)

Initialising the view, either in a Window or not.

parent - a Window (optional).

bounds - a Rect where the spectrogram appears in the parent (optional).

bufSize - frames in FFT window. default: 1024. Use power-of-2 sizes, such as 512 or 2048.

color, background - the foreground and background Colors.

lowfreq, highfreq - you can specify the range of frequencies you want to visualise.

// the spectrogram in a window

w = SCWindow.new("testing spectrogram", Rect(10,10, 600, 300)).front;

a = Spectrogram.new(w, Rect(10, 10, 580, 280));

a.start;

{Saw.ar(LFNoise1.kr(1).range(20,2250))}.play

Accessing Instance and Class Variables

rate_(arg1)

rate

Refresh rate. Default is 25 frames per second

bufSize

frames in FFT window. see above.

intensity_(arg1)

intensity

Intensity is how strong the drawn color is.

Default value is 5.

Instance methods

start

starts analysis and drawing.

stop

stops analysis and drawing

inbus_ (inbus)

The audio bus of analysis.

color_ (argcolor)

The color that is drawn.

background_ (argcolor)

The background color.

setBufSize_ (buffersize)

Sets the buffer size of the fft window. See above.

a = Spectrogram.new( color: Color.red);

{LPF.ar(WhiteNoise.ar(1), LFNoise1.kr(1).range(20,12250))}.play;

a.start;

a.background_(Color.blue);

a.color_(Color.black);

Examples

// a simple view for quick inspections of sound

a = Spectrogram.new;

a.start;

{AudioIn.ar(1)}.play // feedback warning!

a.intensity = 15;

a.rate = 25;

a.color_(Color.red);

a.background_(Color.green(alpha:0.1));

// spectrogram in a window

(

w = SCWindow.new("spectrogram".scramble, Rect(10,10, 600, 300)).front;

a = Spectrogram.new(w, Rect(10, 10, 560, 260));

a.start;

{Saw.ar(LFNoise1.kr(1).range(20,2250))}.play;

)

// spectrogram in a window with different colors

(

w = SCWindow.new("spectrogram".scramble, Rect(10,10, 600, 300)).front;

a = Spectrogram.new(w, w.view.bounds.insetAll(30, 10, 42, 10), background:Color(0.2, 0.25, 0.2), color:Color.red);

a.start;

{Saw.ar(LFNoise1.kr(1).range(20,2250))}.play;

)

// an example showing where the low and high frequencies are scaled and large bufsize (FFT window)

(

w = SCWindow.new("spectrogram".scramble, Rect(100,200, 600, 300)).front;

a = Spectrogram.new(w, Rect(10, 10, 550, 280), bufSize: 2048, lowfreq:1000, highfreq:10000);

a.start;

{SinOsc.ar(MouseY.kr(22050,1).poll(10, "frequency: "))}.play;

)

{Saw.ar(MouseX.kr(1, 1000))}.play;

// check also the spectrogram window

(

a = SpectrogramWindow.new;

{SinOsc.ar(MouseY.kr(22050, 1).poll(10, "frequency: "))}.play

)

// analogously to .scope and .freqscope, spectrogram is also added as a method to Function, thus:

{LFNoise1.ar(MouseX.kr(10, 4000)) * SinOsc.ar(MouseY.kr(15000, 1000, 1))}.spectrogram

{LPF.ar(WhiteNoise.ar(1), LFNoise1.kr(1).range(20,12250))}.spectrogram;

{Saw.ar(MouseX.kr(1, 1000))}.spectrogram;