CampCutProc:
Filter:
BBCut/Classes (extension) | Libraries > BBCut > Cut procedures

CampCutProc
ExtensionExtension

Automatic breakbeat cutting algorithm inspired by change ringing

Description

After a challenge by Robert Godman, this class implements cutting based on change ringing, that is, campanology. The paradigm is that of swapping offset positions. So the procedure works in small phrases, splitting that phrase into a number of blocks equal to the number of bells. Each bell has a proscribed offset position, so as they are permuted, the sequence of offsets change. Because the permutation sequences of bells can take a long time before repetition (whether or not they exhaust the permutation space) the CampCutProc is ideal for providing a constantly changing background of great variety from a small source.

The auxilliary class is CampStream, used for setting up the permutation data. There is little possibility to change data once running. The format for change ringing permtations is as follows: A permutation sequence is represented in change ringing texts by which elements are unpermuted. Let us work out the data for the Gainsborough Little Bob Major.

The x stands for 'change all'. Permutations are always of adjacent pairs. It is this limited permutation movement that gives the slow undulating changes that characterise change ringing. Like the librarian's dilemma problem, the sequence of involutions can take a while to acheive large shifts, but it gets there in the end.

We need to be more specific - we must write down what does change. However, since we know that a given element to be swapped must swap with its adjacent element, we only need list the leftmost of each pair to swap.

Then a above was the x in the change ringing notation. The CampStream takes as it's arguments permdata, method and bells. For the above example the permdata is the array [a, b, c, d] containing all the necessary permutations to specify the recipe for the Gainsborough LBM. The method is the sequence of use of these tokens, indexing the permdata array, as a stream, so

The number of bells is 8 for this composition. CampStream allows you (with some effort to rewrite the permutation sequence), to use any change ringing composition. Further, you can easily invent your own methods (without worrying about the rigour of covering all of a permutation space).

Since BBCut 2.3, you can input place notation directly into the CampStream object using the CampStream.notation class method. The first argument is the number of bells, and the second is the place notation string:

Since writing CampStream.notation is a drag under the pressures of live coding, you can also specify a two-element array to abbreviate this in CampCutProc.new:

For additional data on the algorithm see Nick Collins, "Further Automatic BreakBeat Cutting Methods", Proceedings of Generative Art 2001, reproduced at http://www.cus.cam.ac.uk/~nc272/.

Class Methods

.new

Create a CampCutProc object with the given parameters.

Arguments:

campstream

A CampStream object to represent the permutation sequence for this change ringing. Alternatively, you can specify a two-element array that will become the two arguments to CampStream.notation. If nil, defaults to Gainsborough Little Bob Major (8 bells, x.18.x.18.x.16.x.18.x.18.x.12).

phraselength

when value is called on it, next length of phrase in beats.

Instance Methods

.initCampCutProc

Called internally after a new.

.chooseblock

this uses the setoffset method of BBCutSynth to specify offset jumps relative to the current phrase size. In normal use phrasesize will be the same as the beat length of the source you wish to permute. Note that sources which don't respond to setoffset will not be effected by CampCutProc except for any enveloping/panning etc caused by blocks.

Examples