Code

[ c y c l e ~   4 4 0 ]

This page contains max-msp code that I have made that may be of use to other people. Please feel free to use it in your projects giving credit to Peter Reid if you distribute any of it. I'd be delighted to know that somebody has had use from my code so please also feel free to contact me and let me know what you have used it for.



Reversers (beta)

These objects will be in a beta stage for a short time while people can try them out and find things that could be improved or made clearer. The names of the parameters or certain other details of the operation could change.

Screenshot of prrevback.

This family of reversing objects are used to reverse a live input signal on command. The incoming audio signal is continuously recorded into a rotating buffer as used in common delay line systems. When the reverse command is received, the previously recorded sound is played back in reverse. This can be thought of as what would happen if a tape was suddenly reversed as it was playing, although this is not a perfect analogy. The first object, prrev~, fulfills this simple function. The other objects: prreverse~; and prrevback~ incorporate feedback so that the reversed audio is fed back into the delay and can therefore be 'rereversed'. The prreverse~ object allows control over how the signals are routed such as allowing the dry signal through, and gating it while reversing. The prrevback~ object allows control over all the levels within the patch, including the feedback level of the reversed audio and input levels during normal and reversing modes. Please refer to the help patches for more details.



Multiple Buffers Abstraction

Screenshot of prmultibuffload

The prmultibuffload object allows an (practically) unlimited number of soundfiles to be loaded in a single abstraction. The file name or full file path of a sound file, mp3 or movie with soundtrack is given to the left inlet and loaded into a newly created or reallocated buffer. The buffer name is output from the left outlet. When the buffer is no longer needed, the name of the buffer is sent into the middle inlet of prmultibuffload and the buffer is freed, ready to be used again for another audio file. The right inlet passes messages to the buffer named in the first list argument. Messages from a buffer are passed to the middle outlet of prmultibuffload with the buffer name as the first list argument. A dump message in the left inlet causes prmultibuffload to output the names of all the currently active buffers followed by a bang from the right outlet. The freeall message frees all the buffers then outputs a bang from the right outlet to indicate that it is finished.

This abstraction was created for a sample player project that may find its way to this page eventually. I wanted a system where I wouldn't have to create a large number of buffers only to end up with more than necessary or conversely running out. The patch uses scripting to create and connect multiple instances of a simple abstraction housing an empty buffer. I do not know if there is a limit to the number of buffers that multibuffload could cope with and I have not attempted to find it, I suspect there is one and I'd be interested if anyone could offer me any insight. The maximum value of a Max integer is one possible limit.


Text Quest

Screenshot of text quest

Text Quest is a program that allows the user to program and play simple text based games using speech synthesis and voice recognition. The user creates a text based quest file using a simple scripting language which gives the computer instructions as to what to say and how it should respond to specific commands spoken by the player. It can be used for any number of purposes but it was conceived as a way of creating 'choose your own adventure' type stories and 1980s style interactive fiction games.

It is a Macintosh only (Tested on 10.4.10) universal binary application, based on Masayuki Akamatsu's aka.speech and aka.listen Max objects. It has only been tested on Mac OS X 10.4.10 but should work on 10.3.9 and later.


qwerty Piano Abstractions

Screenshot of pdrkeyboard

These abstractions allow the user to use their qwerty keyboard as a MIDI controller keyboard or as a quick and easy piano. The bottom two rows of the keyboard form one octave, and the top and number rows form the octave above in a piano keyboard type arrangement with a few bonus notes thrown in.

pdrkbd outputs MIDI notes in response to key presses, and can be connected directly to a noteout object for a quick and easy way to test a MIDI device or test a virtual instrument when on the road for example.

Screenshot of pdrfmpno

pdrfmpno~ goes one step further and includes a polyphonic frequency modulation synthesis sound to go with the keyboard. The transposition, harmonicity and modulation index have been set to pleasant sounding piano-like values, and can be altered by messages to the inlets or using the controls in the abstraction. pdrfmpno~ is primarily for fun but could come in handy for testing signal paths or for trying out harmonies while composing away from a real keyboard.

In pdrfmpno~'s synthesis engine, the tuning is stretched by the harmonicity value giving it a nice bright sound, but this also means that it is only concert pitch at a harmonicity value of 1. Due to limitations of the qwerty keyboard, certain combinations of more than two notes will not work. Despite being somewhat limited, pdrfmpno~ can still produce pleasant polyphonic melodies!