KeyKit is an awk-like
language developed by
Tim Thompson and designed specifically for manipulating MIDI data.
The full KeyKit system includes a multi-window and multi-tasking
graphical user interface, and can be used for both algorithmic and
The language itself has only a few built-in functions for graphics -
the entire user interface is written in KeyKit itself, and is hence
completely customizable and extensible by the user. The current version
works best on Windows NT and Windows 95, but the software is designed to
be portable. Previous versions have been ported to a wide variety of systems,
including UNIX, DOS, Mac, Amiga, and even Plan 9.
Multi-tasking. This is extremely important for musical uses, and allows
any number of tools and operations to be used simultaneously.
Object-oriented. An over-used buzzword, to be sure, but KeyKit allows
you to define classes containing methods and data.
Data elements within a class can be added on-the-fly.
Recording is always on. No matter what KeyKit is doing, it is
always recording MIDI input. This is used extensively within the graphical
interface - you never have to turn "record" mode on, and you never have to
worry about losing that brilliant riff you just improvised.
MIDI is a data type. Phrases of MIDI data are treated as a
first-class data type. Merging, concatenation, selection, and looping
are all done with built-in language operators and syntax. Standard MIDI
files can be read and written.
No declarations Variables are not declared, and the type of data
within a variable is determined on-the-fly. Arrays can contain data of
any type, including arrays.
Etc. etc. etc... Function references can be passed as arguments, allowing
parameterized operations to be specified in a flexible way.
Variable numbers of arguments can also be passed around conveniently.
A complete graphical user interface is implemented in the user-defined
library of KeyKit, using the small number of graphical
primitives that are built into the language. This interface defines
a standard for "Tools" that can all run simultaneously (thanks to
multi-tasking). The tools can exchange MIDI data either through
a clipboard (i.e. a global "Snarf" variable) or by using object-oriented
get/set methods that most Tools have. The get/set methods allow you to
copy data between tools by just pointing and clicking.
The largest tool in the user interface is a full-featured multi-track
sequencer. Editing operations are extensive, and infinite undo is supported.
New editing operations can be added by adding only a few lines of KeyKit
code to the user-defined library. New editing operations can even be added
on-the-fly, while KeyKit is running.
All pop-up menus are also pull-off menus, which you can place anywhere on
the screen, building up your own user interface suited to your current
Screen "pages" can be saved, containing the complete state of all tools
currently on the screen, including MIDI data within the tools.
This is a small screen dump showing a variety of the tools available
in KeyKit's graphical user interface.
A full-resolution version of this, and explanations of the
tools it shows, can be found
Frequently Asked Questions
Here is a viewgraph-style presentation with
more details about the history and features KeyKit.
Back to KeyKit Home Page
Copyright 1996 AT&T Corp. All rights reserved.
Windows is a trademark of Microsoft Corporation