home *** CD-ROM | disk | FTP | other *** search
-
-
- What is AM?
- ===========
-
- - AM is public domain software.
-
- - AM produces algorithmic music through any MIDI environment.
-
- - AM needs AmigaDOS 2.0 and the midi.library by Bill Barton
-
-
- About AM
- ========
-
- This piece of software has been developed and was successfully used for an
- exhibition of pictures of a young painter I know, Olivia Rost.
-
- The exhibition was entitled "Der Nabel der Welt". The overall theme of the
- shown pictures and drawings was about the way, the human race approaches
- the new genetic technologies - both technically and in mind.
-
- The initial opening was planned to last for two hours. When Olivia asked
- me to write some music for this opening, I immediately thought of
- algorithmic music being the right thing to do this job. I had those early
- software packages in mind, "genetic music" and "DNA music" and the like. I
- asked for them at some software vendors, but it seems that these things
- have had some problems on the commercial market :-(.
-
- So I decided to write something myself. The first version of AM was coded
- during some weekend just to test my thoughts. After some refinements, I
- added some gadgets to ease the parameter input. The result has then been
- used for the exhibition. (Lazy guy? Come on, at least it worked! :-)
-
- This version has got one new feature (see below), which came to my mind
- during the opening. If you have other special ideas of producing
- algorithmic music, feel free to extend this program. But send me a copy of
- your results, I would love to hear other people's ideas.
-
- The original exhibition script is provided as an example. I designed this
- script and the proper sounds to produce a slow (remember: two hours!)
- evolution from harmonic to disharmonic sounds. The script shows how to
- assemble AM processes to build a complete performance.
-
-
- Running TAKT
- ============
-
- First of all, you have to run the sync master called "takt". Give it the
- number of milliseconds (0..999999) you want to have between two sync
- signals, e.g.
-
- 1> run takt 333333
-
- for three syncs per second. Every new AM process links onto the sync port,
- and will reject to run without it.
-
- To stop the sync process, just give it a break (ctrl-c) signal. Before
- dying, the sync process will terminate all running AM processes:
-
- 1> status
- Process 1: Loaded as command: ced
- Process 2: Loaded as command: conclip
- Process 3: Loaded as command: Workbench
- Process 4: Loaded as command: Helper
- Process 5: Loaded as command: Arq
- Process 6: Loaded as command: status
- Process 7: Loaded as command: takt
- Process 8: Loaded as command: am
- Process 9: Loaded as command: am
- 1> break 7
- 1> status
- Process 1: Loaded as command: ced
- Process 2: Loaded as command: conclip
- Process 3: Loaded as command: Workbench
- Process 4: Loaded as command: Helper
- Process 5: Loaded as command: Arq
- Process 6: Loaded as command: status
- 1>
-
-
- Running AM
- ==========
-
- AM can only be started from Shell. I have not had the time to implement
- any file requester for the startup parameters, but redirecting the input to
- some file works just fine. Also, after stopping an AM process, the last
- actual parameter set will be printed to stdout, so if you want to keep the
- changed parameters, also redirect the output to a file, for example
-
- 1> run AM <oldpar >newpar
-
- If you do not redirect the input, AM will look for parameters from the
- keyboard. When "run"'ed like above, AM will start immediately, thinking
- there is no input available. When started as the foreground process, you
- can enter parameter definitions (see below). An empty line or an undefined
- parameter keyword ends the input mode. AM will use it's default settings
- for up to then undefined parameters. Example:
-
- 1> AM >ram:test ; input from keyboard, output to ram:test
- skala=963633963517 ; set some parameters
- kanal=13
- pausen=0.55
- ende ; end input (empty line would do)
-
- When given the option '-w', AM will open a window containing all necessary
- gadgets to control the parameters in real time:
-
- 1> run AM -w >newpar <oldpar
-
- This option is for experimenting and for designing a new set of parameters.
- When you want AM to just process some previously defined data, start it
- with only the proper redirections (probably <parfile >NIL:). This keeps
- your screen from getting overcrowded.
-
- AM starts smoothly by fading the volume slowly in over the first few
- generated notes. This is to prevent abrupt changes in the flow of sounds
- and can't be disabled.
-
- To stop an AM process, break it (ctrl-c). Use the Shell command 'Break' to
- terminate background processes of AM. See the example script on how to
- control many AM processes running simultaneously.
-
- If the parameter window is enabled, you can also stop the corresponding AM
- process by clicking on the close gadget.
-
-
- Parameters
- ==========
-
- AM expects its parameter input to be lines of the format "KEYWORD=VALUE".
- An empty line or a wrong keyword ends the parameter input mode and starts
- the music generation.
-
- The output generated from AM can be used as the parameter input for the
- next AM start.
-
- In the parameter control window, the parameters 'KANAL' and 'INSTR' are
- each displayed one step higher than their actual values. So Kanal=1 in the
- parameter window means MIDI channel 0, and Instr=0 means no change.
-
- The Skala and CSkala string gadgets have a fixed length of 12 characters.
- If you enter less, the input will be discarded. If you leave just the
- "nn:" in the CSkala gadget, the corresponding CSkala entry will be cleared.
-
-
- Now for the allowed keywords (case is not significant) and their values:
-
-
- Keyword | Value (Range) | Description
- ----------+----------------+---------------------------------------------
- KANAL | 0..15 | MIDI channel to be used (-> 1..16)
- | |
- INSTR | -1, 0..63 | Instrument# for MIDI device, -1 means no
- | | change
- | |
- FREQMITTE | 0..127 | The middle frequency; note pitches will be
- | | generated in the range FREQMITTE ± FREQABW
- | | This is measured in half steps, 0 is the
- | | lowest pitch playable through MIDI, 127 the
- | | highest
- | |
- FREQABW | 0..127 | see above, 12 means ± one octave
- | |
- VOLMITTE | 0..127 | The middle volume; note volumes will be
- | | generated in the range VOLMITTE ± VOLABW
- | |
- VOLABW | 0..127 | see above
- | |
- PAUSEN | 0.0 .. 1.0 | How many new notes shall be generated?
- | | 0.0 means every sync is a new note, 1.0 means
- | | the first note lasts forever...
- | |
- TONAUS | 0.0 .. 1.0 | If not starting a new note: The probability
- | | of stopping the actual note. 0.0 means no
- | | Note-Off at all, 1.0 means every pause also
- | | stops the note (so all note lengths will be
- | | of the sync interval length)
- | |
- SKALA | 12 characters | This is the big one. The 12 chars tell the
- | CcDdEFfGgAaB | "allowance" of each half tone of the octave.
- | | By carefully setting this value, you can
- | | control the harmonic of the generated music.
- | | The default value is "999999999999" what means
- | | all notes are absolutely allowed. This produces
- | | totally random harmonics.
- | |
- ENDE | - none - | Terminate parameter input mode
- | |
- ----------+----------------+---------------------------------------------
- CSKALA | nn:SKALA | Added for this release. This provides for
- | | "continued skalas" what means every half tone
- | | can lead to it's own skala of allowed tones
- | | to follow. Not applied CSkalas default to
- | | the basic SKALA.
- | | By carefully programming this parameter, you
- | | can give the produced music some kind of
- | | melody; the programmed patterns will occur
- | | from time to time, causing the listener to
- | | remember them.
- | |
-
-
- Now here's a commented example input to AM:
-
- Kanal=0 Output to MIDI channel 1
- Instr=-1 No instrument change
- FreqMitte=63 Note pitches will vary between 51
- FreqAbw=12 and 75 (range of two octaves)
- VolMitte=63 Volume will vary between 43
- VolAbw=20 and 83
- Pausen=0.40 40 % of the syncs will be pauses
- TonAus=0.30 30 % of those pauses will stop the sound
- Skala=909099090909 C Major (C D E F G A B)
- CSkala=00:500009000000 C leads to C or F
- CSkala=05:000000090000 F leads to G
- CSkala=07:300006000090 G leads to C, F or Bb
- Ende That's it
-
-
- And here are the default settings:
-
- Kanal=0
- Instr=-1
- FreqMitte=63
- FreqAbw=48
- VolMitte=63
- VolAbw=48
- Pausen=0.40
- TonAus=0.30
- Skala=999999999999
-
-
- Last Words
- ==========
-
- As each AM process generates exactly one voice, the composition of the
- harmonics is up to you. By carefully selecting the SKALA and CSKALA
- parameters, you should be able to produce any sound and melody, from
- absolutely boring to totally random. It's up to you.
-
- Feel free to use the code as a skeleton for your own algorithms, but if you
- do so, I would like to get a copy of your results. Send flames to HELL:
- and comments or enhanced versions to
-
- balzer@heike.informatik.uni-dortmund.de
-
- or
-
- M.BALZER@AWORLD.ZER
-
- or
-
- Michael Balzer
- Wildermuthstr. 18
- W-5828 Ennepetal 14
- GERMANY
-
-