Package Max

follow

Compare a live performance to a recorded performance

Description

follow records pitches, or you can give it a MIDI file, in which case it looks at the file's note-ons and ignores other events. When it is "following" it outputs the index of the last note matched.

Arguments

filename[symbol]
optional

The argument is the name of a file containing a previously recorded sequence, to be read into follow automatically when the patch is loaded.

Attributes

Common Box Attributes

Below is a list of attributes shared by all objects. If you want to change one of these attributes for an object based on the object box, you need to place the word sendbox in front of the attribute name, or use the object's Inspector.

annotation[symbol]

Sets the text that will be displayed in the Clue window when the user moves the mouse over the object.

background[int]: 0

Adds or removes the object from the patcher's background layer. background 1 adds the object to the background layer, background 0 removes it. Objects in the background layer are shown behind all objects in the default foreground layer.

color[4 floats]

Sets the color for the object box outline.

fontface[int]

Sets the type style used by the object. The options are:

plain
bold
italic
bold italic Possible values:

0 = 'regular'
1 = 'bold'
2 = 'italic'
3 = 'bold italic'

fontname[symbol]

Sets the object's font.

fontsize[float]

Sets the object's font size (in points). Possible values:

'8'
'9'
'10'
'11'
'12'
'13'
'14'
'16'
'18'
'20'
'24'
'30'
'36'
'48'
'64'
'72'

hidden[int]: 0

Toggles whether an object is hidden when the patcher is locked.

hint[symbol]

Sets the text that will be displayed in as a pop-up hint when the user moves the mouse over the object in a locked patcher.

ignoreclick[int]: 0

Toggles whether an object ignores mouse clicks in a locked patcher.

jspainterfile[symbol]

You can override the default appearance of a user interface object by assigning a JavaScript file with code for painting the object. The file must be in the search path.

patching_rect[4 floats]: 0. 0. 100. 0.

Sets the position and size of the object in the patcher window.

position[2 floats]
write-only

Sets the object's x and y position in both patching and presentation modes (if the object belongs to its patcher's presentation), leaving its size unchanged.

presentation[int]: 0

Sets whether an object belongs to the patcher's presentation.

presentation_rect[4 floats]: 0. 0. 0. 0.

Sets the x and y position and width and height of the object in the patcher's presentation, leaving its patching position unchanged.

rect[4 floats]
write-only

Sets the x and y position and width and height of the object in both patching and presentation modes (if the object belongs to its patcher's presentation).

size[2 floats]
write-only

Sets the object's width and height in both patching and presentation modes (if the object belongs to its patcher's presentation), leaving its position unchanged.

textcolor[4 floats]

Sets the color for the object's text in RGBA format.

textjustification[int]

Sets the justification for the object's text. Possible values:

0 = 'left'
1 = 'center'
2 = 'right'

varname[symbol]

Sets the patcher's scripting name, which can be used to address the object by name in pattr, scripting messages to thispatcher, and the js object.

Messages

bang

Starts playing back the sequence stored in follow.

int

When follow is recording, the numbers received in its inlet are recorded as a sequence. The numbers may be bytes of MIDI messages (from midiformat or midiin), exactly as with the seq object. However, follow differs from seq in its ability to record individual integers; with follow you can record notes as a single pitch value. Whether the performance is recorded as complete MIDI messages or just as note-on pitches, follow can effectively step through the note-on pitch numbers later, when following a performance.

Arguments:
  • input [int]

  (inlet1)

When follow is following, numbers received in its inlet are compared to the numbers recorded in the sequence. When a number is received that matches the number in the sequence, follow sends out the index of that number.

Arguments:
  • input [int]

float

Converted to int .

Arguments:
  • input [float]

append

Starts recording at the end of the stored sequence, without erasing the existing sequence.

delay

The word delay , followed by a number, sets the onset time, in milliseconds, of the first event in the recorded sequence.

Arguments:
  • onset-time (milliseconds) [int]

dump

Calls up the standard Open Document dialog box, so that a previously recorded sequence or standard MIDI file can be opened as text and displayed in a new Untitled text window. This in fact has no direct effect on the follow object, but does allow you to view or edit a sequence, save your changes in a file, then load the new file into follow with a read message.

follow

The follow message is the main feature that distinguishes follow from seq. In effect, follow is like a score reader, comparing a live performance with the one previously stored.

The word follow , and a number, causes follow to begin comparing incoming numbers to its own stored numbers, beginning at the specified index (the specified event in its own stored sequence). When follow is following, and a number is received that matches the number recorded in follow, it sends out the index of that number.

The follow object is a forgiving score reader, and will try to follow along even if the incoming numbers do not exactly match the recorded sequence. If a number arrives that does not match the next number, or either of the two subsequent numbers in the sequence, follow does nothing. If a number arrives that matches a number up to two notes ahead in the sequence, follow assumes that the performer simply missed a note or two, and jumps ahead to the matched number.

Arguments:
  • index [int]

next

Causes follow to send out the index and the stored number it is currently trying to match, and move on to the next number.

print

Prints the first few events of the recorded sequence in the Max Console.

read

The word read with no arguments puts up a standard Open Document dialog box for choosing a sequence file to load into follow. If read is followed by a symbol filename argument, the named file is located and loaded into follow.

Arguments:
  • filename [list]

record

Starts recording integers received in the inlet.

start

The word start by itself has the same effect as bang . The word start , followed by a number, plays the stored sequence at a tempo determined by the number. The message start 1024 indicates normal tempo. If the number is 512 , follow plays the sequence at half the original recorded speed, start 2048 plays it back at twice the original speed, and so on.

Arguments:
  • tempo [int]

stop

Stops follow from recording, playing, or following. A stop message need not be received before switching directly from recording to playing, following to recording, etc.

write

Opens a standard Save As dialog box to save the follow sequence as a file.

Arguments:
  • filename [list]

Output

int

Out left outlet: When follow is following, and the number received in the inlet matches the next number in the stored sequence (or one of the two numbers after that), the index of the matched number is sent out. The index of the next number is also sent out when a next message is received.

Out right outlet: When follow receives a bang or a start message, the recorded numbers are played back. When follow is following, and a next message is received, the next number in the recorded sequence is sent out.

See Also

Name Description
seq Sequencer for recording and playing MIDI data
detonate Play a score of note events