Advanced Music Creator
This is an excellent program. It does exactly what you need it to do, and unlike a normal tracker it's not necessary to keep copying and pasting patterns or columns. It makes a lot of interesting effects (such as vibrato, delays, strange pitch-bends and phasing) possible too. The initial learning curve is steep (mostly because you need to use hex, and to be able to convert binary values to hex to do things such as add noise to a particular instrument), but the software is powerful and the shortcut keys are very intuitive. I think it would be more useful to people with standard (unexpanded) CPC464, as music software for the 64k machine is much more limited than for the 6128.
The use of the common arpeggio effect used to simulate a chord when working with PSG and other soundchips is elegant when compared to doing the same inside a tracker (see the Infonote below).
The only downside to AMC is the fact that you're stuck with the 12 TET western music scale. However, a major advantage is that you can include the music you make with this program, inside your own programs.
If you keep a scientific calculator handy, it is much faster to use this program than to use a standard tracker.
The structure of the patterns is very close to the pattern structure in the music editor DMC on the C64. There are some obvious features which are not the same because of the difference between SID and AY, but it is possible AMC was heavily inspired by DMC.
For Balloonacy I (Arnoldemu) actually converted the C64 tune composed in DMC to the Amstrad and used AMC to play it back. I wrote my own tool to do this.
Advanced Music Creator v1.0 INFONOTE
With this software you are able to place up to 7 different tunes into one playerfile, e.g. if you are composing for a game you can slip the intromusic, your game-music and your game-over music into one file and only one player is used.
You are not limited any more to the three-voice-patterns. Each track has its own list, where you enter the number of blocks (a block of notes etc.) you want to play on the track. It means you can play every block on every channel!
The player’s coding of the AMC features a complete ADSR-routine. What does that mean for you? The volume-course of a sound is now controlled by Attack, Decay, Sustain and Release. In case you don’t know what this means, here’s a small excursion:
ATTACK: This defines the time, used for swelling the sound-volume from zero to the maximum (at the beginning of each note).
DECAY: After the volume has reached its maximum, this parameter defines the time, while the sound-volume falls down from the maximum to that volume, defined by the sustain-parameter.
SUSTAIN: Within the sustain-phase the sound-volume is held at this volume.
RELEASE: Within the release-phase the volume of the sound is reduced to zero. The length of time it takes to do so is defined by the release-parameter.
A final note: As you know, the playing rate of music is one time per frame (50 times a second). But with Joshua’s composer you can now break this standard and create musics played two or four times a frame, known as double- and quadrospeed. You can realise nice effects like scratching or digi-like drums.
The first time you start AMC, perhaps you will be a little shocked by the design. But that’s all you need for composing, and of course a little more...
Most of the screen is used for the three track-tables, one for each channel. With the cursor-keys you can move the cursor through the tracks, the current cursor-position within a track is displayed in the upper left-hand corner. You can enter the following into the track-tables:
00-7F A block of notes, commands...
80-BF Loop the following block XX-80 times
C0-FB Transpose the following blocks XX-C0 halftones up
FC Fade volume to the maximum, the following byte defines the fading-speed, lower means faster
FD Fade volume to zero, speed defined as like as byte $FC
FE Stop track
FF Init track – the following byte defines the new track-position
As you can see, in AMC all values are in hex.
Useful Keys in the TrackEdit:
CLR Copy area from the current cursor-position to the last position ($FF) to buffer
CTRL + CLR Copy and clear from current cursor-position
CTRL + COPY Paster buffer to the current cursor-position
TAB Jump to SoundEdit (see below)
ESC Jump to DiscMenu
CTRL + TAB Jump to TuneEdit
CTRL + ESC Edit song-infotext
CTRL + RET Jump to BlockEdit
The current number of the block you are editing is displayed in the upper-right corner. The value right of it displays the current cursor-position within the block.
In a block you define your notes like C-0, F#4 or A-7, as you want them to be played in the track. To enter a note press the letter representing the note, i.e. “C” or “A”, if you hold SHIFT down you’ll get the note a halftone higher, e.g. “D”+SHIFT for D#. Then the cursor moves over the octave numeral, and you can change it. To enter commands, press [full-stop] at the first column, then the first letter of the command you want, as there are:
.SND #XX Define sound-number for the following notes.
.DUR #XX Define duration (the time to wait before a note is to be played) for the following notes.
.VOL #XX Define the volume for the following notes.
.WAV #XX Change hardenvelope-waveform.
.FRQ #XX Change hardenvelope-frequency
.OFF Reset the attack-bit-mask – it means the sound will be released.
A nice effect occurs if you use .OFF commands without new notes in betweem them: the attack-bit-mask will be complemented (0 will be 1, 1 will be 0).
You can use this for echo-effects or others.
.TIE Skip initialising sound on each note – only the note frequencies will be set. A second .TIE will turn skipping off.
.GLD XX YY ZZZ
Slide from the current playing frequency to the note ZZZ.
XX is the speed (the adding-byte), YY the duration ($00 means add every frame).
●END● Stop this block and go to next track-position.
Function-keys in the BlockEdit:
CLR Same as in TrackEdit
CTRL + CLR Same as in TrackEdit
CTRL + COPY Same as in TrackEdit
TAB Jump to SoundEdit (same as in TrackEdit)
CTRL + RET Return to TrackEdit
ESC Return to TrackEdit
In this new screen you can design your sounds. In the upper-left corner the current sound-number is displayed. At the top of the screen you can define the general parameters:
ATTACK/DECAY XY X means attack,
Y means decay-value.
SUSTAIN/RELEASE XY X means sustain,
Y means release.
WAVETABLE XX The number of the wavetable (see below)
HARDENVTABLE XX XX-80 determines which hardenv-table is being used.
XX=00-0F means no hardenv is being used!
VIBRATO-DELAY XX The number of frames to wait, before vibrato starts
VIBRATO-LEVEL XX The add-byte.
VIBRATO-COUNT XX The number of addings before the add-byte becomes negative value
FIRST-WAVEBYTE XX See below!
Function keys in the SoundEdit:
CLR Same as in Track- and BlockEdit
CTRL+CLR Same as in Track- and BlockEdit
CTRL+COPY Same as in Track- and BlockEdit
TAB or ESC Return to Track- or BlockEdit
CTRL + RET When the cursor is at the hardenvtable-value you enter this table, otherwise you enter the wavetable-edit.
About wavetables, wavebytes and ADSR
As you read in the introduction, the volume is no longer controlled by valuetables where every volume-byte, frame by frame, is defined, as you find in actual music editors like SoundTrakker and others.
In AMC the volume is completely controlled by the player. Here the ‘wavebyte’ has a function:
Bit 7 Turn hardenv on current voice on/off
Bit 6 The ‘attack-bit’: when it’s 1, the player drives the attack-decay-sustain-phase; when it’s 0 the release phase.
Bit 5 When it’s 1, the ADSR is initialised and volume set to zero
Bits 4-0 The noise-frequency $01-$1F; $00 means turns noise off.
This wavebyte you can define frame-by-frame in the left column of the wavetable. Every right column is the arpeggio-byte; this value is added to the current note, e.g. 00, 03, 09 for a minor chord.
When you set bit 7 in the arpeggiobyte, the note-value will be taken directly, irrespective of the current note, allowing many new effects.
00: 41 FF ATTACK + NOISE, NOTE $7F
01: 40 00 ATTACK NOTE +0
02: 40 00
03: 00 00 RELEASE NOTE +0
04: 00 03 +3
05: 00 07 +7
06: FF 03 JUMP TO $03 (continuous chord)
The first arpeggiobyte $FF means set XX-80 directly, in that case $7F.
However, values greater than $5F will not be audible, so the tone is switched off in the first frame. Why? Look at the wavebyte: $41. It means attack volume and noise turned on to $01, and, as you should know, noises are best without a tone on the same channel.
You can also see the special byte $FF in position $06: it means jump to ...
So what does the FIRST WAVEBYTE mean?
Because of the slow PSG-addressing I decided to play no tables in the every first frame of a new note, because it would take too much rastertime. Regarding the unplayed wavetable in this frame, the player got the wavebyte through this ‘first wavebyte’!
Usually you should set it to $20 (init ADSR), then you will get the best dynamic, because if the sound on the actual track has not already finished, it will be by the $20.
The hardenv-table is nearly the same as the wavetable, except: it will only be recognised on Track 3!
The left-byte functions:
Bit 7 Set hardfrq in the following way:
Add to the current note the right byte (so it’s an arpeggiobyte) and recalc it to hardenv.
So the player does convert the note-frequency to the hardwave-env-frequency!
Bit 6 Add the right-byte to the current hardenv-frequency; the amount of addition is defined by the right byte in the next row.
Bit 4 Send bits 0-3 as the waveform to the PSG
Bits 0-3 When bit 4 is 1 these bits define the waveform.
00: 98 00 Set wave $8, get frq from note
01: 40 01 Add +1 to the freq
02: 00 01 2 times
03: 40 FF Add –1 to the freq
04: 00 01 2 times
05: FF 01 Jump to 01
$01 means 2 times because it’s $00-sensitive, so $02 means 3 times, and so on...
The meaning of the values:
TUNE The current tune you are editing. Don’t forget: each tune has its own tracks, but the sounds and blocks will be the same!
VOICE Bit 0: Track 3 on/off
Bit 1: Track 2 on/off
Bit 2: Track 1 on/off
SPEED Defines the speed of the current tune.
VOLUME Same for the volume. Set it to $0 when you want to start a tune with fading-in.
You enter the DiskMenu by pressing ESC in the tracktables. From there you can inspect the content of your disks (known as directories) and delete the actual song. Of course you can always load and save your song.
When you have finished your music you can save it with the player (no converter is required).
First you will be asked for the location-address of the player, then you have to enter the save-filename, and so on...
The music can be played like this:
First init it with
LD A, TUNENUMBER
Then CALL ADRES+3
If you want to fade out the song by a call you can use the following:
LD A, SPEED
General Function Keys
These keys can be used at any place:
F7 Play current tune
F4 Stop playing
F1 Continue playing
F0 Fast forward
You can sign your music with some text, by pressing CTRL+ESC in the tracktables. This text will also be saved if you save the music with the player!