home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 1
/
amigaformatcd01.iso
/
pd
/
music
/
utilities
/
xmodule
/
xmodule.doc
< prev
next >
Wrap
Text File
|
1996-04-30
|
52KB
|
1,340 lines
This manual documents XModule version 3.4 released on 14 Jun 95.
Copyright (C) 1993,94,95 by Bernardo Innocenti, all rights reserved.
Freely distributable.
If you haven't done it yet, have a look at the ReadMe/ReadMe file
first.
Overview
********
The Amiga computer has standard file formats for almost everything.
Graphics, text, animation, hypertext and many other data types are
easily imported into any program that supports the given standards, but
this isn't true for music. Too bad the music interchange file format
defined by Electronic Arts (the old IFF SMUS) was too poor to be usable
in high-quality music sequencers. Therefore, every music editor
created its own proprietary module format, so that, for instance, you
cannot load into ProTracker music written with Oktalyzer.
XModule
(pronounced
Cross Module
) born as music module
conversion utility that tries to solve this problem. The project
started in early 1993, as a friend of mine (Fabio), who wrote a lot of
(good) music on Oktalyzer, needed ProTracker to obtain certain effects.
He had an old PD conversion program called
Tracker
that worked only
in particular conditions and was really bogus. So I decided to contact
the author and he let me have the source for Lit30000 (about $20).
The original program has been completely rewritten from scratch, as
the source was poorly coded. Now XModule is a completely different
program sports many other features, like module optimization, a nice
user interface and complex module editing functions and it is quickly
turning into a full featured music editor.
This is why I like to call XModule a
module processor
. XModule is
to music processing what ADPro and ImageFX are to image processing (I
am not very modest :-).
Distribution
************
XModule is a
Freeware
program. This means that you (probably)
have got it free and
you must not ask any money
if you decide to copy
it for someone else. If, instead, someone sold you XModule for a price
higher than the media used to store it on (i.e. $1 for a DD disk), tell
him he should try making money honestly.
I'm not asking you to pay for XModule because I've never paid for a
ShareWare program, so I felt that I somehow had to pay my debt and I
decided to distribute XModule as free software, a little gift to all
the Amiga community. Feel free to distribute XModule to your friends
and enemies, but, if you do so, you
must
keep the documentation and
the other distribution files together with the executable. The source
code is not required, but I'm distributing it to let others take
advantage of my work, so, if possible, try to include the source too.
Fred Fish, SAN, ADS and Aminet are especially granted permission to
include XModule into their PD libraries. Other PD libraries are
welcome as well.
If you intend to include XModule or parts of it in a commercial
package, please at least send me a free copy of the product. I would
be honored to see one of my programs being part of a commercial package.
You can modify or improve XModule (see Programmers), only be so kind
to return the new source code to me, so I can put the new features in
the next release. And,
please
, do not strip my name from the
documentation, the program source, or the executable.
This product is provided
as is
, without warranties of any kind:
the author of this program cannot be held liable for any defects in the
executable nor in the documentation or in any other files contained in
this package. Any damage directly or indirectly caused by the
use/misuse of XModule is the sole responsibility of the user
her/him-self. In other words: XModule never formatted my hard disk nor
killed my dog, so I suppose it won't cause any damage to your system
either, but, just in case, do not blame me if something nasty happens.
Getting Started
***************
XModule requires Kickstart version 2.0 or greater. The reason is
that I hate programming on 1.3 and I won't do it any more. If you still
haven't upgraded to 2.0, you'll miss the chance to run XModule and many
other wonderful programs. So what are you waiting for?
XModule also takes advantage of some 2.1 and 3.0 features, such as
DataTypes, AmigaGuide, Locale and many enhancements for the user
interface.
You can invoke XModule either from the Shell or Workbench. XModule
accepts both command line and ToolTypes arguments. Workbench and Shell
parameters are the same. The full AmigaDOS template is:
XModule FROM/M,PUBSCREEN/K,PORTNAME/K,SETTINGS/K,
CX_POPUP/T,CX_POPKEY/K,CX_PRIORITY/K/N,
ICONXPOS/K/N,ICONYPOS/K/N,ICONNAME/K
The
FROM
keyword specifies modules to load at startup time. Standard
AmigaDOS wildcards can be used to match more than one module. From
Workbench, you multi-select module icons instead of specifying a
ToolType.
Specifying the
PUBSCREEN
keyword, followed by a public screen name,
allows you to open XModule on an existing public screen. The given
name should match exactly (case matters), or the system won't be able to
find the requested screen. If the requested screen does not exist, a
new public screen will be opened, cloning the resolution and colors of
the default public screen (usually the Workbench screen). Specifying
an empty string (eg:
""
) you will automatically pick the default
public screen. Note that this behavior is not standard: most
commodities will abort if the requested public screen does not exist.
The default is to use or create a public screen called
XModule
.
PORTNAME
will change the name of XModule's ARexx port. If a
port with this name already exists, a number (eg:
.1
) will be
appended to the name, until a unique name is found. You can disable
the ARexx port providing an empty string (eg:
""
) for
PORTNAME
.
The port name defaults to
XMODULE
. For more information about the
ARexx port, consult the ARexx Interface chapter.
SETTINGS
causes XModule to use the given settings file instead
of looking for the default preferences file.
CX_POPUP
controls wether the user interface should show as
soon as XModule starts. The default is to always show the interface.
When used from the shell,
CX_POPUP
acts as a toggle, turning off the
user interface. From Workbench, you specify
CX_POPUP=YES
or
CX_POPUP=NO
to show and hide the user interface, respectively.
See Commodities.
CX_POPKEY
specifies the hotkey that pops up XModule's user
interface. The given string should be a valid Commodities input
description. You can disable XModule's Commodities broker specifying
an empty string (eg:
""
) for
CX_POPUP
. The default is
ctrl alt
x. See Commodities.
CX_PRIORITY
sets the Commodities priority for the XModule
broker. An high priority causes the input to be processed by {No Value
For "prgnmae"} before other commodities with a lower priority. The
priority ranges from +127 to -128. The default priority is 0. See
Commodities.
ICONXPOS
specifies the X position of XModule's AppIcon. The
default is to let Workbench choose a suitable position for the icon.
ICONYPOS
specifies the Y position of XModule's AppIcon. The
default is to let Workbench choose a suitable position for the icon.
ICONNAME
specifies the name of XModule's AppIcon. The default
name is
XModule
.
User Interface
**************
XModule's GUI follows Commodore's 2.0 style guidelines. Under
Kickstart 3.0 and above, XModule takes advantage of new OS capabilities
to enhance some aspects of the GUI.
Windows Layout
==============
Gadget and menu layout is font sensitive, but using some fancy fonts
could result in a somewhat weird look. If you are using a very big
font and a window becomes too big to fit in the screen,
topaz/8
will
be used as a fallback for rendering that window.
When you close a window, it will remember its position and size when
you open it again. The same is true for window zooming operations.
XModule will also try to make the active window visible by scrolling
the screen automatically. This feature comes handy if you use a
virtual screen which is wider and/or taller than the default.
Shortcut Keys
=============
In all windows, the following shortcut keys are active:
ESC
Close the active window. Does not work with ToolBox window, as it
would make it too easy to accidentally exit the program.
HELP
Bring up AmigaGuide on-line help. See On-Line Help.
TAB
Cycles forward through string and numeric gadgets within the active
window.
SHIFT-TAB
will cycle backwards.
TAB
also activates
the first string or numeric gadget if none is selected.
Alt-TAB
Activates the next XModule window.
ALT-SHIFT-TAB
activates the
previous window.
RETURN
Activate the first string or numeric gadget in the active window.
Cursor UP/DOWN
Move up and down in a viewlist whenever the active window contains
one.
SHIFT-Cursor
moves 5 items up/down.
ALT-Cursor
moves to
the top or to the bottom of the list. This shortcut requires at
least Kickstart 3.0.
In addition, gadgets with underscored characters in labels, can be
operated hitting the highlighted key.
SHIFT-key
acts the opposite of
the unshifted key (sliders are decremented by one, cycle gadgets will
cycle backwards, etc). Keyboard shortcuts will not work for all gadget
kinds under Kickstart 2.0.
On-Line Help
============
This feature requires
amigaguide.library
, which is distributed
with Workbench version 2.1 and up, and
XModule.guide
located in the
current directory or in the same directory of XModule's executable or
in the
HELP:language/
directory, where
language
is any of your
Locale preferred languages. AmigaGuide(TM) is also available as a
freely distributable package for 1.3-2.0 users.
To get help on a gadget, press HELP while the mouse pointer is over
the gadget. To get help on a string gadget, activate it and press
HELP. Hitting HELP while the mouse isn't over a gadget, will give you
help on the active window.
To get help on a menu item, hilight the item and press HELP while
keeping the right mouse button pressed.
Localization
============
Localization requires
locale.library
, which is distributed with
Workbench version 2.1 and up, and the catalog file
XModule.catalog
located in the same directory of XModule's executable or in the
LOCALE:catalogs/language/
directory, where
langage
is is any of
your Locale preferred languages.
If you speak a language for which a catalog isn't yet available,
please consider writing it yourself and then send it to me, so it will
be included in the next release of XModule. Look at the empty catalog
translation file
Empty.ct
in the
Catalogs/
. It can be used to
create new catalog descriptions for XModule. Then, use a tool like
`FlexCat', `KitKat' or `CatComp' to compile it into a catalog file.
Commodities support
===================
XModule is a Commodity and can be controlled by the Commodities
Exchange program.
XModule will pop up when its hotkey is typed; the main window will
activate and the screen will move to the front. If XModule's interface
is hidden, it will be revealed.
The user interface can be hidden with the Exchange program. When
the user interface is hidden, the only ways you have to still operate
XModule is through the ARexx port or the AppIcon.
You can also control XModule by sending the following signals to its
process:
*
CTRL-C
Quit XModule.
*
CTRL-D
Disable the Commodities broker (equivalent to selecting
Inactive
with Commodities Exchange).
*
CTRL-E
Enable the Commodities broker (equivalent to selecting
Active
with Commodities Exchange).
*
CTRL-F
Deiconify XModule (equivalent to double-clicking on the AppIcon).
Default Icons
=============
When XModule creates an icon for a file, it looks for the user
preferred icon for the type of data being saved.
The template icons can be placed in the
Icons
drawer which is
located in the same drawer where the XModule executable resides.
p{No Value For "rgname"} will also look for its icons in the
ENV:Sys/
directory. If you choose to use
ENV:Sys/
, you will
probably want to store the icons in
ENVARC:Sys/
to have them copied
automatically to
ENV:Sys/
every time the system boots up.
Template icons should be only of type
Project
. When XModule does
not find a template icon, it uses the default Project icon instead.
Whenever the default icon does not have its own default tool, it
will be set to XModule's executable.
The following default icons are supported:
-
def_Module
-
def_Instrument
Panels
******
Sorry, XModule's documentation is still incomplete. The next release
will hopefully be more accurate.
But wait! Do not commit suicide for this reason: XModule is very
easy to use, and you will be able to operate it even without this
chapter.
ToolBox Window
==============
Gadgets
-------
Patterns (P)
Opens or activates the Pattern Editor window.
Instruments (I)
Opens or activates the Instruments information window.
Sequence (Q)
Opens or activates the Sequence editor.
Songs (S)
Opens or activates the Song Information window.
Optimization (O)
Opens or activates the Optimization window.
Play (P)
This option has not been implemented yet.
Project Menu
------------
New (Amiga-N)
Creates a new empty song.
Open (Amiga-O)
Opens a song over the current one. A file requester will be put
up to let you choose the module. The file requester is
asynchronous, so you can continue operating XModule while keeping
the requester open. You can use multiselection to open several
modules at once.
Save (Amiga-S)
Saves the current song to the same path it was loaded from.
Save As (Amiga-A)
Opens a file requester and saves the current song to the selected
file name and path.
Clear Module (Amiga-K)
Opens or activates the Clear Song panel.
About (Amiga-?)
Brings up a requester showing various information on XModule.
Help (HELP)
Shows the main node of the AmigaGuide on-line help. See On-Line
Help.
Iconify (Amiga-I)
Closes all open windows and screens and puts an AppIcon on the
Workbench. You can De-Iconify XModule by double clicking on the
icon or by using
Show Interface
in the Commodities Exchange
program. See Commodities.
Quit (Amiga-Q)
Quits XModule. A requester will ask if you are sure if the
Settings/Confirm Exit
menu item is checked.
Settings Menu
-------------
Save Format
Opens or activates the Save Format window.
User Interface
Opens or activates the User Interface window.
Save Icons?
When this menu item is checked, XModule will automatically add an
icon to the files it saves. See Default Icons.
Confirm Overwrite?
When this menu item is checked, XModule will ask before
overwriting an existing file when saving something.
Confirm Exit?
When this menu item is checked, XModule will ask if you are really
sure before quitting.
Verbose?
When this menu item is checked, XModule will be output more
detailed information on various operations.
Open Settings
Opens a file requester asking for an XModule preferences file. The
changes will take place immediately.
Save Settings
Saves the current settings to
PROGDIR:XModule.prefs
, which is
where preferences are looked for first.
Save Settings As
Opens a file requester and saves the current settings to the
selected file and path name.
Pattern Editor Window
=====================
Overview
--------
The pattern editor is used to actually edit notes into your song. A
song is made up of several patterns which are played one after the
other following the order defined in the Sequence editor.
A pattern is subdivided into
tracks
. Each track is made of several
note slots. Each note slot has four basic fields: the actual note, the
number of the instrument used to play this note, a field for the
effect
(also called
command
) and a
value
for the effect, the
meaning of which depends from the type of effect (see Effects). A
line
is an horizontal set of note slots. The lines are numbered
starting from 0 (line numbers are displayed in the leftmost column of
the pattern editor).
A pattern can have 1 to 32 tracks. The more the tracks, the more the
notes that can be played at the same time. When XModule plays a
pattern, it reads the lines one by one, playing all the notes and
executing all the effects as soon as it encounters them. A pattern
line can be imagined as one sixteenth of a beat when the pattern is
played at the default speed and tempo.
A pattern row looks like this:
C-2 5 C40
~~~ | |~~
| | ||
| | |+---- Effect Value
| | +----- Effect Command
| +------- Instrument
+----------- Note
Notes are shown in anglosaxon notation, followed by the octave
number. So
C-2
is a second octave
DO
in classic notation and
A#3
is a third octave diesis
LA
. There are 5 octaves numbered
from 0 to 4; a
C-2
note is twice the frequency of a
C-1
, and it's
instrument will be played at double speed.
The duration of the note is determined by the space left from one
note to the next. For example, if a note is immediately followed by
another note on the same track, it's duration will be one sixteenth of
a beat at four quarters. If two notes are put one at line n and the
other at line n+4 (leaving three blank spaces between), the duration of
the first note will be exactly one quarter.
Calculating the duration of a note can become trickier when weird
combinations of speed and tempo are used. Also, notes can be
associated to instruments which have an endless loop (like a flute) or
to instruments that only last for a short time and then stop (like a
snare drum). In the latter case, the duration of a note could be
shorter than it's distance from the following note. Experience will
help understanding these simple rules.
Editor Keys
-----------
up
down
left
right
Move the cursor one position towards the respective direction.
Keeping cursor keys pressed will repeat the movement until the key
is released.
Cursor keys in combination with the
SHIFT
key will move the
cursor a whole page up/down or one track left/right, keeping it on
the same column.
Cursor keys in combination with the
ALT
key will move the cursor
to the top/bottom/leftmost/rightmost position.
Cursor keys in combination with the
CTRL
key will scroll the view
without moving the cursor. This is useful to reveal something
without having to reposition the cursor.
NOTE:
You can adjust the repeat speed and delay with the
`Input' system preferences.
TAB
Move to the note column of the next track. Pressing
TAB
on the
last track, will bring the cursor to the first track.
SHIFT-TAB
moves backwards.
DEL
Delete the field under the cursor.
SHIFT-DEL
kills all the note
slot (note, effect and value).
Project Menu
------------
Open Pattern (Amiga-O)
Opens a file requester where you can select a pattern to be loaded
in place of the current one.
Save Pattern (Amiga-S)
Saves the current pattern to a file with the same name of the
pattern. If the pattern has no name, a file requester will open.
Save Pattern As (Amiga-A)
Opens a file requester where you can select the file and path name
where the current pattern will be saved to.
Edit Menu
---------
Mark (Amiga-M)
Toggles mark mode in the pattern editor.
Cut (Amiga-X)
Copies the currently marked region to the clipboard and erases it
from the pattern.
Copy (Amiga-C)
Copies the currently marked region to the clipboard.
Paste (Amiga-V)
Gets the last pattern stored into the clipboard and pastes it in
the current pattern starting at the current cursor position.
Erase (Amiga-E)
Clears the currently marked region.
Undo (Amiga-U)
Restores the pattern to the state it was before the last
modification.
Redo (Amiga-Y)
Remakes the last change undone with the Undo function.
Instruments Editor Window
=========================
Gadgets
-------
Instruments List (Cursor up/down)
This list shows all the instruments of a song. The leftmost column
is the instrument number (hexadecimal), followed by its name.
Some musicians usually use the instrument names to include short
texts inside the modules they distribute. Picking an instrument
from this list will set it as the current instrument. An empty
instrument slot with no name will have the word
-empty-
in place
of its name.
Instrument Name (RETURN or TAB)
(The string gadget immediately below the Instruments list). Allows
editing the name of the currently selected instrument.
Volume (V)
Default instrument volume. Ranges from 0 (mute) to 64 (maximum
volume).
Fine Tune (F)
Sets the instrument fine tune. 0 is the default tuning. Negative
values cause the instrument to be played at a slightly lower
frequency. Positive values cause the instrument to be played at a
slightly higher frequency.
Lenght
Displays the instrument lenght in bytes.
Kind (K)
This function has not yet been implemented.
Edit (E)
Opens or activates the Sample Editor panel.
Instruments Menu
----------------
Load (Amiga-L)
Loads an instrument in the current intrument slot. A file
requester will be put up to let you choose the instrument. The
file requester is asynchronous, so you can continue operating
XModule while keeping the requester open.
Save (Amiga-S)
Saves the current instrument to a file with its current name.
SaveAs (Amiga-A)
Opens a file requester and saves the current instrument to the
selected file name and path.
Remap (Amiga-R)
Remaps all the instruments removing all empty slots between them.
The song patterns are updated to keep the correct instruments.
This function is useful to save a module to a format which has a
limited number of instruments, like SoundTracker.
Song Information Window
=======================
Gadgets
-------
New
Creates a new module and makes it the current module.
Del
Deletes the current module from memory. If the module has been
modified since last saving, a requester will give you the chance
to abort the operation.
Open... (O)
Opens a song over the current one. A file requester will be put
up to let you choose the module. The file requester is
asynchronous, so you can continue operating XModule while keeping
the requester open. You can use multiselection to open several
modules at once. This gadget behaves exactly like the
Open
menu
item in the ToolBox panel.
Save (S)
Saves the current song to the same path it was loaded from. This
gadget behaves exactly like the
Save
menu item in the ToolBox
panel.
Song Name (N)
Displays the name of the current song. You can use any character
in the song name, but keep in mind that the name you type will be
used by default as the filename for the song, so be careful with
special characters such as
/
and
:
!
Author (A)
Displays the author of the current song. XModule tries to guess
the author when it loads a module whose format has no direct
support for embedded author name. XModule scans the instruments
names looking for a line beginning with a pound sign (
#
). This
convention started with `IntuiTracker', an old module player for
the Amiga. If the author name can't still be found, XModule looks
again for an occurence of
by
,
by:
or
(c)
, which is usually
followed by the author name. The author name is ignored when
saving to a format which does not support embedding the author
name.
Tempo (T)
Displays the default tempo for the current song. Valid range is
32-255, the dafult is 125. The default tempo is used when the song
starts playing and can be overridden by the Set Tempo command.
See Effects.
Speed (P)
Displays the default speed for the current song. Valid range is
1-31, the dafult is 6. The default speed is used when the song
starts playing and can be overridden by the Set Speed command.
See Effects.
Restart (R)
Displays the position where playback will continue once the song
end has been reached. The restart position is lost when saving to
formats which do not support it.
Patterns
Displays the total number of patterns in the song.
Tracks
Displays the maximum number of tracks in the song.
Length
Displays the number of positions in the song sequence.
Total Module Size
Shows an approximation of the memory used up by the song and its
data. This value will usually be similar to the file size.
Total Instruments Size
Shows an approximation of the memory used by all the instruments
of the current song.
Song Menu
---------
Merge Songs (Amiga-M)
Join Songs (Amiga-J)
Clear (Amiga-K)
Sequence Editor Window
======================
Gadgets
-------
Had no time to write it, sorry. ;-)
Menu
----
Had no time to write it, sorry. ;-)
Save Format Window
==================
Gadgets
-------
Had no time to write it, sorry. ;-)
Menu
----
Had no time to write it, sorry. ;-)
Clear Song Window
=================
Gadgets
-------
Had no time to write it, sorry. ;-)
Menu
----
Had no time to write it, sorry. ;-)
Sample Editor Window
====================
Gadgets
-------
Had no time to write it, sorry. ;-)
Menu
----
Had no time to write it, sorry. ;-)
Effects
*******
Had no time to write it, sorry. ;-)
Format Conversion
*****************
XModule can load and save modules created by other music editors.
The following is a list of all supported module formats:
As a matter of fact, there are things that simply cannot be done
because of the big differences between different module formats. Below
is a list of the internal limitations of each module format. When you
save to a particular format and the module exceeds one of these values,
or makes use of features not implemented, some data will be stripped
away to produce at least a partial conversion.
Program Instr MaxPatt PattLen SongLen InstrLen Tracks
---------------------------------------------------------------
Oktalyzer 36 128 128 128 128K 4
SoundTracker 15 64 64 128 64K 4
NoiseTracker 31 64 64 128 64K 4
StarTrekker 31 64 64 128 64K 4/8
ProTracker 31 100 64 128 64K 4
Fast Tracker I 31 100 64 128 64K 4/6/8
MED/OctaMED 63 256 256 256 No Limit 1-64
XModule 63 256 32768 32768 No Limit 1-32
Where:
#Instr is the maximum number of instruments,
MaxPatt is the maximum number of patterns,
PattLen is the maximum number of lines per pattern,
SongLen is the maximum number of positions in a song,
InstrLen is the maximum size of an instrument in bytes,
Tracks is the maximum number of tracks in a pattern.
Effects are the hardest thing to convert. While Speed and Volume
are almost the same between different music editors, some effects (such
as Oktalyzer's H and L) cannot be converted because there are no
equivalents in other music editors. Therefore, you will have to modify
the score manually if you intend to convert a module while keeping such
effects. In addition, some effects behave in different ways even if
they claim to do the same thing.
Last but not least, some music editors support synthetic or hybrid
instruments. XModule does not convert such instruments, because I can
hardly think of a way to implement a sample to synth conversion (any
ideas?). I used to like synthetic music, but it seems that all those
great composers on the good old C64 have vanished... Why have you
musicians become so lazy? 8-(
NoiseTracker
============
Noise/ProTracker 31 instruments module. This is absolutely the most
common module format; almost any music editor and module player (even
the crap ones for the PeeCee) understand this format. Noise/ProTracker
modules can be recognized by looking for the ID
M.K.
at offset 1080
($438 in hex) in the file.
M.K.
are the initials of Mahoney &
Kaktus, the two guys who designed this format.
Unfortunately, there is an infinite variety of standard NoiseTracker
modules with fancy IDs. In fact, most tracker clones put their own ID
instead of the standard one even if there is no reason to do it. If
you find such a module, try replacing the ID with an hex editor and you
will be able to load it most of the times.
ProTracker 100 Patterns
=======================
XModule will automatically switch to
ProTracker 100
whenever the
module being saved exceeds the 64 patterns limit of NoiseTracker
modules. Modules with more than 64 patterns have the ID
M!K!
instead
of the standard Noise/ProTracker ID (
M.K.
).
Note:
You
must
load such a module with ProTracker 2.3 or
better in order to play/edit it. Older players will either refuse to
load it or they'll turn the module into scratch dance.
ProTracker 3.0+ has a completely new file format, but this isn't
supported yet, as I've never seen a module of this kind yet.
SoundTracker 15 Instruments
===========================
This format is pretty useless as SoundTracker is becoming really
rare. Do not save SoundTracker modules unless you really need to,
because most players/editors will stop supporting this format very soon.
There is no way to identify a SoundTracker module, therefore XModule
will ask you to confirm a SoundTracker module when the file being
loaded matches no other known module format.
StarTrekker
===========
StarTrekker is another NoiseTracker clone, which is capable of
playing modules with 4 or 8 channels and supports MIDI devices. The
format of 4 channels modules is the same of NoiseTracker, except for
the
FLT4
ID. Modules with 8 channels have the ID
FLT8
, and keep
the extra data in a second file, whose structure I don't know. If you
want support for 8 channels StarTrekker modules, please send me some
information on its format.
UNIC-Tracker
============
Actually, I've never seen UnicTracker, but I sometimes ripp Unic
modules with ExoticRipper, so I decided to give support for this weird
Tracker clone too. The format is very similar to that of ProTracker
modules, except for the
EMW3
ID.
FastTracker 1.0
===============
The format of FastTracker 1.0 modules is exactly the same of
TakeTracker, but they can have only 6 or 8 channels. XModule does not
support FastTracker 2.0 modules (those with extension
.xm
) yet.
TakeTracker
===========
These are Standard ProTracker modules, but they can have up to 32
channels. Their ID is
5CHN
,
6CHN
, and so on, up to
32CH
. This
format comes from some damn PeeCee tracker, which I've never seen.
Anyway, adding this format was a matter of five minutes.
Oktalyzer 1.1
=============
Oktalyzer is an old editor which can play up to 8 channels by mixing
instruments in real time. Oktalyzer modules start with the ID
OCTASONGGMOD
. Development of Oktalyzer has been discontinued, as
the author seems to be programming on Windoze now. It's really a
shame, as many musicians found that Oktalyzer was one of the most
powerful trackers for the Amiga.
MED
===
Not all features of MED are supported by XModule. Synthetic and
hybrid instruments are ignored.
OctaMED
=======
MMD2 modules are not supported. XModule will only load the first
song in multisong modules.
XModule currently has an internal limit of only 32 tracks, while
OctaMED can do up to 128 tracks. However, OctaMED can only play the
first 8 tracks, so what are the other tracks for? ;-)
ScreamTracker
=============
ScreamTracker 3.01 is a damn PeeCee program made by those Future Crew
guys who are trying to turn clones into Amigas. ScreamTracker has the
amazing feature of playing 32 tracks, 16 of which are for 8-bit digital
samples. The other 16 tracks play ADLib FM synths (not supported by
XModule).
MIDI File
=========
MIDI is the industry standard musical score format (the same way
Windoze is the industry standard graphic interface :-). The MIDI
concept is very different from tracker modules. There are no sequence
and patterns, but a long stream of events (notes) that have to be sent
to some MIDI compliant device, one after the other, at specific time
intrvals, based on the duration of each note. There are no instruments
inside MIDI files; instead, each note is associated with a preset
number that matches a particular instrument in the device to which the
MIDI events are sent.
XModule's MIDI file saver is based on Andrew Scott's MidiMod program
and I wish to thank him for granting me permission to use his code in
XModule.
Optimization
************
Module optimization is achieved by removing all unused data in such
a way that the module will sound the same as before. XModule can
process a module to reduce its size as much as possible. It is
generally a good idea to optimize a module before distributing it, but
never while you are still composing it, because you could easily loose
some data that you didn't want to discard. Do not expect to gain a lot
of bytes optimizing modules: saving 20% of the total size is usually a
very good result.
*
Unused patterns
Some formats (e.g.: Sound/Noise/ProTracker) store empty patterns
in a module if a pattern with a greater number is used. For
instance, a song using patterns 1, 2 and 5 will contain patterns 3
and 4 as well.
Warning
: If a song contains a part that has not been finished
yet and has not already been inserted in the position table, you
will lose it.
Warning
: When a song is saved to Noise/ProTracker, patterns
beyond the last used patterns are discarded regardless of this
switch. This is due to a limitation of Noise/ProTracker module
format.
*
Pattern Cutting
When a pattern is breaked with the Pattern Break effect, it is cut
to the line containing the break. When saving to a format that
does not support variable length patterns (eg.: SoundTracker), the
pattern is grown again, so this optimization won't help with such
formats.
*
Unused instruments
A composer may decide to use an instrument and then change his
mind, but forget to clear the instrument. In this case the module
will contain an instrument that is never played. These instruments
are simply stripped away.
*
Sample data after a loop
The part of an instrument following a loop is never played and is
therefore discarded.
*
Instruments zero tails
Long zero tails eat up memory and produce no sound. This
optimization is performed only on loopless instruments, as a zero
sequence inside a loop
does
make difference. XModule leaves at
least two zero bytes to avoid the nasty click produced by the
speaker dropping its volume to zero too quickly.
ARexx Interface
***************
Sorry, sorry! XModule's documentation is still incomplete. The
next release will hopefully be more accurate (and it's already four
releases I'm promising it :-).
Anyway, XModule's ARexx port is a little brain dead at the moment,
so you're not missing a great deal.
Known Bugs
**********
Murphy's laws state that nothing can be perfect, not even computer
programs. XModule is far from being perfect and I need your help to
fix as many bugs as possible. If you discover a bug which isn't
reported in the list below (note: there is no list at the moment; this
is a beta release, remember?), please notify me.
When you report a bug, state exactly what happens and indicate how
to reproduce the conditions that generated the problem. Reports like
`XModule sometimes crashes converting my favorite module' does not help
at all. Include your name if you want to be credited in future XModule
releases.
If the program refuses to convert a module, mail it to me on a disk
or upload it to a BBS that I can reach and I'll try to fix the problem
as soon as possible. Glass Globe BBS, whose address can be found in
the Author Info chapter, will do. If you want the disk back with the
fixed version of XModule, send me a self-addressed envelope with enough
italian stamps or enough money for a reply.
XModule has been tested on several machines running Kickstart 2.0,
3.0 and 3.1. It should work on any 68K family processor (was tested on
68000, 68030 and 68040) and is Enforcer and Mungwall proof. I have also
tested XModule with virtual memory programs such as VMM and found that
everything seems to work correctly.
Future plans
************
*
Other module formats
Some formats I'd like to give support for in XModule as soon as
possible:
- FastTracker II (
.XM
)
- MultiTracker (
.MTM
)
- OctaMED MMD2
- Face The Music (
.FTM
)
- Quadra Composer
If you have documentation regarding a format you would like to see
in the next release, please send it to me together with a couple
of modules and, if possible and legal, the program that created
them. I'll try to implement the new format only if it is somewhat
easy: it is very hard to convert, say, Future Composer to
SoundTracker. Please, do not send a module without at least a
text file describing its structure, as I'm not willing to spend my
nights hex-dumping modules :-).
*
TeX
Another format I'd like to add is AmigaTeX. If you know TeX,
you'll surely be wondering what a typesetting program can be used
for in music. Well, AmigaTeX is at the moment is the best
implementation available on any computer of the TeX typesetting
environment, and its distribution includes
MusicTeX
, a powerful
music language which can output notes in a great standard staff
notation. I know no other program on the Amiga that can print
notes of such fine quality (if you do, let me know!), so I think
that many musicians would appreciate such an option.
*
External Loaders/Savers
Add support for 3rd party loaders and savers in XModuule.
Currently, I'm thinking about the best implementation of the
external module interface. The really best way would be making a
new DataTypes class for modules, but it's not that easy...
Programmer notes
****************
XModule has been written in C and compiled with SAS C 6.51, Other
compilers may require some changes in the source code.
The program is written in respect of the Amiga multitasking
operative system and complies with Commodore programming guidelines.
All allocated resources will be (hopefully) freed before program
termination. I wrote XModule with the goal in mind of keeping the
executable fast and small.
This manual has been typeset using MakeInfo, a GNU PD utility ported
to the Amiga by Reinhard Spisser and Sebastiano Vigna. I found that
the time I saved writing one file for three was nearly compensated by
the time spent learning how to operate MakeInfo.
Besides, English is not my first language (as you might have
guessed) and I bet this document is full of grammar mistakes.
If you intend to translate, improve or somewhat edit this document,
please work on the supplied TexInfo file and then process it with the
utilities supplied in the MakeGuide distribution. You can find
MakeGuide in several PD libraries such as Aminet.
Do not hesitate sending criticisms to my work, and, even better,
advices on how to improve the program and its documentation. See
Author Info.
XModule Module Format
*********************
Before going into the details of the XModule module format, I'd like
to explain why I felt the need to invent yet another module format.
There were plenty of them, but none had the flexibility I was looking
for. The only one exception is in my opinion OctaMED's MMD. But the
MMD file format is very complicated, hard to read and poorly
documented. When I designed it, I wanted XMOD to be as flexible, easy,
efficient and expandable as possible. If you are developing a music
program, please consider supporting XMOD. If you have troubles with
the following format description, contact me and I'll be glad to help
you.
XModule modules are standard IFF files. They consist of a sequence
of chunks (also called
proprieties
) each storing a particular type of
information related to the module. Text chunks, such as NAME and AUTH
chunks are variable sized and NOT null terminated. When you read such
a chunk, you should take care to clip the string to your maximum buffer
size. NAME and AUTH fields are optional and should be assumed empty
when missing.
As with every IFF file, you should not depend on the order and size
of any chunk. However, as usual with most IFF formats, header chunks
must always precede related BODY chunks. XModule requires this for
PHDR chunks because it isn't possible to load a pattern without knowing
its length and number of tracks. Some chunks may grow in size in
future versions of XModule.
FORM XMOD
[NAME]
The name chunk contains the original name used to save the module.
[ANNO]
XModule stores its copyright information here.
MHDR
Module header. Contains a ModuleHeader structure as defined in
<XModuleClass.h>.
FORM SONG
The song FORM contains all data relative to one song. Any
number of songs can be stored into one module.
[NAME]
Name of the song.
[AUTH]
Author of the song.
SHDR
Song Header. Contains a SongHeader structure as defined in
<XModuleClass.h>.
SEQN
Song Sequence. The contents of this chunk are unsigned words
representing the pattern to play at a particular position.
The size of this chunk should be twice the Length field of
the SongHeader.
When a song contains multiple sections, one SEQN chunk will
be stored for each of the song sections (not implemented).
FORM PATT
Each occurrence of this FORM contains one pattern. Patterns
are numbered starting from 0. Each pattern has its own
length and number of tracks.
[NAME]
Name of this Pattern.
PHDR
Pattern Header. Contains a PatternHeader structure as
defined in <XModuleClass.h>.
BODY
The BODY chunk is stored as an array of PatternNote
structures. Tracks are stored one after the other.
There are NumTracks*Length Note structures in the BODY
chunk.
END FORM PATT
FORM 8SVX
Each SONG contains one or more occurences of this FORM,
one for each sample. XModule currently saves and loads
only the NAME, VHDR and BODY chunks. Be prepared to
decode Fibonacci Delta Encoded BODY chunks. An additional
non-standard chunk is saved:
INST
XModule instrument info. Contains an InstrumentInfo
structure as defined in <XModuleClass.h>.
When the BODY chunk is missing, the sample must be
loaded from the instrument library using the contents
of the NAME chunk as the file name.
See the IFF 8SVX documentation for more details.
END FORM 8SVX
END FORM SONG
END FORM XMOD
Credits
*******
These people have helped me in developing XModule:
* Fabio Barzagli, for beta testing XModule and for giving me all his
awesome modules!
Keep on making good music, Fabio!
* Jarno Paanen, for sending me the obfuscated source of his 32
channel replay engine and for the e-mail support.
Perhaps I would have understood more by disassembling the PS3M
executable. :-))
* Peter Kunath, for sending me all the sources I asked him for and
for giving me very detailed information on them.
What would have happened if I asked you for the complete
DeliTracker sources? :-))
* Massimo Brogioni, for being my boss and for spreading all those
bogus XModule releases all around the world.
Hey boss, have you got a spare 5Gig hard disk?
* Erno Tuomainen, for his wonderful finnish BBS, for his kindness
and for all the support he gave me.
Are there any more top-rated modules to leech?
* Pauli Porkka, for his kindness, for letting me win a free DASMP
key, for the sources and for all the e-mails.
Will you support my format in the next DASMP release?
* Woody (Nicola Ferruzzi), for S3M and XM format descriptions.
I'll send you a postcard from Japan as soon as I go there. :-)
* The Amiga, for being the best computer in the world. :^)
Commodore: You've put really a lot of effort trying to kill the
Amiga, but you won't succeed!
How to contact the author
*************************
If you want to make me aware of your suggestions, bug reports, ideas
or you want to send me a gift, a good module or, why not, some money
:-), reach me in any of the following ways:
*
Mail
Bernardo Innocenti
Via Ventiquattro Maggio, 14
50129 - Firenze
ITALY
*
FAX
+39-55-8877771
Attn: Bernardo Innocenti
Subj: Amiga/XModule
*
E-Mail
FidoNet: Bernardo Innocenti 2:332/118.4
AmigaNet: Bernardo Innocenti 39:102/201.4
UseNet: bernie@shock.nervous.com
*
SystemShock BBS
Phone: +39-55-499038
Sysop: Bernardo Innocenti
Message area 300: XModule Support
I'll try to reply to all my E-Mail, but I'm too lazy to reply
snail-mail. Your suggestions will be taken into account unless they are
`I want XModule to do ice tea'-style.
Concept Index
*************
100 Patterns ProTracker modules ProTracker
32 Channels ProTracker Modules TakeTracker
6CHN FastTracker
8CHN FastTracker
Acknowledgements Credits
Arguments, command line Getting Started
Author's address Author Info
Break signals Commodities
Bug reports Known Bugs
Bugs, known ones Known Bugs
Commands Effects
Compiling XModule Programmers
Contact the author, how to Author Info
Credits Credits
def_Instrument Default Icons
def_Module Default Icons
Distribution Distribution
Effects Effects
FastTracker FastTracker
File Format used by XModule XModule Format
Font Sensivity Windows Layout
Format Conversion Format Conversion
GUI User Interface
Help, On-Line On-Line Help
How to contact the author Author Info
Icons, changing defaults Default Icons
Instruments Editor Window Instruments
Introduction Overview
Keys, Shortcuts Shortcut Keys
Known Bugs Known Bugs
Language selection Localization
Layout, of Windows Windows Layout
Localization Localization
M!K! ProTracker
MED MED
MIDI File MIDI File
MMD Format OctaMED
Modifying XModule Programmers
Module Formats Format Conversion
NoiseTracker NoiseTracker
Notation Pattern Editor
OctaMED OctaMED
Oktalyzer Oktalyzer
On-Line Help On-Line Help
Optimization Optimization
Overview of XModule Overview
Panels Panels
Pattern Editor Window Pattern Editor
Programmers, notes for Programmers
ProTracker ProTracker
S3M Format ScreamTracker
Save Format Window Save Format
ScreamTracker ScreamTracker
Sequence Editor Window Sequence
Shortcut Keys Shortcut Keys
Song Information Window Song Information
SoundTracker SoundTracker
Starting XModule Getting Started
StarTrekker StarTrekker
TakeTracker TakeTracker
Thanks Credits
ToolTypes Getting Started
UNIC-Tracker UNIC-Tracker
Usage Getting Started
User Interface User Interface
Windows Panels
Windows Layout Windows Layout
Writing a new language catalog Localization