home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d5xx
/
d566
/
am.lha
/
AM
/
ReadMe
< prev
next >
Wrap
Text File
|
1991-11-21
|
10KB
|
259 lines
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