Algorithmic Pattern Tool
By Peter Kienle
Released as Postcardware July 2002
Many years ago, I picked up an unusual program from a PD warehouse who were still providing Atari-MIDI programs. It was called Patterner. After working a long time, I still could not make heads or tails of it, however it still facinated me. Recently I dug it up again, and started experimenting with it and came up with a good working method to get immediate results thus opening up the system for exploration. Hoping that the programmer might still be around, I did a google search on the author Peter Kienle, and found out he is still alive and well.(see link section) I was able to make contact with him and he is now providing the most recent edition of the program as well as making it "postcardware" meaning, if you like the program, to send him a postcard! He is also providing demo files he has created using Patterner, full docs in Atari Pagestram 2.2 format as well as the docs in PDF format! Thank you Peter!
Description of Patterner
With Patterner you have a grid in which you can input "patterns" with the mouse. The Grid is based on scales (can be user defined)that can be different for every pattern. While the pattern is playing you can reverse the X/Y axis's of the grid thus changing the way it sounds (up scales become down scales) and many other functions ( I am still exploring it) Other functions include building up many "patterns" to form a song, and it plays the whole thing. Have not got that far yet. A very obscure but cool program. What follows now is from the first part of the manual, which explains it very well.
PATTERNER grew out of a rhythm programmer that would make it easier to create drum patterns for MIDI drum machines (or sound modules with drum sounds). This is where the 'graphic' approach comes from. The core of the program is a grid with 32x16 positions that can either be empty or filled. When playback is on, the first column of sixteen fields is scanned from bottom to top. When the playback routine finds an empty field it sends a MIDI Note Off message, a MIDI Note On when a field is filled. After a slight delay (determined by playback speed) the next column is scanned. This goes on until all 32 columns have been scanned through - then playback starts over at first column. This unit of 32x16 grid fields is called a BEAT.
When a filled field is found, what MIDI Note On is exactly sent? What keynumber (pitch) and velocity (volume), what MIDI channel? Attached to every BEAT is a list of note numbers and MIDI channels. This list has sixteen entries, one for every of the sixteen lines in the BEAT. If the playback routine finds a filled field at column three, line five, it will look up the fifth keynumber in the attached list and send the Note On message to the MIDI channel also specified at position five in the list. By the way, these lists are called SCALES. If you remember the rhythm programmer, you would use SCALES to make your rhythm compatible with different sound sources. Not all drum sound sources have the same instrument on the same keynumber.
What about velocity?
Each filled grid position in a BEAT can hold an individual velocity value. This value can be changed by special tools or manually by the user.
Now you see why it is pretty far removed from 'ordinary' sequencing. There are no complete MIDI messages stored in PATTERNER but they are built at playback time from interacting data structures.
Of course you can have more BEATS in memory than just one. In fact up to 2^15 (32768) if your computer has enough memory. Each BEAT can use its own SCALE - but doesn't have to.
When playing back you can of course switch BEATS to play back a sequence of BEATS. Or you can build a list of what BEATS the program should play back in what order. This is called a PATTERN. A PATTERN can hold a list of up to 2^15 BEATS. If a PATTERN has been played back to its last BEAT entry, it starts over.
Finally you can assemble playback lists for PATTERNS. In musical terms you would think about a PATTERN as a measure or phrase. Put PATTERNS in a playback list and you have created a SONG.
This works pretty much like you would work on older drum machines.
Remember how every BEAT looks up its MIDI keynumbers in a SCALE that is attached to it? There's another structure available that can be attached to BEATS. Suppose you want to switch your sound module to a certain patch before playing back a certain BEAT. To do this you would enter MIDI data into a structure called a MIDI MACRO. MIDI MACROs are just that: They can hold any MIDI DATA chunk (wether it makes sense or not). If the BEAT is set up to use an attached MIDI MACRO this data chunk is sent out through the MIDI port just prior to scanning the BEAT grid. In our example the MIDI MACRO will send its programm change data to the sound module before the BEAT is scanned. MIDI MACROS can be attached to BEATS in the same way like SCALES. Each BEAT can use a different MIDI MACRO but doesn't have to.
You can see now that PATTERNER assembles MIDI data while it runs. There is also something like a little 'programming language', well, not quite. But suppose you were able to insert a subroutine that would, for example, transpose a SCALE up by a half note. PATTERNER checks if a BEAT uses a MIDI MACRO, sends that data if required, then scans through the BEAT grid and then jumps to a special routine that transposes the SCALE attached to that BEAT. As the playback routine repeatedly plays over and over through that BEAT the attached SCALE goes higher and higher. Imagine if you could create such subroutines and use most of the tools in them that you also use to work on the different data structures (such as altering the contents of a BEAT, for example). Add to that the possibility to jump into a different user routine AFTER each scanned column, and after each finished BEAT, and after each finished PATTERN, and each finished SONG. Put different user routines in all of those places. Use random numbers and look up parameters, do some math on them and feed them back to where they came from. This system is called CYCLER and comes with a library of user routines that can be used to access most of PATTERNERs internal data.
Starting PATTERNER the first time
After loading an un-initialized copy of PATTERNER for the first time you will be presented with the registration procedure. Now, as I said, this is a fully functional version of the program and the registration box is left from the time when PATTERNER tried to be a comercial program.
While it doesn't matter what (or if) you fill in the Name &
Address dialog fields the first field MUST contain:
That's the password and all characters have to be entered, case is important, too. After this procedure is finished you will never be confronted with this box again.
Since many of PATTERNER's graphics routines are writing directly to the ST screen it will not work in anything else but ST mono (640x400x2) and ST medium (640x200x4) resolution. The program has been tested on ST, STacy and MEGA STe. It has now been confirmed to run on a TT and Falcon 030.
Working with Patterner
As mentioned, I found a quick and easy way to get started on using Patterner. After starting Patterner , I load one of the demo files by going to [file] and [system/load] Lesson 4 thru 6 will work. For this tutorial pick [lesson4.SYS].Another dialog comes up. What you are actually doing is loading several files at the same time that belong to that particular "lesson" or song. Select [continue]. The "song" is loaded into Patterner.
You can see on the top of the grid: [measure1-4]. This means the the grid is displaying the first 4 measures of the song.To the right of the grid you will see a field that displays the notes of the pattern. With the mouse, select ALL the notes so that they are highlighted.Now under 'graphical commands' select [clear]. You will see the notes in the main grid dissapear! It is now ready for you to input your own pattern using the mouse.Do so at this time. Be creative in your selections.
At the right bottom of the screen you will see 'scale' and the name of a scale. You will also see some up and down arrows. Click on the up or down arrows to change the scale.
Lets work on another pattern. On the top of the grid click on [measure1-4]. A dialog comes up so you can select the next measures. You can also delete a set of measures if you want.After picking a measure and then selecting [ready],you will see the next pattern dislayed in the grid. Now all you have to do is select [clear] as before, and click into the grid to create a new pattern. Continue to the next measure if you so desire.
Now to hear what you have done, simply select [P] (Bottom center of the screen) with the mouse and the pattern starts playing. You can do several things while it is playing. Go to 'graphical commands' and click on [mirror X] or [mirror Y]. This will change the position of the patterns in the grids. You can also unselect some notes in the editing field and the commands will only work with the selected notes.You can also invert, fill and shift the selected notes, and all this while the pattern is playing!
To stop patterner , you simply select [stop] at the top right of the screen.Save your creation by going to 'file' and selecting [sys/save] and give it a new name.
To find out more functions please peruse the manual.
Download Patterner ver 1.5
Download Patterner demo files by Peter Kienle
Download Patterner Docs in Atari Pagestream 2.2 Format
Download Patterner Docs in PDF format 636K
Peter Kienle's Home page
Peter Kienle's CD's that use Patterner:
Track 6 uses Patterner
Track 10 uses Patterner
Patterner MP3 Created by Peter
Here is a piece I created using Patterner.Patterner generated the bass and percussion. Lead lines added by hand (FM instruments)Prophet 2000 does the strings.
Patterner.MP3 by Tim Conrardy 4 megs