First commit
[ITMCK.git] / itmck_manual.tex
blob33bedae3b4577331eb0caed3bcd8b3d8b817e83c
1 % ITMCK manual v0.1
2 % This manual is in public domain.
4 \def\ecall#1{\bgroup\edef\next{\egroup#1}\next}
6 \font\ninerm=cmr9
7 \font\titlefont=cmr7 scaled\magstep4
8 \font\headIfont=cmr10 scaled\magstep3
9 \font\headIIfont=cmr10 scaled\magstep2
10 \font\headIIIfont=cmr10 scaled\magstep1
11 \font\bigtt=cmtt10 scaled\magstep2
12 \font\mediumtt=cmtt10 scaled\magstep1
14 \shipout\vbox to\vsize{
15 \vss
16 \centerline{\titlefont ITMCK Manual}
17 \smallskip
18 \centerline{v0.1}
19 \vss
21 \pageno=2
23 \newif\ifnotbeginchapter \notbeginchapterfalse
25 \newcount\secnoI
26 \newcount\secnoII
27 \newcount\secnoIII
29 \let\tocI=\relax
30 \let\tocII=\relax
31 \let\tocIII=\relax
33 \newwrite\tocfile \immediate\openout\tocfile=\jobname.toc
35 \def\headblock#1#2#3#4{\moveright#4pt\vbox{%
36 \hrule%
37 \hbox{%
38 \vrule%
39 #1%
40 \phantom{\'(}%
41 \ecall{#2}%
42 \phantom{\c)}%
43 \ecall{\write\tocfile{#3{#2}{\folio}}}%
45 }}%
47 \def\esecI{\uppercase{\romannumeral\secnoI}}
48 \def\esecII{\esecI.\the\secnoII}
49 \def\esecIII{\esecII.\char\the\secnoIII}
51 \def\headI: #1\par{%
52 \advance\secnoI by 1 \secnoII=0
53 \vfill\eject%
54 \headblock\headIfont{\esecI.\quad#1}\tocI0%
55 \penalty600\bigskip\penalty600%
56 \mark{\esecI}%
57 \global\notbeginchapterfalse%
59 \def\headII: #1\par{%
60 \advance\secnoII by 1 \secnoIII=96
61 \bigbreak%
62 \headblock\headIIfont{\esecII.\quad#1}\tocII3%
63 \penalty600\medskip\penalty600%
64 \mark{\esecII}%
66 \def\headIII: #1\par{%
67 \advance\secnoIII by 1
68 \medbreak%
69 \headblock\headIIIfont{\esecIII.\quad#1}\tocIII6%
70 \penalty600\smallskip\penalty600%
71 \mark{\esecIII}%
74 \def\cdotl{\ \cleaders\hbox{ \vrule height4.5pt depth-3.5pt width1pt\ }\hss\ }
75 \headline={\ninerm\ifnotbeginchapter\topmark\fi\cdotl\folio\cdotl\firstmark}
76 \footline={\ninerm\firstmark\cdotl\folio\cdotl\botmark}
77 \output={\plainoutput\global\notbeginchaptertrue}
79 \parskip=6pt plus 6pt minus 0.5pt
80 \parindent=1pc
82 \let\TT=\bigtt
83 \let\Tt=\mediumtt
85 % === Begin main document text ===
87 \headI: Introduction
89 This is the documentation for ITMCK. ITMCK is a program to take an input
90 MML (Music Macro Language) file to make Impulse Tracker compatible file
91 output.
93 \headII: Compiling
95 This program is written in C89 with GNU extensions and there is a UNIX
96 shell script named {\tt compile} to make compile into executable file. If
97 you have Microsoft Windows (or ReactOS), you should be able to run the
98 executable file directly, but on Linux you can compile it using the C
99 compiler and then it should work.
101 \headII: Invoking
103 This program must receive the MML code on standard input and then the
104 binary output on standard output. Usually you would redirect input from a
105 file having {\tt.mml} extension and redirect output to a file having
106 {\tt.it} extension.
108 For example: {\tt itmck < song.mml > song.it}
110 There are command-line parameters which can be activated as follows:
112 {\tt-c}\quad Set compatibility setting. Give it an argument which is the
113 number for the compatibility setting. Compatibility setting is described
114 later in this document.
116 {\tt-e}\quad Export raw sample data to standard output. The parameter will
117 be the number of the sample to export. This can only be used with
118 synthesized samples and cannot be used with external samples. The normal
119 output is suppressed when this mode is used.
121 {\tt-p}\quad Set prefix for external samples. When loading an external
122 file, the text here will be given as a prefix for the filename when
123 accessing the external files. It is necessary to include the trailing
124 slash if it is the name of a directory.
126 {\tt-t}\quad Trace input. No parameter is used. This will display each
127 line of input on standard error when it is being processed, including the
128 preprocessing, and errors for that line will appear with that line so that
129 you can debug the input file.
131 {\tt-v}\quad Version number. No parameter is used. No input is requested
132 and the standard output will include the version number of ITMCK.
134 {\tt-x}\quad Volume 0 mix optimization. No parameter is used. This command
135 will activate the ``volume 0 mix optimization'' flag in the output file.
137 \headII: License
139 ITMCK is licensed under GNU GPL v3 or later version. This document is
140 licensed under public domain. A copy of the GNU GPL v3 should have been
141 made available in a file named {\tt COPYING} in the same media that you
142 received the program with.
144 \headI: Syntax
146 \headII: Comments
148 \headII: Musical Notes
150 \headII: Numbers
152 There are three ways to write numbers in ITMCK wherever they are expected.
154 If multiple parameters are expected, you cannot normally separate numbers
155 by spaces. However, you can use commas if it would be ambiguous to put
156 them directly next to each other.
158 \headIII: Decimal
160 Write a decimal number optionally prefixed by a minus sign or plus sign.
161 (If the number is omitted, it is treated as zero.)
163 Example: {\tt42}
165 \headIII: Hexadecimal
167 Hexadecimal numbers are prefixed by a dollar sign, and the letters must
168 be written in uppercase.
170 Example: {\tt\$2A03}
172 \headIII: Variables
174 To use the value of a variable where a number is expected, use the
175 variable letter in lowercase after a dollar sign. There are 27 variables,
176 labeled {\tt\$a} to {\tt\$z} and the backquote variable {\tt\$`} (use of
177 the backquote variable is explained later).
179 Example: {\tt\$x}
181 \headI: Hash Directives
183 \headII: \TT\#AMIGA-SLIDES
185 \headII: \TT\#CHANNEL
187 \headII: \TT\#COMPATIBILITY
189 Set compatibility setting (same as {\tt-c} switch). Currently the only
190 valid setting is zero which has no effect.
192 \headII: \TT\#GATE-DENOM
194 \headII: \TT\#INCLUDE
196 Specify a filename. It include a file with that name from the same
197 directory as another input file, which will be processed before continuing
198 with the current input file.
200 \headII: \TT\#LINEAR-SLIDES
202 \headII: \TT\#MINIMUM-VERSION
204 Check the version of ITMCK. This number must be hex number of form
205 {\tt\$xyz} corresponding to version x.y.z of ITMCK. It is a fatal error if
206 the current version of ITMCK is less than the value given on this line.
208 \headII: \TT\#MIXER
210 Set master volume, which must range from 1 to 128. Default setting is 48.
212 \headII: \TT\#MONO
214 Select mono audio.
216 \headII: \TT\#OCTAVE-REV
218 Specify a number 0 or 1. If you specify 0 (default) then {\tt>} means high
219 octave and {\tt<} means low octave. If you specify 1 then {\tt<} means
220 high octave and {\tt>} means low octave.
222 \headII: \TT\#OLD-EFFECTS
224 \headII: \TT\#PANNING-SEPARATION
226 \headII: \TT\#PORTAMENTO-SHARE
228 \headII: \TT\#SCALE
230 This command is used to customize the scale of notes. You can use the
231 letters {\tt a} to {\tt j} up to once each (although you need not use all
232 of them, and they need not be in order). Use full stops to indicate no
233 letters for that position (they can still be accessed by sharp/flat).
234 However many letter and dot is the number of tones per octave. You can
235 include a vertical bar to indicate what will be zero of scale (points
236 before that one are negative).
238 The default setting is: {\tt a.b|c.d.ef.g.} (including full stop at end)
240 As an example, the default setting means that there are twelve notes per
241 octave (don't count the vertical bar), {\tt a} has value $-3$, {\tt b} has
242 value $-1$, {\tt c} has value $0$, {\tt g} has value $7$, and so on. This
243 corresponds to the standard keys on a piano.
245 You cannot comment anything out on this line.
247 N.B.: If you change the scale other than twelve, you must affect the key
248 tables to reflect this!!
250 \headII: \TT\#SCALE-BASE
252 Allows to define which letter should be considered the lowest note of the
253 octave. The default value is `{\tt c}'. If you set it to `{\tt a}', then
254 entering `{\tt a}' where a note is expected will use the A note below C
255 instead of the A note above C.
257 \headII: \TT\#STEREO
259 Select stereo audio (default).
261 \headII: \TT\#SYNTH-LENGTH
263 \headII: \TT\#SYNTH16
265 If this command is activated, it causes raw samples that are imported and
266 any samples which are internally synthesized to use 16-bits, which can
267 result higher quality audio but larger file.
269 \headII: \TT\#TEMPO
271 Define initial tempo of song, in beats per minute, which must range from
272 32 to 255. The default value is 120.
274 \headII: \TT\#TITLE
276 Set the song title, which will probably be displayed in a program that
277 plays this music. There is a maximum of 25 ASCII characters. You cannot
278 comment anything out on this line.
280 \headII: \TT\#TRACKER-VERSION
282 Allows you to change the value of ``Cwt'' field in the header of output.
283 By default it uses the hexadecimal number {\tt\$7xyz} for ITMCK version
284 x.y.z although you can change it to pretend to be a different program or
285 a different version.
287 \headII: \TT\#VOL0MIXOPT
289 This has the same effect as the {\tt-v} command-line switch.
291 \headII: \TT\#VOLUME
293 Set initial global volume, which must range from 0 to 128. Default setting
294 is 128.
296 \headII: \TT\#WHOLE-NOTE
298 Set the number of frames of a whole note, which must be greater than zero.
299 The default is 48 frames.
301 \headI: Channels
303 There are up to sixteen channels, labeled with the uppercase letters
304 {\tt A} to {\tt P}. Each channel plays notes individually and can have its
305 own settings for volume, panning, note length, transpose, special effects,
306 etc.
308 To define initial channel volume and panning, you can use the
309 {\tt\#CHANNEL} command or you may use a macro definition as follows:
311 {\tt@A = 30 40}
313 In this example, the channel being assigned is {\tt A} and the volume is
314 30 and the panning is 40. The volume ranges from 0 to 64. The panning
315 ranges from 0 to 64 (where 32 is centered), or enter 100 for surround
316 sound.
318 \headI: Song Message
320 A song message consists of any number of lines starting with {\tt"} and
321 followed by the text to place on that line. The text can include any ASCII
322 text, including semicolons and leading spaces. All of them are then put
323 together in the song message. This song message may be displayed in the
324 player. (Do not include another quotation mark at the end unless you want
325 it a part of the message.)
327 You cannot comment anything out on this line.
329 The song message should not exceed 8000 characters (counting line breaks
330 as one character each).
332 \headI: Samples
334 \headII: Synthesizer
336 \headI: Instruments
338 \headI: Music Entry
340 \headII: {\TT a}--{\TT j} (note letters)
342 \headII: {\TT l} (length)
344 \headII: {\TT n} (direct note entry)
346 \headII: {\TT o} (select octave)
348 \headII: {\TT q} (quantize)
350 \headII: {\TT r} (rest)
352 \headII: {\TT t} (tempo)
354 \headII: {\TT v} (volume)
356 \headII: {\TT z} (cancel effects)
358 \headII: {\TT C} (set note cuts)
360 \headII: {\TT G} (global volume)
362 \headII: {\TT I} (tremor)
364 \headII: {\TT J} (arpeggio)
366 \headII: {\TT K} (transpose)
368 \headII: {\TT L} {\TT||} {\TT|L} (song loop)
370 \headII: {\TT P} (panning)
372 \headII: {\TT Q} (retrigger)
374 \headII: {\TT R} (portamento)
376 \headII: {\TT T} (tremolo)
378 \headII: {\TT V} (vibrato)
380 \headII: {\TT X} (call macro)
382 \headII: {\TT Y} (panbrello)
384 \headII: {\TT[} {\TT]} (repeat)
386 \headII: {\TT<} {\TT>} (low octave/high octave)
388 \headII: {\TT\&} (slur)
390 \headII: {\TT\char`^} (tie)
392 \headII: {\TT/} (auto-portamento)
394 \headII: {\TT@} (instrument select)
396 \headII: {\TT@@} (key table select)
398 \headII: {\TT@e} (direct effect entry)
400 \headII: {\TT@q} (quantize)
402 \headII: {\TT@u} (effect table select)
404 \headII: {\TT@A}--{\TT@P} (channel select)
406 \headII: {\TT@`} (ask status)
408 \headII: {\TT@=} {\TT@+} {\TT@-} {\TT@*} (assign variable)
410 \headI: Macros
412 \headI: Key Tables
414 \headI: Effect Tables
416 % === End main document text ===
418 \let\TT=\tentt
419 \let\Tt=\tentt
421 \vfill\eject
422 \immediate\closeout\tocfile
424 \headline={}
425 \footline={}
427 \def\dotleaders{\leaders\hbox{ . }\hfill}
428 \def\tocI#1#2{\line{#1 \dotleaders\ #2}}
429 \def\tocII#1#2{\line{\quad#1\rm\ \dotleaders\ #2}}
430 \def\tocIII#1#2{\line{\qquad#1\ \dotleaders\ #2}}
432 \vfill
433 \line{\headIfont Table of Contents\hfil}
434 \bigskip
435 \input\jobname.toc
436 \vfill
438 \bye