• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..29-Aug-2018-

CHANGES.02iH A D06-Jan-199910 KiB299202

FAQH A D06-Jan-19999.1 KiB209159

Makefile.amH A D28-May-20041.1 KiB3515

Makefile.inH A D28-Aug-201812.3 KiB436362

README.alsaseqH A D18-Jan-20024.4 KiB136106

README.dlH A D27-Oct-20041.2 KiB4329

README.m2mH A D28-Feb-200414.1 KiB299223

README.mtsH A D28-Mar-200426.8 KiB656577

README.sfH A D06-Jan-19992.1 KiB7146

README.tkH A D06-Jan-19992.4 KiB7855

README.w32H A D13-Apr-200830 KiB660607

README.xawH A D02-Jun-201214 KiB394323

README.xskinH A D06-Jan-19992.7 KiB7749

timidity.1H A D04-Jun-201630.6 KiB1,2371,236

timidity.cfg.5H A D19-Mar-201619.5 KiB505504

README.alsaseq

1=======================================================================
2                      ALSA Sequencer Interface
3          Copyright (c) 2000  Takashi Iwai <tiwai@suse.de>
4=======================================================================
5
6DESCRIPTION
7===========
8
9This document describes about the Advanced Linux Sound Architecture
10(ALSA) sequencer interface.  The ALSA sequencer interface communicates
11between ALSA sequencer core and timidity.  The interface receives
12events from sequencer and plays it in (quasi-)real-time.
13On this mode, TiMidity works purely as the software real-time MIDI
14render, that is as a software MIDI synth engine on ALSA.
15There is no scheduling routine in this interface, since all scheduling
16is done by ALSA sequencer core.
17
18For invoking ALSA sequencer interface, run timidity as follows:
19	% timidity -iA -B2,8 -Os -q0/0 -k0
20The fragment size is adjustable.  The smaller number gives better
21real-time response.  Then timidity shows new port numbers which were
22newly created (128:0 and 128:1 below).
23       ---------------------------------------
24	% timidity -iA -B2,8 -Os -q0/0 -k0
25	TiMidity starting in ALSA server mode
26	Opening sequencer port 128:0 128:1
27       ---------------------------------------
28These ports can be connected with any other sequencer ports.
29For example, playing a MIDI file via pmidi (what's an overkill :-),
30	% pmidi -p128:0 foo.mid
31If a midi file needs two ports, you may connect like this:
32	% pmidi -p128:0,128:1 bar.mid
33Connecting from external MIDI keyboard may become like this:
34	% aconnect 64:0 128:0
35
36INSTALLATION
37============
38
39Configure with --enable-alsaseq and --enable-audio=alsa option.
40Of course, other audio devices or interfaces can be chosen
41additionally, too.
42
43For getting better real-time response, timidity must be run as root
44(see below).  Set-UID root is the easiest way to achieve this.  You
45may change the owner and the permission of installed timidity binary
46as follows:
47	# chown root /usr/local/bin/timidity
48	# chmod 4755 /usr/local/bin/timidity
49
50Be aware that this might cause a security hole!
51
52
53REAL-TIME RESPONSE
54==================
55
56The interface tries to reset process scheduling to SCHED_FIFO and as
57high priority as possible.  The SCHED_FIFO'd program exhibits much
58better real-time response.  For example, without SCHED_FIFO, timidity
59may cause significant pauses at every time /proc is accessed.
60For enabling this feature, timidity must be invoked by root or
61installed with set-uid root.
62
63
64INSTRUMENT LOADING
65==================
66
67Timidity loads instruments dynamically at each time a program change
68event is received.  This causes sometimes pauses due to buffer
69underrun during playback.  Furthermore, timidity resets the loaded
70instruments when the all subscriptions are disconnected.  Thus for
71keeping all loaded instruments even after playback is finished, you
72need to connect a dummy port (e.g. midi input port) to a timidity port
73via aconnect:
74	% aconnect 64:0 128:0
75
76
77RESET PLAYBACK
78==============
79
80You may stop all sounds during playback by sending SIGHUP signal to
81timiditiy.  The connections will be kept even after reset, but the
82events will be no longer processed.  For enabling the audio again, you
83have to reconnect the ports.
84
85
86VISUALIZATION
87=============
88
89If you prefer a bit more fancy visual output, try my tiny program,
90aseqview.
91	% aseqview -p2 &
92Then connect two ports to timidity ports (assumed 129:0 and 129:1 were
93created by aseqview):
94	% aconnect 129:0 128:0
95	% aconnect 129:1 128:1
96The outputs ought to be redirected to 129:0,1 instead of 128:0,1.
97	% pmidi -p129:0,129:1 foo.mid
98
99
100COMPATIBILITY WITH OSS
101======================
102
103You may access to timidity also via OSS MIDI emulation on ALSA
104sequencer.  Take a look at /proc/asound/seq/oss for checking the
105device number to be accessed.
106       ---------------------------------------
107	% cat /proc/asound/seq/oss
108	OSS sequencer emulation version 0.1.8
109	ALSA client number 63
110	ALSA receiver port 0
111	...
112	midi 1: [TiMidity port 0] ALSA port 128:0
113	  capability write / opened none
114
115	midi 2: [TiMidity port 1] ALSA port 128:1
116	  capability write / opened none
117       ---------------------------------------
118In the case above, the MIDI devices 1 and 2 are assigned to timidity.
119Now, play with playmidi:
120	% playmidi -e -D1 foo.mid
121
122
123BUGS
124====
125
126Well, well, they must be there..
127
128
129RESOURCES
130=========
131
132- ALSA home page
133	http://www.alsa-project.org
134- My ALSA hack page (including aseqview)
135	http://members.tripod.de/iwai/alsa.html
136

README.dl

1====================== DYNAMIC INTERFACE ======================
2
3 Interface modules that are specified with `-i' option can be
4loadable modules by using dynamic link module.
5 Place the shared library
6
7 if_<NAME>.so
8
9on the SHARED_LIB_PATH directory. In this case <NAME> is the interface's
10short name to be identified.
11 TiMidity++ requires to this shared library the following function:
12 (In this case <ID> is the interface's ID that are specified at `-i' option.)
13
14ControlMode* interface_<ID>_loader(void)
15{
16	ControlMode* ctl;
17	/* ... */
18
19	return ctl;
20}
21
22 If the dynamic interface that are specified at -i<ID>, TiMidity++
23loads if_<NAME>.so at the SHARED_LIB_PATH (this is the macro specified
24in the Makefile) and calls a function in the shared library
25interface_<ID>_loader().
26
27 If a file
28
29 if_<NAME>.txt
30
31describing the information about the interface by 1 line is in the
32SHARED_LIB_PATH, TiMidity++ displays this information when `-h'
33option is specified.
34
35
36WARNING:
37
38 You shouldn't specify the interface you want to build as dynamic link
39as enabled in Makefile. TiMidity++ searches its interfaces first from
40interfaces statically linked with TiMidity++, and next from dynamic linked
41interfaces.
42
43

README.m2m

1m2m: mod->midi file converter for TiMidity++
2
3
4
5
6BRIEF SYNOPSIS:
7
8This adds the new -OM output mode to TiMidity++, which will read in a mod file
9and output a midi file.  All parameters needed for the conversion are
10contained in a .m2m file of the same base name as the mod.  If this file can
11not be found, it will generate one for you.  Chord assignment and
12transposition values can be very difficult and tedious to assign by hand.  It
13is STRONGLY recommended that you let the program generate the initial .m2m
14file, so that it can do most (if not all) of this for you.  You will still
15need to assign drums, correct banks/programs, and tweak volume amps by hand.
16
17
18
19
20EXAMPLE USAGE:
21
22timidity -c c:\timidity\timidity.cfg -OM -V 2 -idt foo.mod
23
24This will try to read in foo.m2m as the config file for the conversion, and
25will output a file called foo.mid.  -V 2 tells it to generate midi for use
26on a device that uses an X^2 volume curve (all GM/GS/XG hardware).  You can
27use the -o flag to specify any other output name you wish.
28
29If you don't have timidity installed, so that you don't have a valid
30timidity.cfg file, just create a 0 byte file and use it instead of the real
31thing.  Since you're playing mod files, timidity doesn't need to load any
32midi instruments, so you don't need to have a set of patches or a real
33timidity.cfg file :)
34
35
36
37
38BACKGROUND:
39
40MOD files are a lot like MIDI files.  Both formats are basicly a series of
41events that control how notes get played with which instruments.  MODs
42package the instruments along with the events into a single file, while MIDI
43relies on external sources of instruments.  It is this fundamental
44difference that creates the most difficulty in performing a mod->midi file
45conversion.  The mod file does not need to know what pitch each sample is
46tuned to, if it is a drum, or if it is a chord.  MOD players simply play the
47packaged sample at the requested pitch, assuming all samples are tuned to
48the same fixed frequency, whether they actually are or not.  Thus, if you
49were to do a direct mod->midi event conversion, you would wind up with midi
50instruments playing in the wrong keys, snare drums being treated as normal
51melodic instruments, and single notes where there should be chords.
52Transposition, drum related channel movements, and chord emissions are the
53most noticable obstacles to overcome when performing an accurace mod->midi
54conversoin.
55
56Paolo Bonzini has already done half of my job for me.  He contributed a good
57amount of code that turns TiMidity++ into a first rate mod player.  This,
58alone, would not have helped me very much; it was how he implemented it.
59Rather than handle the events like every other mod player known to man,
60TiMidity++ converts them into standard midi events, loads the mod instruments
61in as special patches, and then renders them just like it would any normal
62midi file.  The mod event parsing, instrument parsing, and direct event
63conversion was already done!  All I had to do was handle the problems I
64mentioned above, along with many more minor ones I haven't mentioned, before
65writing the internal TiMidity++ events out to a midi file.  See the comments
66at the top of m2m.c if you are interested in some of the other issues that
67needed to be addressed during the conversion process.  Although some of
68these other issues were non-trivial to deal with, and pitch bends beyond 4
69octaves may still sound a bit odd, they are nothing that the average user
70needs to know about or keep in mind when trying to succesfully convert a mod
71file.  The only thing you need to know is that, in order to address the
72conversion problems disscussed above, some information about each sample in
73the mod must be specified in a config file (.m2m) associated with each mod
74file.  The format of this file is given below.
75
76
77
78
79M2M CONFIG FILE FORMAT:
80
81Comment lines must begin with a #.  Blank lines (no spaces or any other
82character besides a newline or carriage return) are allowed.  All other lines
83must specify ALL FIVE of the fields described below.  Each field is separated
84by white space.
85
86
87
88FIELD 1: Sample Number
89
90This is the number of the sample that you are defining information for.
91The first sample in the mod file is 1 (not zero).
92
93
94
95FIELD 2: Bank/Program, drum flag, chord, silent flag
96
97This field specifies several different properties of the sample.  Optional
98paramaters are given surrounded by parentheses.  The format for this field
99is:
100
101(!)(bank/)program(chord)(*)
102
103If the field begins with an exclaimation mark, ! , then no notes will be
104issued for this sample.  This can be used to silence samples that you can
105not assign to a general midi instrument, such as speech, complicated drum
106tracks, or any sound effect that you can not create a close approximation to
107using GS sfx banks.
108
109The bank portion of the field specifies an optional bank selection.  This is
110the number of the bank to use, followed by a / to separate it from the
111program number.
112
113The program number is the midi instrument you are assigning to the sample.
114If the sample is a drum, this is the note that the drum is mapped to in the
115drum set.
116
117The optional chord field specifies what type of chord the sample is composed
118of.  There are 4 types of chords, each of which has 3 subtypes.  The
119supported chord types are (M)ajor, (m)inor, (d)iminished minor, and (f)ifth.
120Each chord is specified by the letter surrounded by parantheses in the
121previous line.  The subtype of the chord describes how much the chord is
122"rotated" from a standard chord, which can be 0, 1, or 2.  As an example of
123what I mean by "rotated", a major chord is composed of the following note
124semitone offsets: 0,4,7.  If you were to rotate the chord one to the left, it
125would be: -5,0,4.  Two to the left is: -8,-5,0.  If no subtype is given,
126zero rotation is assumed.
127
128The final part specifies if the sample is a drum.  Put a * at the end of the
129field to indicate this.  Chord assignments will be ignored if the drum flag
130is set.
131
132Examples:
1338/48M     bank 8, program 48 (Orchestra Strings), with a normal major chord
134!8/48M    silence this sample
1358/48M2    same as the first example, only the chord is rotated down twice
13648        normal Marcato Strings in tone bank 0
13716/38*    Power drum set, Snare1
13838*       Snare1 on the regular drum set 0
139
140
141
142FIELD 3: Transposition
143
144This is how much to transpose the original note specified in the mod file.
145If the sample is tuned at middle C (pitch 60), it will need to be transposed
146+24 semitones for the midi instrument to play on the correct pitch.  Samples
147marked as drums will not be transposed, since they are fixed to a single
148note on the drum channel.  You must still enter a value for the
149transposition field, even if it is ignored by the drums, so that the config
150file parser will not crash.
151
152
153
154FIELD 4: Fine Tuning
155
156All pitch bend events for this sample will be adjusted by the given fraction
157of a pitch.  This is sometimes necessary for highly out of tune samples.
158Some MOD composers, instead of tuning their samples correctly, use pitch
159bends to tune the samples.  When you play this music with correctly tuned
160samples, these pitch bends detune the note and it sounds out of tune.  So the
161fine tuning value is used to compensate for these detuning pitchbends.
162
163It is also common to find out of tune samples that were NOT tuned with
164pitchbends, so adding in a pitch bend adjustment would only make them sound
165worse in a midi file.  To disable fine tuning, an optional ! can be placed
166before the fine tuning value.  This is the DEFAULT SETTING in the automatic
167config file generator.  If you find that a mod requires fine tuning for a
168sample, simply delete the ! and redo the conversion.
169
170This feature is not yet fully implemented.  Only existing pitch bend events
171are affected, so no new pitch bend events are issued.  This is not usually a
172problem, however, since most cases where this feature needs to be applied
173involve mods that issue pitch bends before the affected notes, since they
174were intended to tune the samples to begin with.  I plan to eventually
175implement insertion of new pitch bend events, so that this will be a true
176fine tuning feature.
177
178
179
180FIELD 5: %Volume
181
182Each sample can be amplified by scaling the expression events.  100 is the
183default amount, which is 100% of the original volume.  50 would decrease it
184to half of the original volume, while 150 would be 1.5 times the original
185volume.  Don't forget that the maximum expression value is 127, so any
186expression events that get scaled higher than this will cap off at 127 and
187you won't hear any difference.  It is mainly used for quieting instruments
188that are too loud in the midi file, or for amplifying instruments whoose
189expression values are too low to begin with.
190
191Any fields beyond the first 5 will not be parsed.  You can type anything
192here that you want.  You do not have to place a # before comment text, but
193it is conventional to do so.
194
195
196
197
198FREQUENCY ANALYSIS:
199
200So, how do you figure out how much to transpose each sample and what chord
201it is?  Load it up in a program that can perform an FFT on the sample and
202display the frequency peaks.  The first peak is usually, but not always, the
203fundamental pitch of the sample.  If the sample is a chord, take the first 3
204major peaks and assign the chord from these.  Then enter the appropriate
205chord and transposition values in the .m2m file and see if it sounds correct.
206It is VERY time consuming to do all of this by hand....  So, I wrote routines
207to do all of the assignments for you :)  It is not 100% accurate, but it's
208pretty darn close.  And when it does miss a pitch or a chord, it always
209assigns it the correct LOOKING answer.  That is, if I were to visually
210inspect the FFT data, I would pick the same pitch the algorithm does.  I'm
211no expert at this, but after spending so many hours testing this on many
212different difficult to assign pitches, I think I'm pretty good at it now :)
213The only way I can see to improve it is to build in some sort of
214psychoacoustical model that takes into account how the human ear percieves
215the sound.  And I don't think I want to do that at the moment....  It does an
216above average job at dealing with samples that have more than one pitch or
217chord in them, but don't be surprised if a noisy or multi-tonal sample
218doesn't get assigned correctly.  Garbage in, garbage out :)  The automatic
219assignment is very good for the vast majority of samples and should DEFINATELY
220be tried first before you start changing things by hand.  When it does mess
221up, it's usually only off by a single semitone or an octave multiple, so it's
222easy to tweak from there.
223
224Before I wrote the automatic frequency analysis routines, I knew very little
225about the field.  Pitch detection is a very old problem in the audio signal
226processing literature.  I looked up references in the library dating from
227the 1960's.  The stuff from back then is just as relevant as the later
228literature, since the methods really haven't improved much since then.  The
229two major camps on how to do this are "autocorrelation" and "cepstrum"
230analysis.  It turns out that autocorrelation was not the answer to my
231problems.  While it works well on "well behaved" samples, it breaks down
232very quickly on synth instruments, noisy instruments, and instruments with
233multiple fundamental frequencies.  A large number of samples encountered in
234mod files exhibit these properties.  No matter what I did to try to tweak it,
235and I tried a lot of good things, I just could not make it robust enough to
236handle real world samples.  It's a good theory, but it falls apart in
237practice.
238
239Cepstrum analysis proved to be much more robust.  But even so, I had to do a
240good deal of pitch filtering and peak weighting before I could get it to work
241well.  The 2nd FFT analysis kept giving me frequency peaks that didn't exist
242in the 1st FFT spectrum.  They were, however, very close to real peaks.  So I
243throw away all frequencies that fall below a pitch peak area and maximum
244magnitude filter, then force the cepstrum analysis to only choose pitches that
245have made it through the filter in the 1st FFT spectrum.  I set a maximum
246frequency based on zero point crossing analysis, going out two zero crossings
247from the largest amplitude in the sample.  This was necessary to prevent
248octave jumping errors.  I found that it is also important to weight the
249cepstrum peak areas by the maximum magnitude within the corresponding pitch
250peak in the 1st FFT.  This was a desperate attempt to get some especially
251troublesome bass samples to assign correctly.  Surprisingly enough, it works
252great, giving me a higher success rate on all my samples without inducing any
253new misassignments!  The only catch is that the weighting only works well for
254< 2 seconds of audio analysis.  Any larger than that and the FFT size gets
255so big that the pitch peaks are too diffused, so the maximum magnitudes for
256the pitches are too small, and the weighting starts to give wrong answers.
257If anyone wants to analyze >= 2 seconds of data, which isn't neccessary for
258assigning pitches to mod/midi instruments, it would be easy to implement a
259sliding window average that calls the existing frequency assignment
260function.
261
262It appears to work better than any of the other sample analysis software I
263have.  If you are interested in more details of how I did the cepstrum
264analysis, try looking over the code in freq.c and/or email me for a more
265complete description of the algorithm I wound up with.  The new FFT routines
266are not mine, but are public domain.  From all the benchmarks I could find,
267this is the best FFT implementation for doing what I need to do (and for
268future effects processing, should they ever be added to TiMidity++).  See
269fft4g.c for info on where to get the original FFT package.
270
271
272
273
274SUGGESTIONS ?:
275
276Feel free to email me with any suggestions you may have on how I can do a
277better job of converting the mods, or how I can implement things on the TODO
278or WISH lists in m2m.c.  I am considering turning this into a stand alone
279program, but until I get more free time and energy, it's going to stay as
280just an addon for TiMidity++.
281
282
283
284
285LEGAL STUFF:
286
287TiMidity++ is distributed under the GPL, and since my code is derived from
288and makes use of it, I guess it's under the GPL too.  So blah blah blah,
289legal stuff, blah blah blah, etc..  You know the drill.
290
291
292
293
294Eric A. Welsh <ewelsh@ccb.wustl.edu>
295Center for Molecular Design
296Center for Computational Biology
297Washington University
298St. Louis, MO
299

README.mts

1======================================================================
2MIDI Tuning Standard summary
3======================================================================
4
5Besides GS/XG scale tuning which adjusts the pitch of 12 tones in an
6octave individually, TiMidity++ supports MIDI Tuning Standard in
7Universal SysEx.  MIDI Tuning Standard has the following advantages
8compared with GS/XG scale tuning:
9
10  - Support for microtonal sound other than 12 tones
11  - The pitch can be adjusted in 1/100 cent or less accuracy
12  - Temperaments can be rationally setup based on the tonality
13
14For details, please refer to the recommended practice.
15
16(1) Bulk Tuning Dump Request (Non Real-Time)
17----------------------------------------------------------------------
18F0 7E <device ID> 08 00 tt F7
19
20F0 7E		Universal Non-Real Time SysEx header
21<device ID>	ID of target device (7F = all devices)
2208		sub-ID#1 = "MIDI Tuning Standard"
2300		sub-ID#2 = "bulk tuning dump request (Non Real-Time)"
24tt		tuning program number (0 - 127)
25F7		EOX
26----------------------------------------------------------------------
27
28(2) Bulk Tuning Dump (Non Real-Time)
29----------------------------------------------------------------------
30F0 7E <device ID> 08 01 tt <tuning name> [xx yy zz] ... chksum F7
31
32F0 7E		Universal Non-Real Time SysEx header
33<device ID>	ID of target device (7F = all devices)
3408		sub-ID#1 = "MIDI Tuning Standard"
3501		sub-ID#2 = "bulk tuning dump (Non Real-Time)"
36tt		tuning program number (0 - 127)
37<tuning name>	16 ASCII characters
38[xx yy zz]	frequency data for one note (repeated 128 times)
39chksum		checksum (XOR of all bytes excluding F0, F7, and chksum)
40F7		EOX
41----------------------------------------------------------------------
42
43(3) Single Note Tuning Change (Real-Time)
44----------------------------------------------------------------------
45F0 7F <device ID> 08 02 tt ll [kk xx yy zz] F7
46
47F0 7F		Universal Real Time SysEx header
48<device ID>	ID of target device (7F = all devices)
4908		sub-ID#1 = "MIDI Tuning Standard"
5002		sub-ID#2 = "single note tuning change (Real-Time)"
51tt		tuning program number (0 - 127)
52ll		number of changes (1 change = 1 set of [kk xx yy zz])
53[kk		MIDI key number
54 xx yy zz]	frequency data for that key (repeated 'll' number of times)
55F7		EOX
56----------------------------------------------------------------------
57
58(4) Bulk Tuning Dump Request (Bank) (Non Real-Time)
59----------------------------------------------------------------------
60F0 7E <device ID> 08 03 bb tt F7
61
62F0 7E		Universal Non-Real Time SysEx header
63<device ID>	ID of target device (7F = all devices)
6408		sub-ID#1 = "MIDI tuning standard"
6503		sub-ID#2 = "bulk tuning dump request (Bank) (Non Real-Time)"
66bb		tuning bank number (0 - 127)
67		(described as 1-128 in MIDI Tuning Specification)
68tt		tuning program number (0 - 127)
69F7		EOX
70----------------------------------------------------------------------
71
72(5) Key-Based Tuning Dump (Non Real-Time)
73----------------------------------------------------------------------
74F0 7E <device ID> 08 04 bb tt <tuning name> [xx yy zz] ... chksum F7
75
76F0 7E		Universal Non-Real Time SysEx header
77<device ID>	ID of target device (7F = all devices)
7808		sub-ID#1 = "MIDI tuning standard"
7904		sub-ID#2 = "key-based tuning dump (Non Real-Time)"
80bb		tuning bank number (0 - 127)
81		(described as 1-128 in MIDI Tuning Specification)
82tt		tuning program number (0 - 127)
83<tuning name>	16 ASCII characters
84[xx yy zz]	frequency data for one note (repeated 128 times)
85chksum		checksum (XOR of all bytes excluding F0, F7, and chksum)
86F7		EOX
87----------------------------------------------------------------------
88
89(6) Scale/Octave Tuning Dump 1-Byte Form (Non Real-Time)
90----------------------------------------------------------------------
91F0 7E <device ID> 08 05 bb tt <tuning name> [xx] ... chksum F7
92
93F0 7E		Universal Non-Real Time SysEx header
94<device ID>	ID of target device (7F = all devices)
9508		sub-ID#1 = "MIDI tuning standard"
9605		sub-ID#2 = "scale/octave tuning dump 1-byte form
97				(Non Real-Time)"
98bb		tuning bank number (0 - 127)
99		(described as 1-128 in MIDI Tuning Specification)
100tt		tuning program number (0 - 127)
101<tuning name>	16 ASCII characters
102[xx]		frequency data for C,C#,... B (12 bytes total)
103			00H means -64 Cent
104			40H means +/- 0 Cent
105			7FH means +63 Cent
106chksum		checksum (XOR of all bytes excluding F0, F7, and chksum)
107F7		EOX
108----------------------------------------------------------------------
109
110(7) Scale/Octave Tuning Dump 2-Byte Form (Non Real-Time)
111----------------------------------------------------------------------
112F0 7E <device ID> 08 06 bb tt <tuning name> [xx yy] ... chksum F7
113
114F0 7E		Universal Non-Real Time SysEx header
115<device ID>	ID of target device (7F = all devices)
11608		sub-ID#1 = "MIDI tuning standard"
11706		sub-ID#2 = "scale/octave tuning dump 2-byte form
118				(Non Real-Time)"
119bb		tuning bank number (0 - 127)
120		(described as 1-128 in MIDI Tuning Specification)
121tt		tuning program number (0 - 127)
122<tuning name>	16 ASCII characters
123[xx yy]		frequency data for C,C#,... B (24 bytes total)
124			00H 00H means -100 cents (8,192 steps of .012207 cents)
125			40H 00H means 0 cents (equal temperament)
126			7FH 7FH means +100 cents (8,191 steps of .012207 cents)
127chksum		checksum (XOR of all bytes excluding F0, F7, and chksum)
128F7		EOX
129----------------------------------------------------------------------
130
131(8) Single Note Tuning Change (Bank) (Real-Time)
132----------------------------------------------------------------------
133F0 7F <device ID> 08 07 bb tt ll [kk xx yy zz] ... F7
134
135F0 7F		Universal Real Time SysEx header
136<device ID>	ID of target device (7F = all devices)
13708		sub-ID#1 = "MIDI tuning standard"
13807		sub-ID#2 = "single note tuning change (Bank) (Real-Time)"
139bb		tuning bank number (0 - 127)
140		(described as 1-128 in MIDI Tuning Specification)
141tt		tuning program number (0 - 127)
142ll		number of changes (1 change = 1 set of [kk xx yy zz])
143[kk		MIDI key number
144 xx yy zz]	frequency data for that key (repeated 'll' number of times)
145F7		EOX
146----------------------------------------------------------------------
147
148(9) Single Note Tuning Change (Bank) (Non Real-Time)
149----------------------------------------------------------------------
150F0 7E <device ID> 08 07 bb tt ll [kk xx yy zz] ... F7
151
152F0 7E		Universal Non-Real Time SysEx header
153<device ID>	ID of target device (7F = all devices)
15408		sub-ID#1 = "MIDI tuning standard"
15507		sub-ID#2 = "single note tuning change (Bank) (Non Real-Time)"
156bb		tuning bank number (0 - 127)
157		(described as 1-128 in MIDI Tuning Specification)
158tt		tuning program number (0 - 127)
159ll		number of changes (1 change = 1 set of [kk xx yy zz])
160[kk		MIDI key number
161 xx yy zz]	frequency data for that key (repeated 'll'number of times)
162F7		EOX
163----------------------------------------------------------------------
164
165(10) Scale/Octave Tuning 1-Byte Form (Real-Time)
166----------------------------------------------------------------------
167F0 7F <device ID> 08 08 ff gg hh [ss] ... F7
168
169F0 7F		Universal Real-Time SysEx header
170<device ID>	ID of target device (7F = all devices)
17108		sub-ID#1 = "MIDI Tuning Standard"
17208		sub-ID#2 = "scale/octave tuning 1-byte form (Real-Time)"
173ff		channel/options byte 1
174			bits 0 to 1 = channel 15 to 16
175			bits 2 to 6 = reserved for future expansion
176gg		channel byte 2 - bits 0 to 6 = channel 8 to 14
177hh		channel byte 3 - bits 0 to 6 = channel 1 to 7
178[ss]		12 byte tuning offset of 12 semitones from C to B
179			00H means -64 cents
180			40H means 0 cents (equal temperament)
181			7FH means +63 cents
182F7		EOX
183----------------------------------------------------------------------
184
185(11) Scale/Octave Tuning 1-Byte Form (Non Real-Time)
186----------------------------------------------------------------------
187F0 7E <device ID> 08 08 ff gg hh [ss] ... F7
188
189F0 7E		Universal Non Real-Time SysEx header
190<device ID>	ID of target device (7F = all devices)
19108		sub-ID#1 = "MIDI Tuning Standard"
19208		sub-ID#2 = "scale/octave tuning 1-byte form (Non Real-Time)"
193ff		channel/options byte 1
194			bits 0 to 1 = channel 15 to 16
195			bits 2 to 6 = reserved for future expansion
196gg		channel byte 2 - bits 0 to 6 = channel 8 to 14
197hh		channel byte 3 - bits 0 to 6 = channel 1 to 7
198[ss]		12 byte tuning offset of 12 semitones from C to B
199			00H means -64 cents
200			40H means 0 cents (equal temperament)
201			7FH means +63 cents
202F7		EOX
203----------------------------------------------------------------------
204
205(12) Scale/Octave Tuning 2-Byte Form (Real-Time)
206----------------------------------------------------------------------
207F0 7F <device ID> 08 09 ff gg hh [ss tt] ... F7
208
209F0 7F		Universal Real-Time SysEx header
210<device ID>	ID of target device (7F = all devices)
21108		sub-ID#1 = "MIDI Tuning Standard"
21209		sub-ID#2 = "scale/octave tuning 2-byte form (Real-Time)"
213ff		channel/options byte 1
214			bits 0 to 1 = channel 15 to 16
215			bits 2 to 6 = reserved for future expansion
216gg		channel byte 2 - bits 0 to 6 = channel 8 to 14
217hh		channel byte 3 - bits 0 to 6 = channel 1 to 7
218[ss tt]		24 byte tuning offset of 2 bytes per semitone from C to B
219			00H 00H means -100 cents (8,192 steps of .012207 cents)
220			40H 00H means 0 cents (equal temperament)
221			7FH 7FH means +100 cents (8,191 steps of .012207 cents)
222F7		EOX
223----------------------------------------------------------------------
224
225(13) Scale/Octave Tuning 2-Byte Form (Non Real-Time)
226----------------------------------------------------------------------
227F0 7E <device ID> 08 09 ff gg hh [ss tt] ... F7
228
229F0 7E		Universal Non Real Time SysEx header
230<device ID>	ID of target device (7F = all devices)
23108		sub-ID#1 = "MIDI Tuning Standard"
23209		sub-ID#2 = "scale/octave tuning 2-byte form (Non Real-Time)"
233ff		channel/options byte 1
234			bits 0 to 1 = channel 15 to 16
235			bits 2 to 6 = reserved for future expansion
236gg		channel byte 2 - bits 0 to 6 = channel 8 to 14
237hh		channel byte 3 - bits 0 to 6 = channel 1 to 7
238[ss tt]		24 byte tuning offset of 2 bytes per semitone from C to B
239			00H 00H means -100 cents (8,192 steps of .012207 cents)
240			40H 00H means 0 cents (equal temperament)
241			7FH 7FH means +100 cents (8,191 steps of .012207 cents)
242F7		EOX
243----------------------------------------------------------------------
244
245(14) Temperament Tonality Control Tuning (Real-Time)
246----------------------------------------------------------------------
247F0 7F <device ID> 08 0A sf mi F7
248
249F0 7F		Universal Real-Time SysEx header
250<device ID>	ID of target device (7F = all devices)
25108		sub-ID#1 = "MIDI Tuning Standard"
2520A		sub-ID#2 = "temperament tonality control tuning
253				(Real-Time)"
254sf		number of sharp/flat (1 byte)
255			39H means 7 flats
256			3FH means 1 flat
257			40H means key of C
258			41H means 1 sharp
259			47H means 7 sharps
260mi		major/minor (1 byte)
261			00H means major key
262			01H means minor key
263			02H means passing major key
264			03H means passing minor key
265F7		EOX
266----------------------------------------------------------------------
267
268(15) Temperament Tonality Control Tuning (Non Real-Time)
269----------------------------------------------------------------------
270F0 7E <device ID> 08 0A sf mi F7
271
272F0 7E		Universal Non Real-Time SysEx header
273<device ID>	ID of target device (7F = all devices)
27408		sub-ID#1 = "MIDI Tuning Standard"
2750A		sub-ID#2 = "temperament tonality control tuning
276				(Non Real-Time)"
277sf		number of sharp/flat (1 byte)
278			39H means 7 flats
279			3FH means 1 flat
280			40H means key of C
281			41H means 1 sharp
282			47H means 7 sharps
283mi		major/minor (1 byte)
284			00H means major key
285			01H means minor key
286			02H means passing major key
287			03H means passing minor key
288F7		EOX
289----------------------------------------------------------------------
290
291(16) Temperament Type Control Tuning (Real-Time)
292----------------------------------------------------------------------
293F0 7F <device ID> 08 0B ff gg hh tt F7
294
295F0 7F		Universal Real-Time SysEx header
296<device ID>	ID of target device (7F = all devices)
29708		sub-ID#1 = "MIDI Tuning Standard"
2980B		sub-ID#2 = "temperament type control tuning (Real-Time)"
299ff		channel/options byte 1
300			bits 0 to 1 = channel 15 to 16
301			bit 2 = port A/B
302			bits 3 to 6 = reserved for future expansion
303gg		channel byte 2 - bits 0 to 6 = channel 8 to 14
304hh		channel byte 3 - bits 0 to 6 = channel 1 to 7
305tt		temperament type (1 byte)
306			00H means equal temperament
307			01H means Pythagoras tuning
308			02H means mean-tone tuning
309			03H means pure intonation
310			40H means user-defined temperament #0
311			41H means user-defined temperament #1
312			42H means user-defined temperament #2
313			43H means user-defined temperament #3
314F7		EOX
315----------------------------------------------------------------------
316
317(17) Temperament Type Control Tuning (Non Real-Time)
318----------------------------------------------------------------------
319F0 7E <device ID> 08 0B ff gg hh tt F7
320
321F0 7E		Universal Non Real Time SysEx header
322<device ID>	ID of target device (7F = all devices)
32308		sub-ID#1 = "MIDI Tuning Standard"
3240B		sub-ID#2 = "temperament type control tuning (Non Real-Time)"
325ff		channel/options byte 1
326			bits 0 to 1 = channel 15 to 16
327			bit 2 = port A/B
328			bits 3 to 6 = reserved for future expansion
329gg		channel byte 2 - bits 0 to 6 = channel 8 to 14
330hh		channel byte 3 - bits 0 to 6 = channel 1 to 7
331tt		temperament type (1 byte)
332			00H means equal temperament
333			01H means Pythagoras tuning
334			02H means mean-tone tuning
335			03H means pure intonation
336			40H means user-defined temperament #0
337			41H means user-defined temperament #1
338			42H means user-defined temperament #2
339			43H means user-defined temperament #3
340F7		EOX
341----------------------------------------------------------------------
342
343(18) User-defined Temperament Entry (Non Real-Time)
344----------------------------------------------------------------------
345F0 7E <device ID> 08 0C tt <temper name>
346		ll [fh fl bh bl aa bb cc dd ee ff] ... F7
347
348F0 7E		Universal Non Real Time SysEx header
349<device ID>	ID of target device (7F = all devices)
35008		sub-ID#1 = "MIDI Tuning Standard"
3510C		sub-ID#2 = "user-defined temperament entry (Non Real-Time)"
352tt		temperament program number (0 - 63)
353<temper name>	16 ASCII characters
354ll		number of formula (1 formula =
355				1 set of [fh fl bh bl aa bb cc dd ee ff])
356[fh		applying pitch bit mask byte 1
357			bits 0 to 3 = circle of fifth forward 8 to 11
358			bits 4 to 5 = reserved for future expansion
359			bit 6 = major flag (reversal)
360 fl		applying pitch bit mask byte 2
361			bits 0 to 6 = circle of fifth forward 1 to 7
362 bh		applying pitch bit mask byte 3
363			bits 0 to 3 = circle of fifth backward 8 to 11
364			bits 4 to 5 = reserved for future expansion
365			bit 6 = minor flag (reversal)
366 bl		applying pitch bit mask byte 4
367			bits 0 to 6 = circle of fifth backward 1 to 7
368 aa bb		fraction (aa/bb)
369 cc dd ee ff]	power ((cc/dd)^(ee/ff)) (repeated 'll' number of times)
370F7		EOX
371----------------------------------------------------------------------
372
373======================================================================
374The major/minor in the temperament tonality
375======================================================================
376
377The basic chords used in general music in C major are not only C, G, F
378but also Am, Em, Dm which appear frequently.  There may also be Cm,
379Gm, Fm, A, E, D, and so on.  Since these chords are not supported only
380in pure intonation (C major), players need to change temperaments
381according to progress of music.
382
383To solve the issue, TiMidity++ prepares
384
385(1) pure intonation (C major)
386	based on the pitch of C in Pythagoras tuning (C major)
387(2) pure intonation (A minor)
388	based on the pitch of A in Pythagoras tuning (A minor)
389(3) pure intonation (passing C major)
390	based on the pitch of A in Pythagoras tuning (C major)
391(4) pure intonation (passing A minor)
392	based on the pitch of C in Pythagoras tuning (A minor)
393
394I will explain more precisely.  The following table gives the lattice
395(Cartesian model) of the scale system:
396
397-----------------------------------------------------------------------------
398D--   A--   E--   B--   F#--  C#--  G#--  D#--  A#--  E#--  B#--  F##-- C##--
399Bb-   F-    C-    G-    D-    A-    E-    B-    F#-   C#-   G#-   D#-   A#-
400Gb    Db    Ab    Eb    Bb    F     C     G     D     A     E     B     F#
401Ebb+  Bbb+  Fb+   Cb+   Gb+   Db+   Ab+   Eb+   Bb+   F+    C+    G+    D+
402Cbb++ Gbb++ Dbb++ Abb++ Ebb++ Bbb++ Fb++  Cb++  Gb++  Db++  Ab++  Eb++  Bb++
403-----------------------------------------------------------------------------
404
405The notation "ABCDEFG" is according to Pythagoras tuning.  The
406notation "+", "-", "++" and "--" mean 1sc higher, 1sc lower, 2sc
407higher and 2sc lower respectively.
408
409A certain pure intonation is given as 12 sounds arranged by the
410rectangle of 4x3 from the lattice.  For example, C tuning, A tuning,
411A- tuning and C+ tuning are given as following tables respectively:
412
413[C tuning (C major)]
414----------------------
415A-    E-    B-    F#-
416F     C     G     D
417Db+   Ab+   Eb+   Bb+
418----------------------
419
420[A tuning (A minor)]
421----------------------
422F#-   C#-   G#-   D#-
423D     A     E     B
424Bb+   F+    C+    G+
425----------------------
426
427[C+ tuning (passing C major)]
428----------------------
429A     E     B     F#
430F+    C+    G+    D+
431Db++  Ab++  Eb++  Bb++
432----------------------
433
434[A- tuning (passing A minor)]
435----------------------
436F#--  C#--  G#--  D#--
437D-    A-    E-    B-
438Bb    F     C     G
439----------------------
440
441I think it is nice to select the tuning combination whose pitch of
442parallel key is slightly lower for major music, and slightly higher
443for minor music.
444
445======================================================================
446Preset temperament of Temperament Type Control Tuning
447======================================================================
448
449First, Pythagoras tuning (major) chromatic scale is expressed by the
450following recurrence relations.  Here, the index [] is a offset of the
451tonic.  The operation results are surely settled between 1 and 2, so
452they will be made into half or double if necessary.
453
454[Pythagoras tuning (major) chromatic scale]
455pytha_maj[ 0] = 1                       # C  1
456pytha_maj[ 7] = pytha_maj[ 0] * 3/2     # G  3/2
457pytha_maj[ 2] = pytha_maj[ 7] * 3/2     # D  9/8
458pytha_maj[ 9] = pytha_maj[ 2] * 3/2     # A  27/16
459pytha_maj[ 4] = pytha_maj[ 9] * 3/2     # E  81/64
460pytha_maj[11] = pytha_maj[ 4] * 3/2     # B  243/128
461pytha_maj[ 6] = pytha_maj[11] * 3/2     # F# 729/512
462--
463pytha_maj[ 5] = pytha_maj[ 0] * 2/3     # F  4/3
464pytha_maj[10] = pytha_maj[ 5] * 2/3     # Bb 16/9
465pytha_maj[ 3] = pytha_maj[10] * 2/3     # Eb 32/27
466pytha_maj[ 8] = pytha_maj[ 3] * 2/3     # Ab 128/81
467pytha_maj[ 1] = pytha_maj[ 8] * 2/3     # Db 256/243
468
469On the other hand, pure intonation (major) chromatic scale can be
470expressed by the following recurrence relations.  Here, sc means a
471syntonic comma (81/80).
472
473[pure intonation (major) chromatic scale]
474pure_maj[ 0] = 1                        # C  1
475pure_maj[ 7] = pure_maj[ 0] * 3/2       # G  3/2
476pure_maj[ 2] = pure_maj[ 7] * 3/2       # D  9/8
477pure_maj[ 9] = pure_maj[ 2] * 3/2 / sc  # A  5/3
478pure_maj[ 4] = pure_maj[ 9] * 3/2       # E  5/4
479pure_maj[11] = pure_maj[ 4] * 3/2       # B  15/8
480pure_maj[ 6] = pure_maj[11] * 3/2       # F# 45/32
481--
482pure_maj[ 5] = pure_maj[ 0] * 2/3       # F  4/3
483pure_maj[10] = pure_maj[ 5] * 2/3 * sc  # Bb 9/5
484pure_maj[ 3] = pure_maj[10] * 2/3       # Eb 6/5
485pure_maj[ 8] = pure_maj[ 3] * 2/3       # Ab 8/5
486pure_maj[ 1] = pure_maj[ 8] * 2/3       # Db 16/15
487
488It can be understood that pure intonation is similar to Pythagoras
489tuning fundamentally except descending with 1sc at A and rising with
4901sc at B flat while going up and down respectively from the tonic in
491the circle of fifths.
492
493Similarly, expressed Pythagoras tuning and pure intonation (minor)
494chromatic scale by the following recurrence relations.  Although the
495fractions written to right-hand side is terrible values, the
496recurrence relations themselves are very simple.
497
498[Pythagoras tuning (minor) chromatic scale]
499pytha_min[ 0] = 1                       # C  1
500pytha_min[ 7] = pytha_min[ 0] * 3/2     # G  3/2
501pytha_min[ 2] = pytha_min[ 7] * 3/2     # D  9/8
502pytha_min[ 9] = pytha_min[ 2] * 3/2     # A  27/16
503pytha_min[ 4] = pytha_min[ 9] * 3/2     # E  81/64
504pytha_min[11] = pytha_min[ 4] * 3/2     # B  243/128
505pytha_min[ 6] = pytha_min[11] * 3/2     # F# 729/512
506pytha_min[ 1] = pytha_min[ 6] * 3/2     # C# 2187/2048
507pytha_min[ 8] = pytha_min[ 1] * 3/2     # G# 6561/4096
508pytha_min[ 3] = pytha_min[ 8] * 3/2     # D# 19683/16384
509--
510pytha_min[ 5] = pytha_min[ 0] * 2/3     # F  4/3
511pytha_min[10] = pytha_min[ 5] * 2/3     # Bb 16/9
512
513[pure intonation (minor) chromatic scale]
514pure_min[ 0] = 1                  * sc  # C  1     * sc
515pure_min[ 7] = pure_min[ 0] * 3/2       # G  3/2   * sc
516pure_min[ 2] = pure_min[ 7] * 3/2 / sc  # D  10/9  * sc
517pure_min[ 9] = pure_min[ 2] * 3/2       # A  5/3   * sc
518pure_min[ 4] = pure_min[ 9] * 3/2       # E  5/4   * sc
519pure_min[11] = pure_min[ 4] * 3/2       # B  15/8  * sc
520pure_min[ 6] = pure_min[11] * 3/2 / sc  # F# 25/18 * sc
521pure_min[ 1] = pure_min[ 6] * 3/2       # C# 25/24 * sc
522pure_min[ 8] = pure_min[ 1] * 3/2       # G# 25/16 * sc
523pure_min[ 3] = pure_min[ 8] * 3/2       # D# 75/64 * sc
524--
525pure_min[ 5] = pure_min[ 0] * 2/3       # F  4/3   * sc
526pure_min[10] = pure_min[ 5] * 2/3       # Bb 16/9  * sc
527
528The differences from the major tuning are that the boundary of
529Pythagoras tuning goes up three positions, that the positions of
530descending with syntonic comma are changed, and that pure intonation
531is adjusted 1sc higher so that melodic parts' tonic (Pythagoras
532tuning) and harmonic parts' tonic (pure intonation) are overlapped.
533
534By the way, mean-tone tuning is also prepared besides Pythagoras
535tuning and pure intonation as preset temperament of TiMidity++.  While
536mean-tone tuning (major) is based on the general one whose major
537thirds are pure, mean-tone tuning (minor) is based on Salinas tuning
538whose minor thirds are pure.  Both mean-tone tuning (major) chromatic
539scale and mean-tone tuning (minor) chromatic scale can be expressed by
540the following recurrence relations.
541
542[mean-tone tuning (major) chromatic scale]
543mt_maj[ 0] = 1                          # C  1
544mt_maj[ 7] = mt_maj[ 0] * 5^(1/4)       # G  5^(1/4)
545mt_maj[ 2] = mt_maj[ 7] * 5^(1/4)       # D  5^(1/2) / 2
546mt_maj[ 9] = mt_maj[ 2] * 5^(1/4)       # A  5^(3/4) / 2
547mt_maj[ 4] = mt_maj[ 9] * 5^(1/4)       # E  5/4
548mt_maj[11] = mt_maj[ 4] * 5^(1/4)       # B  5^(5/4) / 4
549mt_maj[ 6] = mt_maj[11] * 5^(1/4)       # F# 5^(3/2) / 8
550--
551mt_maj[ 5] = mt_maj[ 0] / 5^(1/4)       # F  2 / 5^(1/4)
552mt_maj[10] = mt_maj[ 5] / 5^(1/4)       # Bb 4 / 5^(1/2)
553mt_maj[ 3] = mt_maj[10] / 5^(1/4)       # Eb 4 / 5^(3/4)
554mt_maj[ 8] = mt_maj[ 3] / 5^(1/4)       # Ab 8/5
555mt_maj[ 1] = mt_maj[ 8] / 5^(1/4)       # Db 8 / 5^(5/4)
556
557[mean-tone tuning (minor) chromatic scale]
558mt_min[ 0] = 1          * sc            # C  1                 * sc
559mt_min[ 7] = mt_min[ 0] * (10/3)^(1/3)  # G  (10/3)^(1/3)      * sc
560mt_min[ 2] = mt_min[ 7] * (10/3)^(1/3)  # D  (10/3)^(2/3) /  2 * sc
561mt_min[ 9] = mt_min[ 2] * (10/3)^(1/3)  # A  5/3               * sc
562mt_min[ 4] = mt_min[ 9] * (10/3)^(1/3)  # E  (10/3)^(4/3) /  4 * sc
563mt_min[11] = mt_min[ 4] * (10/3)^(1/3)  # B  (10/3)^(5/3) /  4 * sc
564mt_min[ 6] = mt_min[11] * (10/3)^(1/3)  # F# 25/18             * sc
565mt_min[ 1] = mt_min[ 6] * (10/3)^(1/3)  # C# (10/3)^(7/3) / 16 * sc
566mt_min[ 8] = mt_min[ 1] * (10/3)^(1/3)  # G# (10/3)^(8/3) / 16 * sc
567mt_min[ 3] = mt_min[ 8] * (10/3)^(1/3)  # D# 125/108           * sc
568--
569mt_min[ 5] = mt_min[ 0] / (10/3)^(1/3)  # F  2 / (10/3)^(1/3)  * sc
570mt_min[10] = mt_min[ 5] / (10/3)^(1/3)  # Bb 4 / (10/3)^(2/3)  * sc
571
572The point that the boundary of mean-tone tuning goes up three
573positions, and that mean-tone tuning is adjusted 1sc higher, are the
574same situation as Pythagoras tuning and pure intonation.
575
576Now, I think that mean-tone tuning could use for a harmony-melody
577because of the characteristic that is more harmony-like than
578Pythagoras tuning, and a scale is not uneven like pure intonation.
579
580======================================================================
581User-defined temperament entry
582======================================================================
583
584The function of user-defined temperament entry (experimental) is
585implemented in TiMidity++.  This corresponds to (18) of MIDI Tuning
586Standard summary (see the top of this document).  For example, it can
587generate various temperaments by the following SysEx's.
588
589[equal temperament]
590f0 7e 00 08 0c 00                                   ; temper prog number
59165 71 75 61 6c 00 00 00 00 00 00 00 00 00 00 00     ; "equal"
59201                                                  ; number of formula
5930f 7f 00 00 01 01 02 01 07 0c                       ; (both) 2^(7/12)
594f7
595
596[Pythagoras tuning]
597f0 7e 00 08 0c 01                                   ; temper prog number
59850 79 74 68 61 67 6f 72 61 73 00 00 00 00 00 00     ; "Pythagoras"
59902                                                  ; number of formula
60000 3f 40 1f 03 02 01 01 00 01                       ; (maj) 3/2
60143 7f 00 03 03 02 01 01 00 01                       ; (min) 3/2
602f7
603
604[mean-tone tuning]
605f0 7e 00 08 0c 02                                   ; temper prog number
6066d 65 61 6e 2d 74 6f 6e 65 00 00 00 00 00 00 00     ; "mean-tone"
60702                                                  ; number of formula
60800 3f 40 1f 01 01 05 01 01 04                       ; (maj) 5^(1/4)
60943 7f 00 03 01 01 0a 03 01 03                       ; (min) (10/3)^(1/3)
610f7
611
612[pure intonation]
613f0 7e 00 08 0c 03                                   ; temper prog number
61470 75 72 65 20 69 6e 74 6f 6e 61 74 69 6f 6e 00     ; "pure intonation"
61504                                                  ; number of formula
61600 3f 40 1f 03 02 01 01 00 01                       ; (maj) 3/2
61700 04 40 02 05 01 02 03 04 01                       ; (maj) 5*(2/3)^4
61843 7f 00 03 03 02 01 01 00 01                       ; (min) 3/2
61940 22 00 00 05 01 02 03 04 01                       ; (min) 5*(2/3)^4
620f7
621
622[Kirnberger-3]
623f0 7e 00 08 0c 00                                   ; temper prog number
6244b 69 72 6e 62 65 72 67 65 72 2d 33 00 00 00 00     ; "Kirnberger-3"
62502                                                  ; number of formula
62600 0f 00 00 01 01 05 01 01 04                       ; (both) 5^(1/4)
62700 30 00 1f 03 02 01 01 00 01                       ; (both) 3/2
628f7
629
630[Hirashima temperament]
631f0 7e 00 08 0c 01                                   ; temper prog number
63248 69 72 61 73 68 69 6d 61 00 00 00 00 00 00 00     ; "Hirashima"
63302                                                  ; number of formula
63400 1f 00 03 01 01 05 01 01 04                       ; (both) 5^(1/4)
63500 00 00 3c 03 02 01 01 00 01                       ; (both) 3/2
636f7
637
638[Werckmeister-3]
639f0 7e 00 08 0c 02                                   ; temper prog number
64057 65 72 63 6b 6d 65 69 73 74 65 72 2d 33 00 00     ; "Werckmeister-3"
64102                                                  ; number of formula
64200 07 00 00 01 09 02 01 0f 04                       ; (both) 2^(15/4)/9
64300 18 00 3f 03 02 01 01 00 01                       ; (both) 3/2
644f7
645
646[well-temperament]
647f0 7e 00 08 0c 03                                   ; temper prog number
64877 65 6c 6c 2d 74 65 6d 70 65 72 00 00 00 00 00     ; "well-temper"
64902                                                  ; number of formula
65000 07 00 00 01 09 02 01 0f 04                       ; (both) 2^(15/4)/9
65100 00 01 7f 03 02 01 01 00 01                       ; (both) 3/2
652f7
653
654----
655TAMUKI Shoichi <tamuki@linet.gr.jp>
656

README.sf

1================================================================
2	** Timidity SoundFont Extension **
3
4	    written by Takashi Iwai
5		<iwai@dragon.mm.t.u-tokyo.ac.jp>
6		<http://bahamut.mm.t.u-tokyo.ac.jp/~iwai/>
7
8	patch level 1: April 2, 1997
9================================================================
10
11* WHAT'S THIS?
12
13This is an extension to use samples in SoundFont files with
14timidity-0.2i.  You can employ both SoundFont file together with
15ordinary GUS patch files.  Both SBK and SF2 formats are supported.
16
17
18* USAGE
19
20Two commands are newly added in configuration.
21
22To specify the SoundFont file to be used, just add a line in config
23file like:
24
25	 soundfont sffile [order=number]
26
27The first parameter is the file name to be loaded.  The file itself
28is stored once after reading all configurations, then converted to
29the internal records except wave sample data.
30
31The optional argument specifies the order of searching.
32'order=0' means to search the SoundFont file at first, then search
33the GUS patches if the appropriate sample is not found.
34'order=1' means to search the SoundFont file after GUS patches.
35
36Another command 'font' is supplied to control the behavior of sample
37selection.  If you don't want to use some samples in the SoundFont
38file, specify the sample via 'exclude' sub-command.
39
40	font exclude bank [preset [keynote]]
41
42The first parameter is MIDI bank number of the sample to be removed.
43The optional second parameter is MIDI program number of the sample.
44For drum samples, specify 128 as bank, and drumset number as preset,
45and keynote number for the drum sample.
46
47You can change the order of individual sample (or bank) via "order"
48sub-command.
49
50	font order number bank [preset [keynote]]
51
52The first parameter is the order number (zero or one) to be changed,
53and the sequent parameters are as well as in exclude command above.
54
55
56* BUGS & TODO'S
57
58- noises on some bass drum samples
59- support of modulation envelope
60- support of cut off / resonance
61- support of chorus / reverb
62
63
64* CHANGES
65
66- pl.1
67	+ fix volume envelope calcuation
68	+ add font command
69	+ fix font-exclude control
70
71

README.tk

1---------------------------------------------------------------------
2This is the README file of TkMidity Ver.1.5, Tcl/Tk interface for
3TiMidity MIDI Converter/Player.
4
5TkMidity realizes the Tk interface panel communicating with true
6TiMidity program. By using Tk, you can enjoy a beautiful Motif-like
7window without Motif libraries.
8
9
10* WHAT'S NEW in 1.5
11
12- Trace window using timer callback
13- Forward/backward buttons
14- A couple of bug fixes..
15
16
17* CONTENTS
18
19This archive contains the following files:
20
21README.tk	- this file
22tk_c.c		- tk-interface control source file
23tkmidity.ptcl	- main tcl/tk source to be preprocessed
24tkpanel.tcl	- main control panel tcl/tk script
25browser.tcl	- file browser
26misc.tcl	- miscellaneous subroutines
27tkbitmaps/*.xbm	- bitmap files for TkMidity
28
29
30* USAGE
31
32There are four modes newly featured to TiMidity; repeat, shuffle,
33auto-start and auto-exit modes. Repeat mode plays musics after all
34files are finished repeatedly. Shuffle mode means the random pick-up
35playing. When Auto-start is on, the TkMidity begins playing music as
36soon as program starts. Auto-exit means to quit TkMidity automatically
37after all songs are over. Each setting can be saved by Save Config
38menu.
39
40You can change the display configuration in Displays menu. This
41configuration also can be saved on the start-up file by Save Config
42menu.
43
44From ver.1.3, File Open/Close menues and direct keyboard
45controls are supported. You can append arbitrary files from file
46browser. The shortcut key actions are as follows:
47
48	[Enter]		: Start Playing
49	[Space]		: Pause / Start Again
50	[c]		: Stop Playing
51	[q]		: Quit TkMidity
52	[p] or [Left]	: Previous File
53	[n] or [Right]	: Next File
54	[v] or [Down]	: Volume Down (5%)
55	[V] or [Up]	: Volume Up (5%)
56	[F10]		: Menu Mode
57	[Alt]+[Any]	: Select Each Menu
58
59From this version (1.4), trace mode window is realized. You can see a
60funny movements of volume and panning of each channel if you specify
61the option flag in command line (see manual).
62
63
64* PROGRAM NOTES
65
66This version requires Tcl7.5/Tk4.1 libraries.  Unlike the older tk
67interface, timidity links the tcl/tk libraries on its binary, not
68using wish program.  Also, shared memory access must be permitted.
69
70
71* TROUBLE SHOOTING
72
73+The present script verifies the existence of the file before pass to
74TiMidity, but occasionally this could happen...
75
76		Takashi Iwai	<iwai@dragon.mm.t.u-tokyo.ac.jp>
77				<http://bahamut.mm.t.u-tokyo.ac.jp/~iwai/>
78

README.w32

1How to compile TiMidity++ for Windows
2
3This file contains fllowing instructions.
4
51.Mingw in Msys environment
62.Turbo C++ in Msys environment
73.OpenWatcom C++ in Msys environment
84.Visual C++ in Msys environment
95.Digital Mars in Msys environment
106.Pelles C in Msys environment
11
121.Mingw in Msys environment
13
14(1)Setup Mingw and MSYS
15    1)Setup Mingw(http://sourceforge.net/projects/mingw/)
16      and MSYS (See MingwWiki(http://mingw.sourceforge.net/MinGWiki/))
17(2)Setup needed libraries
18        2-0)get pexports from Mingw
19            "pexports" is included in mingw-utils-0.3.tar.gz, get it and extract it.
20        2-1)pdcurses
21            Get pdcurses-2.6.0-2003.07.21-1.exe from Mingw. and extract them.
22            Move curses.h to include path and libcurses.a libarary path.
23        2-2)oggvorbis(http://www.vorbis.com/)
24            get OggVorbis-win32sdk-1.0.1.zip and extract it.
25            make export libraries
26                pexports xxxx.dll >xxxx.def
27                dlltool --dllname xxxx.dll --input-def xxxx.def --output-lib libxxxx.a
28            Change include\ogg\os_type.h line 29 as following
29                (os_types.h)
30                29 #  if !defined(__GNUC__) || defined(__MINGW32__)
31            set environment variables in batch file like this.
32                REM OggVorbis
33                set PATH=\usr\local\oggvorbis-win32sdk-1.0.1\bin;\usr\local\oggvorbis-win32sdk-1.0.1\lib;%PATH%
34                set C_INCLUDE_PATH=/usr/local/oggvorbis-win32sdk-1.0.1/include:%C_INCLUDE_PATH
35                set LD_LIBRARY_PATH=/usr/local/oggvorbis-win32sdk-1.0.1/lib:%LD_LIBRARY_PATH%
36
37        2-3)gogo no coder(http://www.marinecat.net/mct_top.htm)
38            get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe)
39            get gogo.h files from Gogo noCoder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh)
40            move gogo.h gogo\include\gogo
41            move gogo.dll gogo\lib
42            make export libraries
43                pexports gogo.dll >gogo.def
44                dlltool --dllname gogo.dll --input-def gogo.def --output-lib libgogo.a
45            set environment variables in batch file like this.
46                REM GOGO
47                set PATH=\usr\local\gogo\bin;\usr\local\gogo\lib;%PATH%
48                set C_INCLUDE_PATH=/usr/local/gogo/include:%C_INCLUDE_PATH%
49                set LD_LIBRARY_PATH=/usr/local/gogo/lib:%LD_LIBRARY_PATH%
50        2-4)flac(http://flac.sourceforge.net/)
51            Get "http://downloads.sourceforge.net/flac/flac-1.2.1-devel-win.zip"  and extract it.
52            Change include\*\export.h line 58 as following
53              (export.h)
54              58 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \
55              || !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__)
56            set environment variables in batch file like this.
57              REM FLAC
58              set PATH=\usr\local\flac-1.2.1-devel-win\lib;;%PATH%
59              set C_INCLUDE_PATH=/usr/local/flac-1.2.1-devel-win/include:%C_INCLUDE_PATH%
60              set LD_LIBRARY_PATH=/usr/local/flac-1.2.1-devel-win/bin:%LD_LIBRARY_PATH%
61
62        2-5)portaudio(http://www.portaudio.com/)
63            Download portaudio v1.19. and extarct it.
64            Move portaudio.h to include path.
65            Get portaudio.dll from Csound5.08.2-gnu-win32-f.exe(http://sourceforge.net/project/showfiles.php?group_id=81968).
66			Rename portaudio.dll to libportaudio.dll and move it to library path.
67            Only portaudo.h is needed for compiling TiMidity++.
68
69(3)Make TiMidity++ binaries
70        3-1)timw32g.exe
71            (configure)
72             CFLAGS="-O2" ./configure --enable-network --enable-w32gui --enable-spline=gauss \
73             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
74            (make)
75             make
76             strip timidity.exe
77             mv timidity.exe timw32g.exe
78        3-2)twsyng.exe
79            (configure)
80             CFLAGS="-O2" ./configure --enable-network --enable-winsyng --enable-spline=linear \
81             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
82            (make)
83             make
84             strip timidity.exe
85             mv timidity.exe twsyng.exe
86
87        3-3)twsynsrv.exe
88            (configure)
89              CFLAGS="-O2" ./configure --enable-network --enable-winsyng --enable-spline=linear \
90             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
91             add config.h following line
92                #define TWSYNSRV 1
93           (make)
94             make
95             strip timidity.exe
96             mv timidity.exe twsynsrv.exe
97
98        3-4)timidity.exe
99            (configure)
100             CFLAGS="-O2" ./configure --enable-interface=ncurses,vt100,winsyn --enable-network --enable-spline=linear \
101             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
102            (make)
103             make
104             strip timidity.exe
105        3-5)timiditydrv.dll
106            (configure)
107             CFLAGS="-O2" ./configure --enable-winsyn --enable-windrv --enable-spline=linear \
108             --enable-audio=w32,portaudio
109            (make)
110             make
111             cd windrv
112             strip timiditydrv.dll
113
114
1152.Turbo C++ in Msys environment
116
117(1)Setup BorlandC and MSYS
118    1)Setup BorlandC
119        Downlod Turbo C++ Explorer(http://www.codegear.com/jp/downloads/free/turbo)
120        Write bcc32.cfg and ilink 32.cfg.
121        (bcc32.cfg)
122          -IC:\Borland\BDS\4.0\include
123          -LC:\Borland\BDS\4.0\lib
124          -LC:\Borland\BDS\4.0\lib\psdk
125          -DWINVER=0x0400
126          -D_WIN32_WINNT=0x0400
127        (ilink32.cfg )
128            -LC:\Borland\BDS\4.0\lib;C:\Borland\BDS\4.0\lib\psdk
129        ** Caution !! **
130          Folder name which include '-'s is not acceptable.
131          ilink32 can't understand such folder name.
132    2)Setup  MSYS (See MingwWiki(http://mingw.sourceforge.net/MinGWiki/))
133        Remove mingw path from /etc/fstab.
134        Add fllowing line at the top of Msys.bat and create bcc_env.bat.
135              set PATH=C:\Borland\BDS\4.0\bin;%PATH%
136
137(2)Setup needed libraries
138        2-0-1)implib.exe(to make import library from dll)
139           implib -a -c xxx.lib xxx.dll
140        2-0-2)coff2omf.exe(VCC library to BCC library)
141           coff2omf  xxxx.lib xxx_bcpp.lib.
142
143        2-1)pdcurses
144           pdcurses-2.6.0-src.tar.bz2 from Mingw(http://sourceforge.net/project/showfiles.php?group_id=2435)
145           and make them.
146           rename pdcurses.lib libpdcurses.lib
147           Add include path and library path bcc32.cfg.
148           Add library path in ilink32.cfg
149        2-2)oggvorbis(http://www.vorbis.com/)
150           get OggVorbis-win32sdk-1.0.1.zip and extract it.
151           Add include path and library path bcc32.cfg.
152           Add library path in ilink32.cfg
153           Only hederfiles are need for compiling TiMidity++
154        2-3)gogo no coder(http://www.marinecat.net/mct_top.htm)
155           get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe)
156           get gogo.h files from Gogo no Coder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh)
157           move gogo.h gogo\include\gogo
158           (for timidity gogo.lib is not necessary)
159           Add include path and library path bcc32.cfg.
160           Add library path in ilink32.cfg
161           Only hederfiles are need for TiMidity++
162        2-5)flac(http://flac.sourceforge.net/)
163           get "http://downloads.sourceforge.net/flac/flac-1.2.1-devel-win.zip" and extract it.
164           Change include\*\export.h line 58 as following
165                (export.h)
166                58 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \
167                    || !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__)
168           Add include path and library path bcc32.cfg.
169           Add library path in ilink32.cfg
170        2-6)portaudio(http://www.portaudio.com/)
171             I don't know how to comple portaudio with bcc commandline tools.
172             Only portaudio.h is needed for compiling TiMidity++.
173             You can get portaudio.dll from Csound5.08.2-gnu-win32-f.exe(http://sourceforge.net/project/showfiles.php?group_id=81968).
174
175(3)Make TiMidity++ binaries
176        3-0) perl -pe 's/CC\s-o\s\S\S*\s/CC /g' configure >configure_bc
177                ( -o xxxx options are not work correctly with BCC)
178
179        3-1)timw32g.exe
180            (configure)
181             CC="bcc32" CPP="cpp32" CFLAGS="" ./configure_bc  --enable-w32gui --enable-spline=gauss \
182             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
183            (make)
184             make
185             mv timidity.exe timw32g.exe
186        3-2)twsyng.exe
187            (configure)
188            CC="bcc32" CPP="cpp32" CFLAGS="" \
189            ./configure_bc --enable-network --enable-winsyng --enable-spline=linear \
190             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
191            (make)
192             make
193             mv timidity.exe twsyng.exe
194        3-3)twsynsrv.exe
195            (configure)
196             CC="bcc32" CPP="cpp32" CFLAGS=""\
197             ./configure_bc --enable-network --enable-winsyng --enable-spline=linear \
198             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
199             add config.h following line
200                #define TWSYNSRV 1
201             (make)
202             make
203             mv timidity.exe twsynsrv.exe
204       3-4)timidity.exe
205            (configure)
206            CC="bcc32" CPP="cpp32" CFLAGS="" \
207             ./configure_bc --enable-interface=vt100,winsyn,ncurses --enable-network --enable-spline=linear \
208             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
209            (make)
210             make
211       3-5)timiditydrv.dll
212            (configure)
213            CC="bcc32" CPP="cpp32" CFLAGS="" \
214             ./configure_bc  --enable-winsyn --enable-windrv --enable-spline=linear \
215             --enable-audio=w32,portaudio
216            (make)
217             make
218
219
2203.OpenWatcom C++ in Msys environment
221
222(1)OpenWatcom and MSYS
223    1)Set OpenWatcom(http://www.openwatcom.org)
224       1-1)Download OpenWatcom, install and configure them
225       1-2)Download Microsoft Platform SDK install and configure them.
226            Replace rc.exe of OpenWatom with the one of Platform SDK's one.
227            or get wrc.exe from wine-prgs-0.9.5.zip(http://www.winehq.com/), and rename rc.exe
228            (OpenWatcom's rc.exe can't use).
229   2)Setup Mngw and MSYS (See MingwWiki(http://mingw.sourceforge.net/MinGWiki/))
230        Remove mingw path from /etc/fstab.
231        Add fllowing line at the top of Msys.bat and create wcc_env.bat.
232              call wcc_env.bat
233        wcc_env.bat is like follow ing
234            @echo off
235            set LIB=
236            set INCLUDE=
237            call i:\watcom\setvars.bat
238                 ----
239               ( setteing of various env. val. s )
240                  ----
241(2)Setup needed libraries(The wcc386 option -5s is recomended !! Because of TiMidity++ compatibility.!!)
242        2-0) make import Libray from dll
243           mlib -n -b out.lib in.dll
244        2-1)pdcurses
245           Get  pdcurses-2.5.0  from GnuWin32(http://sourceforge.net/projects/gnuwin32/)
246           and make import Libraries from dlls.
247           "libpdcurses.lib"  is needed (not pdcurses.lib).
248           Move curses.h to include path and libpdcurses.lib libarary path.
249        2-2)oggvorbis(http://www.vorbis.com/)
250           Get OggVorbis-win32sdk-1.0.1.zip and extract it.
251           Edit include\ogg\os_types.h.
252              (os_types.h)
253              29 #  if defined(__WATCOMC__)
254              30 /* MSVC/Borland */
255              31 typedef __int64 ogg_int64_t;
256              32 typedef int ogg_int32_t;
257              33 typedef unsigned int ogg_uint32_t;
258              34 typedef short ogg_int16_t;
259              35 typedef unsigned short ogg_uint16_t;
260              36 #  else
261                   -----
262              52 #  endif
263           Make inport Libraries from dll
264           Set environment variables in batch file like this.
265                REM OggVorbis
266                set PATH=\usr\local\oggvorbis-win32sdk-1.0.1_wcc\bin;\usr\local\oggvorbis-win32sdk-1.0.1_wcc\lib;%PATH%
267                set C_INCLUDE_PATH=/usr/local/oggvorbis-win32sdk-1.0.1_wcc/include:%C_INCLUDE_PATH
268                set LIB=\usr\local\oggvorbis-win32sdk-1.0.1_wcc\lib:%LIB%
269           Only *.h files are needed for TiMidity++.
270        2-3)gogo no coder(http://www.marinecat.net/mct_top.htm)
271           Get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe)
272            Get gogo.h files from Gogo noCoder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh)
273            Move gogo.h gogo\include\gogo
274            (for timidity gogo.lib not necessary)
275           Set environment variables in batch file like this.
276                REM GOGO
277                set PATH=\usr\local\gogo_wcc\bin;\usr\local\gogo_wcc\lib;%PATH%
278                set C_INCLUDE_PATH=/usr/local/gogo_wcc/include:%C_INCLUDE_PATH%
279                set LIB=\usr\local\gogo_wcc\lib:%LIB%
280           Only *.h files are needed for compiling TiMidity++.
281        2-5)flac(http://flac.sourceforge.net/)
282            get "http://downloads.sourceforge.net/flac/flac-1.2.1-devel-win.zip" and extract it.
283            make inport Libraries from dll
284            set environment variables in batch file like this.
285                REM FLAC
286                set PATH=\usr\local\flac-1.2.1-win_wcc\bin;%PATH%
287                set C_INCLUDE_PATH=/usr/local/flac-1.2.1-win_wcc/include:%C_INCLUDE_PATH%
288                set LIB=\usr\local\flac-1.2.1-win_wcc\bin:%LIB%
289           Only *.h files are needed for compiling TiMidity++.
290        2-6)portaudio(http://www.portaudio.com/)
291            I don't know how to comple portaudio with OpenWatcom commandline tools.
292            Only port audio.h is needed for compling TiMidity++.
293            You can get portaudio.dll from Csound5.08.2-gnu-win32-f.exe(http://sourceforge.net/project/showfiles.php?group_id=81968).
294
295(3)Make TiMidity++ binaries
296        3-0-1)wcc386_w.sh & wpp386_w.sh( They are in scripts/directory )
297            Wcc386 is not familier to GNU autoconf tools,
298            Use my wrapper wcc386_w.sh, instead of wcc386.exe
299        3-1)timw32g.exe
300            (configure)
301            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
302           ./configure --enable-network --enable-w32gui --enable-spline=gauss \
303            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \
304            --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest
305            (make)
306             make
307             mv timidity.exe timw32g.exe
308        3-2)twsyng.exe
309            (configure)
310            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
311            ./configure --enable-network --enable-winsyng --enable-spline=linear \
312            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \
313            --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest
314             (make)
315             make
316             mv timidity.exe twsyng.exe
317        3-3)twsynsrv.exe
318            (configure)
319            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
320            ./configure --enable-network --enable-winsyng --enable-spline=linear \
321            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \
322            --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest
323            add config.h following line
324                #define TWSYNSRV 1
325             (make)
326             make
327             mv timidity.exe twsynsrv.exe
328        3-4)timidity.exe
329            (configure)
330            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
331            ./configure --enable-interface=ncurses,vt100,winsyn --enable-network --enable-spline=linear \
332            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio \
333            --disable-oggtest --disable-vorbistest --disable-libFLACtest --disable-libOggFLACtest
334            (make)
335            make
336       3-5)timiditydrv.dll
337            (configure)
338            CC="wcc386_w.sh" CPP="wcc386_w.sh -p"  CFLAGS="-d0 -obll+riemcht" \
339             ./configure  --enable-winsyn --enable-windrv --enable-spline=linear \
340             --enable-audio=w32,portaudio
341            (make)
342             make
343
344
3454.Visual C++ in Msys environment
346
347(1)Setup VisualC++ and MSYS
348    1)Setup Visual C++
349        Download
350            Visual C++ 2008 Express Edition(http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx)
351            Microsoft Platform SDK
352        install and configure them.
353
354   2)Setup Mngw and MSYS (See MingwWiki(http://mingw.sourceforge.net/MinGWiki/))
355        Remove mingw path from /etc/fstab.
356        Add fllowing line at the top of Msys.bat and create bcc_env.bat.
357              call vc_msys_env.bat
358        vc_msys_env.bat is like follow ing
359            @echo off
360            call c:\"Program Files\Microsoft Platform SDK"\SetEnv.Cmd /2000 /RETAIL
361            call c:"\Program Files\Microsoft Visual Studio 9.0"\Common7\Tools\vsvars32.bat
362
363            Set INCLUDE=c:\DXSDK\include;%INCLUDE%
364            Set LIB=c:\DXSDK\lib;%LIB%
365
366                  ----
367               ( setteing of various env. val. s )
368                  ----
369(2)Setup needed libraries
370        2-1)pdcurses
371           pdcurses-2.6.0-src.tar.bz2 from Mingw(http://sourceforge.net/project/showfiles.php?group_id=2435)
372           and make them.
373           rename pdcurses.lib libpdcurses.lib
374           move curses.h to include path and libpdcurses.lib libarary path.
375        2-2)oggvorbis(http://www.vorbis.com/)
376           get OggVorbis-win32sdk-1.0.1.zip and extract it.
377           set environment variables in batch file like this.
378                REM OggVorbis
379                set PATH=\usr\local\oggvorbis-win32sdk-1.0.1\bin;\usr\local\oggvorbis-win32sdk-1.0.1\lib;%PATH%
380                set C_INCLUDE_PATH=/usr/local/oggvorbis-win32sdk-1.0.1/include:%C_INCLUDE_PATH
381                set LIB=\usr\local\oggvorbis-win32sdk-1.0.1\lib:%LIB%
382
383        2-3)gogo no coder(http://www.marinecat.net/mct_top.htm)
384           Get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe)
385           Get gogo.h files from Gogo noCoder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh)
386           Move gogo.h gogo\include\gogo
387            (for timidity gogo.lib not necessary)
388           Set environment variables in batch file like this.
389                REM GOGO
390                set PATH=\usr\local\gogo\bin;\usr\local\gogo\lib;%PATH%
391                set C_INCLUDE_PATH=/usr/local/gogo/include:%C_INCLUDE_PATH%
392                set LIB=\usr\local\gogo\lib:%LIB%
393        2-5)flac(http://flac.sourceforge.net/)
394            Get "http://downloads.sourceforge.net/flac/flac-1.2.1-devel-win.zip"  and extract it.
395            Set environment variables in batch file like this.
396                REM FLAC
397                set PATH=\usr\local\flac-1.2.1-win\bin;;%PATH%
398                set C_INCLUDE_PATH=/usr/local/flac-1.2.1-win/include:%C_INCLUDE_PATH%
399                set LIB=\usr\local\flac-1.2.1-win\bin:%LIB%
400        2-6)portaudio(http://www.portaudio.com/).
401             I don't know how to comple portaudio with vc commandline tools.
402            But for compling TiMidity++ only portaudio.h is needed.
403            You can get portaudio.dll from Csound5.08.2-gnu-win32-f.exe(http://sourceforge.net/project/showfiles.php?group_id=81968).
404
405(3)Make TiMidity++ binaries
406        3-1)timw32g.exe
407            (configure)
408             CC="cl" CPP="cl.exe -EP"  CFLAGS="-O2" \
409            ./configure --enable-network --enable-w32gui --enable-spline=gauss \
410             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
411            (make)
412            make
413             mv timidity.exe timw32g.exe
414        3-2)twsyng.exe
415            (configure)
416            CC="cl" CPP="cl.exe -EP"  CFLAGS="-O2" \
417            ./configure --enable-network --enable-winsyng --enable-spline=linear \
418             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
419            (make)
420             make
421             mv timidity.exe twsyng.exe
422        3-3)twsynsrv.exe
423            (configure)
424             CC="cl" CPP="cl.exe -EP"  CFLAGS="-O2"\
425             ./configure --enable-network --enable-winsyng --enable-spline=linear \
426             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
427             add config.h following line
428                #define TWSYNSRV 1
429             (make)
430             make
431             mv timidity.exe twsynsrv.exe
432        3-4)timidity.exe
433            (configure)
434            CC="cl" CPP="cl.exe -EP"  CFLAGS="-O2" \
435             ./configure --enable-interface=ncurses,vt100,winsyn --enable-network --enable-spline=linear \
436             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
437            (make)
438             make
439        3-5)timiditydrv.dll
440            (configure)
441            CC="cl" CXX="cl" CPP="cl.exe -EP"  CFLAGS="-O2" \
442              ./configure --enable-winsyn --enable-windrv --enable-spline=linear \
443               --enable-audio=w32,portaudio
444            (make)
445             make
446
447
4485.Digital Mars in Msys environment
449
450(1) Digtal Mars & MSYS
451	1) Installing up Digtal Mars(http://www.digitalmars.com/)
452		1-1) Download Digtal Mars.
453		2-2) replace rc.exe by that from Microsoft Platform SDK.
454		�i rc.exe included  Digital Mars package is not suitable for compiling TiMidity.�j
455	2)Setting up MSYS(http://sourceforge.net/projects/mingw/�@http://mingw.sourceforge.net/MinGWiki/))
456		Remove mingw concening path from "/etc/fstab".
457		Make dm_env.bat(like following file) is called msys.bat.
458		(Add top of msys.bat�j
459			call dm_env.bat
460		(dm_env.bat example�j
461			set LIB=
462			set INCLUDE=
463
464			Set PATH=i:\dm\bin;%PATH%
465			Set INCLUDE=i:\dm\include;i:\dm\include\win32;%INCLUDE%
466			Set LIB=i:\dm\lib;%LIB%
467
468			Set PATH=i:\usr\local\gogo\bin;%PATH%
469			Set INCLUDE=i:\usr\local\gogo\include;%INCLUDE%
470			Set LIB=i:\usr\local\gogo\lib;%LIB%
471				�i�����j
472				 ----
473(2) Setup Various Libraries
474	2-0) How to make import libraries from dlls
475		implib out.lib in.dll
476	2-1) pcurses
477		"Get pdcurses-2.5.0" from GnuWin32(http://sourceforge.net/projects/gnuwin32/).
478		Change curses.h as following
479		281 #if defined( _MSC_VER )|| defined(__DMC__)       /* defined by compiler */
480		977 #if !defined(PDC_STATIC_BUILD) && (defined(_MSC_VER) || defined(__DMC__))&& defined(WIN32) && !defined(CURSES_LIBRARY)
481		988 # if !defined(PDC_STATIC_BUILD) && (defined(_MSC_VER) || defined(__DMC__)) && defined(WIN32)
482		Make import library with system option as follows.
483			$implib /system libpdcurses.lib pdcurses.dll
484		Change name of pccurses.lil to libpdcuses.lib/
485
486    2-2) oggvorbis(http://www.vorbis.com/)
487    	Use "OggVorbis-win32sdk-1.0.1.zip".
488           Edit include\ogg\os_types.h as follows.
489              (os_types.h)
490              36 #  elif defined(__MINGW32__) || defined(__DMC__)
491		Make import libraries from dlls
492
493    2-3) Gogo no Coder (mp3 encoding dll) (http://www.marinecat.net/mct_top.htm)
494           Get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe)
495           Get gogo.h files from Gogo noCoder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh)
496		   Make gogo.lib from gogo.dll
497    	   Move gogo.h gogo\include\gogo
498    	   Move gogo.dll libgogo.a gogo\lib
499
500	2-4) flac(http://flac.sourceforge.net/)
501		Use "http://downloads.sourceforge.net/flac/flac-1.2.1-devel-win.zip"
502		Edit line 58 of include\*\export.h s.
503			(export.h)
504			58 #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \
505				|| !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__) \
506				|| !defined(__WATCOMC__) || !defined(__DMC__)
507		Make import libraries from dlls.
508
509	2-5) portaudio(http://www.portaudio.com/)
510		Only portaudio.h is required for compiling of TiMidity++
511        You can get portaudio.dll from Csound5.08.2-gnu-win32-f.exe(http://sourceforge.net/project/showfiles.php?group_id=81968).
512
513
514(3) Compiling TiMIdity++
515        3-0-1) "LF -> CRLF" conversion
516           $sh script/unix2dos.sh
517        3-0-1) perl -pe 's/CC\s-o\s\S\S*\s/CC /g' configure |perl -pe 's/CXX\s-o\s\S\S*\s/CXX /g' - >configure_dm
518                (because "-o xxxx" is not suitbable dmc.exe )
519        3-0-2) Get cpp.exe from Free Pascal Compiler(http://www.freepascal.org/),
520             and rename it as fpcpp.exe.
521            �ipreprocessor of dmc.exe is not compatible "gnu autotools"�j
522
523        3-1)timw32g.exe
524            (configure)
525            CC="dmc -Jm -w -mn -5 -o" CPP="fpcpp -D__NT__ -I/i/dm/include" \
526             ./configure_dm --enable-network --enable-w32gui --enable-spline=gauss \
527             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
528            (make)
529             make
530             mv timidity.exe timw32g.exe
531        3-2)twsyng.exe
532            (configure)
533            CC="dmc -Jm -w -mn -5 -o" CPP="fpcpp -D__NT__ -I/i/dm/include" \
534             ./configure_dm --enable-network --enable-winsyng --enable-spline=linear \
535             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
536             (make)
537             make
538             mv timidity.exe twsyng.exe
539        3-3)twsynsrv.exe
540            (configure)
541            CC="dmc -Jm -w -mn -5 -o" CPP="fpcpp -D__NT__ -I/i/dm/include" \
542             ./configure_dm --enable-network --enable-winsyng --enable-spline=linear \
543             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
544            add config.h �̍Ō�Ɉȉ��̍s��lj��B
545                #define TWSYNSRV 1
546             (make)
547             make
548             mv timidity.exe twsynsrv.exe
549        3-4)timidity.exe
550            (configure)
551            CC="dmc -Jm -w -mn -5 -o" CPP="fpcpp -D__NT__ -I/i/dm/include" \
552             ./configure_dm --enable-interface=ncurses,vt100,winsyn --enable-network --enable-spline=linear \
553             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
554            (make)
555            make
556       3-5)timiditydrv.dll
557            (configure)
558            CC="dmc -Jm -w -mn -5 -o" CPP="fpcpp -D__NT__ -I/i/dm/include" \
559             ./configure_dm --enable-interface=windrv,winsyn --enable-network --enable-spline=linear \
560             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
561            (make)
562            make
563              commentout timiditydrv.h 23:
564              23 //#error this stub requires an updated version of <rpcndr.h>
565           	make
566
567
568
5696.Pelles C in Msys environment
570
571(1)Setting up  Pelles C and MSYS
572	1) Pelles C
573		Get Pelles C  from �ihttp://www.smorgasbordet.com/pellesc/).
574	�Q�jMSYS(http://sourceforge.net/projects/mingw/  http://mingw.sourceforge.net/MinGWiki/))
575		Remove pathes concerning with MINGW from "/etc/fstab".
576		Call new file "pocc_env.bat" from msys.bat.
577		(Top of msys.bat�j
578			call pocc_env.bat
579		("vcc_env.bat" example�j
580			@echo off
581			call call c:\PellesC\bin\povars32.bat
582
583			Set INCLUDE=c:\DXSDK\include;%INCLUDE%
584			Set LIB=c:\DXSDK\lib;%LIB%
585				... continue ...
586				 ----
587(2) Setting up various libraries
588	2-1) pcurses
589		Get "pdcurses-2.6.0-src.tar.bz2" from "Mingw' web site", and compile it.
590		Rname pccurses.lib to libpdcuses.lib.
591
592    2-2) oggvorbis(http://www.vorbis.com/)
593    	Get "OggVorbis-win32sdk-1.0.1.zip�h(http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip)
594
595    2-3) Gogo no Coder (mp3 encoding dll) (http://www.marinecat.net/mct_top.htm)
596           Get gogo.dll from Gogo no Coder(http://www.marinecat.net/cgi/lcount/count.cgi?page=3112&name=wing311.exe&downex=wing311a.exe)
597           Get gogo.h files from Gogo noCoder source(http://www.marinecat.net/cgi/lcount/count.cgi?page=3111&name=petit311-src.lzh&downex=petit311.lzh)
598		   Make gogo.lib from gogo.dll
599    	   Move gogo.h gogo\include\gogo
600    	   Move gogo.dll libgogo.a gogo\lib
601
602	2-4) flac(http://flac.sourceforge.net/)
603		Use "http://downloads.sourceforge.net/flac/flac-1.2.1-devel-win.zip".
604		Edit "line 58"s of include\*\export.h as follows.
605			(export.h)
606			58  #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) \
607				|| !defined(__BORLANDC__) || !defined(__CYGWIN32__) || !defined(__MINGW32__) \
608				|| !defined(__WATCOMC__) || !defined(__DMC__)
609
610	2-5) portaudio(http://www.portaudio.com/)
611		Only "portaudio.h" is requierd for compiling.
612        You can get portaudio.dll from Csound5.08.2-gnu-win32-f.exe(http://sourceforge.net/project/showfiles.php?group_id=81968).
613
614(3)Compiling TiMIdity++
615		3-0) perl -pe 's/CC\s-o\s\S\S*\s/CC /g' configure >configure_pocc
616                (" -o xxxx " in configure is not acceptable by pocc)
617        3-1)timw32g.exe
618            (configure)
619            CC="cc" CPP="pocc.exe -E"  CFLAGS="-MT" ./configure_pocc  \
620            --enable-network --enable-w32gui --enable-spline=gauss \
621            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
622            (make)
623            make
624             mv timidity.exe timw32g.exe
625        3-2)twsyng.exe
626            (configure)
627            CC="cc" CPP="pocc.exe -E"  CFLAGS="-MT" ./configure_pocc  \
628            --enable-network --enable-winsyng --enable-spline=linear \
629            --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
630            (make)
631             make
632             mv timidity.exe twsyng.exe
633        3-3)twsynsrv.exe
634            (configure)
635             CC="cc" CPP="pocc.exe -E"  CFLAGS="-MT" ./configure_pocc  \
636             --enable-network --enable-winsyng --enable-spline=linear \
637             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
638             add config.h following line
639                #define TWSYNSRV 1
640             (make)
641             make
642             mv timidity.exe twsynsrv.exe
643        3-4)timidity.exe
644            (configure)
645            CC="cc" CPP="pocc.exe -E"  CFLAGS="-MT" ./configure_pocc  \
646            --enable-interface=ncurses,vt100,winsyn --enable-network --enable-spline=linear \
647             --enable-audio=w32,vorbis,gogo,ogg,flac,portaudio
648            (make)
649             make
650        3-5)timiditydrv.dll
651            (configure)
652            CC="cc" CPP="pocc.exe -E"  CFLAGS="-MT" ./configure_pocc  \
653            --enable-winsyn --enable-windrv --enable-spline=linear \
654              --enable-audio=w32,portaudio
655            (make)
656             make
657
658
6592008.4.10 Keishi Suenaga(skeishi@mutt.freemail.ne.jp)
660

README.xaw

1---------------------------------------------------------------------
2	HOW TO USE Xaw interface of TiMidity++
3
4Xaw interface of TiMidity prepares a GUI only with Athena Widget sets
5and Xt libraries that are standard toolkits of X Window System.
6
7
8* WHAT'S NEW in 2.14.0
9
10- Support for loading and saving playlists.
11- Vastly improved file dialog (Separate file/directory panes, filtering, etc.).
12- Scroll wheel support.
13- Supports Drag and Drop via the XDND protocol.
14- Tooltips for buttons are implemented.
15- Can mute individual channels in trace mode.
16- Fixed time thumb. Now it can also be used to change the position in the midi.
17- Support displaying more than 16 channels.
18- Many many bugs fixed and other small improvments.
19
20* INSTALLATION
21
22The xaw interface is compiled by passing either "--enable-interface=xaw"
23or "--enable-dynamic=xaw" as parameters for the configure script.
24TiMidity++ ordianary install will than contain the xaw interface.
25
26The are several ways to configure the xaw interface before compilation:
27
28A) Some parameters can be passed to GNU configure to modify the xaw
29interface. Namely:
30
31--with-xawlib=<comma delimetered list of toolkit names>
32--with-xaw-resource-prefix=<prefix to resource dir>
33--enable-xdnd, --disable-xdnd
34--enable-offix, --disable-offix
35
36--with-xawlib:
37
38TiMidity++ supports multiple Xaw toolkits. By default it searches for them
39in this order: xaw3d, xaw. If you wish to force compilation
40with a specific toolkit, provide the --with-xawlib=<name> parameter to
41configure, e.g.:
42
43  ./configure --enable-interface=xaw --with-xawlib=xaw
44
45or even:
46
47  ./configure --enable-interface=xaw --with-xawlib=neXtaw,xaw3d,XawPlus,xaw
48
49  to force a different search order.
50
51--enable-xdnd, --enable-offix, --disable-xdnd, --disable-offix
52
53Enable/Disable support for XDND/Offix drag and drop protocols. By default
54both are disabled.
55
56--with-xaw-resource-prefix=<prefix>
57
58Optional parameter. If passed, timidity will try to install the resource files
59to <prefix>/app-defaults/ and <prefix>/ja_JP.EUCJP/app-defaults.
60
61B) The xaw.h and x_trace.h files can be edited as well to change some options:
62
63If you want to use Label Widget for lyrics as in version 1.1,
64remove /* */ so that this line is visible:
65
66  #define WIDGET_IS_LABEL_WIDGET
67
68Although $(HOME)/.xtimidity will be regarded as an initial personal
69configuration file, you can rename it by changing the line;
70
71  #define INITIAL_CONFIG ".xtimidity"
72
73If you'd like to see more/less than 16 channels in one screen when in
74trace mode, change
75
76  #define D_VISIBLE_CHANNELS 16
77
78in x_trace.h.
79
80(There's a way to change that after compilation: changing the traceHeight
81resource will change the number of visible channels in one screen.)
82
83!!! NOTE !!!
84Don't forget to make clean before build if these files are edited.
85
86* USAGE
87
88Xaw interface shows the following file menu:
89
90  LOAD
91    Load a new MIDI file.
92
93  SAVE
94    Save the currently shown MIDI file.
95
96  LOAD PLAYLIST
97    Loads a playlist.
98
99  SAVE PLAYLIST
100    Saves a playlist.
101
102  SAVE CONFIG
103    Save the current settings and modes e.g. shuffle,
104    repeat, auto-start and auto-exit flags to ~/.xtimidity .
105
106  HIDE/UNHIDE MESSAGES
107    Toggles displaying text widget showing messages and lyrics.
108
109  HIDE/UNHIDE TRACE
110    Toggles trace canvas.
111
112  SHUFFLE
113    Toggles shuffle flag.
114
115  REPEAT
116    Toggle repeat flag.
117
118  AUTO-START
119    Toggle auto-start flag.
120
121  AUTO-EXIT
122    Toggle auto-exit flag to exit or not after all songs are over.
123
124  FILE LIST
125    Popup the playing file list window.
126
127  EXTEND MODES
128    Popup the extend mode control window.
129
130  ABOUT
131    Information about Xaw interface of TiMidity++.
132
133  QUIT
134    terminate timidity.
135
136From ver.1.3, File Load and File List menues that enabled to add and/or
137delete playing list.  You can append or delete arbitrary files from file
138browser.  To play a file, you can select it by either of pull-down menu
139on the title bar or File List window.
140The shortcut key actions on each window are as follows:
141
142<Main Window>
143	[Enter] or [r]	: Start Playing
144	[Space]		: Pause / Start Again
145	[a]		: Show about window
146	[l]		: Show file list
147	[s]		: Stop Playing
148	[q]		: Quit TiMidity++
149	[p] or [Left]	: Previous File
150	[n] or [Right]	: Next File
151	[v] or [Down]	: Volume Down (10%)
152	[V] or [Up]	: Volume Up (10%)
153	[<]		: Slower tempo
154	[>]		: Faster tempo
155	[-]		: Lower pitch
156	[+]		: Raise pitch
157	[Alt + F], [z]	: Show main menu
158	[Alt + N]	: Load Files
159	[Ctrl + V]	: Save File
160	[Alt + L]	: Load Playlist
161	[Alt + P]	: Save Playlist
162	[Alt + S]	: Save settings to ~/.xtimidity
163	[Ctrl + M]	: Hide/Show Messages
164	[Ctrl + T]	: Hide/Show Trace canvas
165	[Ctrl + S]	: Toggles Shuffle state
166	[Ctrl + R]	: Toggles Repeat state
167	[Ctrl + D]	: Toggles Tooltips
168	[Ctrl + O]	: Show options window
169	[g]		: Turns on/off spectrogram (if timidity was compiled
170			  with --enable-spectrogram)
171
172<File List Window>
173	[p] or [Up]	: Move the cursor to the previous file
174	[n] or [Down]	: Move the cursor to the next file
175	[Right]		: Move the cursor 5 lines backward
176	[Left]		: Move the cursor 5 lines forward
177	[v]		: Volume Down (10%)
178	[V]		: Volume Up (10%)
179	[Enter] or [R]	: Start Playing the selected file
180	[d]		: Delete the selected file entry
181	[A]		: Delete all entries
182	[Space]		: Pause / Start Again
183	[s]		: Stop Playing
184	[q]		: Quit TiMidity++
185	[c]		: Close the window
186	[ESC]		: Close the window
187
188<Extend Mode Window>
189	[c]		: Close the window
190	[ESC]		: Close the window
191	[q]		: Quit TiMidity++
192
193<Dialog in Load File Window>
194	[Tab]			: File or directory completion
195	[Enter]			: Select the directory entries
196	[Alt-Enter]		: Selects all visible files
197	[Escape] or [CTRL]+[g]	: Cancel and close the window
198	[Ctrl-a]		: Move the cursor to the top
199	[Ctrl-e]		: Move the cursor to the line-end
200	[Ctrl-k]		: Delete strings after the cursor
201	[Ctrl-`]		: Turn on filter
202By entering a string containing a wildcard in the dialog, the filter will
203be turned on, only displaying the matching files (case-insensitive). e.g.
204*.mid shows all filenames ending in '.mid', '.MID', etc.
205[AB]* shows all filenames beginning with 'a','A','b' or 'B'.
206[!c]* shows all filenames not starting with 'c'.
207
208* TRACE MODE
209Specify the interface option flag 't' in command line like as
210'timidity -iat' when you execute TiMidity (see timidity man page).
211You can see a funny movements of volume, expression, panning,
212pitchbending, reverb, chorus and voices et cetera of each channel on the
213trace canvas.  Click left mouse button on the trace screen and you can
214toggle trace screen between 'pitchbend and instrument' or 'tonebank,
215reverb and chorus'. Click right mouse button and you can (un)mute a channel.
216Click middle mouse button, and you can play a channel solo.
217Wheel or 'j' key can scroll the trace to see more channels than the usual
21816 channels. If the trace is too tall for your resolution, simply set
219the traceHeight resource to a lower value.
220
221* RESOURCES
222
223Application class name is 'TiMidity', so specity resources in
224.Xdefaults or .Xresources in your home directory as follows for example;
225
226  TiMidity*textbackground: LemonChiffon
227  TiMidity*background: PeachPuff1
228  TiMidity*menubutton: goldenrod
229  TiMidity*buttonbackground: gold
230  TiMidity*labelfont: -adobe-helvetica-bold-o-*-*-14-*-75-75-*-*-*-*
231
232Application specific resources supported by TiMidity are listed below:
233
234Name                Class                   Default
235----------------------------------------------------------
236arrangeTitle        ArrangeTitle            False
237  Show MIDI titles on the title bar of the main window.
238background          Background              gray65
239  Background color of the main window.
240menubutton          MenuButtonBackground    #CCFF33
241  Menu button color.
242textbackground      TextBackground          gray85
243  Background color of Text Widget.
244toggleforeground    ToggleForeground        MediumBlue
245  Foreground color of toggle buttons.
246buttonforeground    ButtonForeground        blue
247  Foreground color of command buttons and other transient windows.
248buttonbackground    ButtonBackground        gray76
249  Background color of command buttons and other transient windows.
250text2background     Text2Background         gray80
251  Background color of labels in file dialogs.
252
253labelfont           FontSet      -adobe-helvetica-bold-r-*-*-14-*-75-75-*-*-*-*
254  Label widget font.
255volumefont          FontSet      -adobe-helvetica-bold-r-*-*-12-*-75-75-*-*-*-*
256  Volume Label font.
257textfontset         FontSet      -*-*-medium-r-normal--14-*-*-*-*-*-*-*
258  Text font for message box and so on.
259ttitlefont          FontSet      -*-fixed-medium-r-normal--14-*-*-*-*-*-*-*
260  MIDI title font at the bottom of trace window.
261textHeight          TextHeight   120
262  Height of the lyric widget (is 30 if WIDGET_IS_LABEL_WIDGET is defined).
263menuWidth           MenuWidth    200
264  Width of popup menu.
265moreString          String       More...
266  Label of submenus on the pop-up menu.
267fileLabel           String       file...
268  Title of main menu.
269noPlaying           String       [ No Playing File ]
270  String appended to title when no file is being played.
271popup_confirm_title String       Dialog
272  Title of confirm boxes.
273
274These resources are used only in trace mode:
275
276Name                Class                   Default
277----------------------------------------------------------
278tracefont           FontSet      -*-*-medium-r-normal--14-*-*-*-*-*-*-*
279  Trace window font.
280traceWidth          TraceWidth     627
281  Width of trace widget.
282traceHeight         TraceHeight    332
283  Height of trace widget.
284tracebackground     TraceBackground         gray90
285  Background color of trace canvas.
286velforeground       VelForeground           orange
287  Color of bar in 'vel' (velocity) column for 'normal' channels.
288veldrumforeground   VelDrumForeground       red
289  Color of bar in 'vel' column, when the channel is a drum channel.
290volforeground       VolForeground           LightPink
291  Color of bar in 'vol' column.
292expforeground       ExpForeground           aquamarine
293  Color of bar in 'expr' column.
294panforeground       PanForeground           blue
295  Color of triangle in pan column.
296rimcolor            RimColor                gray20
297  Color of the border between channel bars.
298boxcolor            BoxColor                gray76
299  Color of the channel bars.
300captioncolor        CaptionColor            DarkSlateGrey
301  Color of text in the trace widget.
302whitekeycolor       WhiteKeyColor           white
303  Color of white keys in keyboard.
304blackkeycolor       BlackKeyColor           black
305  Color of black keys in keyboard.
306playingkeycolor     PlayingKeyColor         maroon1
307  Color of played key in keyboard.
308sustainedkeycolor   SustainedKeyColor       red4
309  Color of sustained key in keyboard.
310reverbcolor         ReverbColor             PaleGoldenrod
311  Color of bar in reverb column.
312choruscolor         ChorusColor             yellow
313  Color of bar in chorus column.
314untitled            String       <No title>
315  String used in foot when no file is being played.
316
317Note that all font resource are of type FontSet.
318Also traceWidth setting does not work yet.
319
320!!! NOTE !!!
321Some resource files were attached to TiMidity++1.3.6 or later.
322If you create a resource file of another locale except English or
323Japanese, please mail it to the timidity mailing list
324<timidity-talk@lists.sourceforge.net>.
325After building TiMidity++, put TiMidity.ad into the resources directory
326such as;
327 $(X11R6)/lib/X11/app-defaults
328And put TiMidity-uj.ad, which is the Japanese-EUC resource file into;
329 $(X11R6)/lib/X11/$(LANG)/app-defaults
330For example, those are as follows if the Japanese-EUC locale of your
331system is ja_JP.EUC as FreeBSD;
332 # cp TiMidity.ad /usr/X11R6/lib/X11/app-defaults/TiMidity
333 # cp TiMidity-uj.ad /usr/X11R6/lib/X11/app-defaults/ja_JP.EUC/TiMidity
334
335* SETTINGS FILE
336 ~/.xtimidity contains settings which are used by the xaw interface.
337 When "SAVE CONFIG" is selected, timidity will save the current configuration
338 to the file.
339
340 The file has a simple format. Each line begins with "set", than an option name,
341 followed by the option's value.
342 The options are:
343
344Name                Allowed Values          Default
345----------------------------------------------------------
346RepeatPlay           0/1                    0
347  Repeat playing the playlist after the last file was played.
348ShufflePlay          0/1                    0
349  Play the playlist in a random order.
350ExtOptions           0-63                   Depends on compliation options.
351  Enable various sequencer extensional modes (see options window for list).
352ChorusOption         0/1                    Depends on compliation options.
353  Enable chorus.
354CurVol               0-800                  70
355  Initial volume.
356Showdotfiles         0/1                    0
357  Show files and directories beginning with '.' in the file dialog.
358DefaultDir           a valid dir name.      The user's home directory.
359  The directory first displayed in the file dialog.
360Disp:trace           0/1                    0
361  Always start in trace mode.
362Disp:text            0/1                    1
363  Display the lyrics/messages widget at startup.
364Tooltips             0/1                    1 [1]
365  Display tooltips for buttons.
366Autostart            0/1                    1
367  Start playing immediately when the interface is started.
368AutoExit             0/1                    0
369  Exit after playing has stopped.
370ConfirmExit          0/1                    0
371  Confirm exit from interface if user tries to close it.
372SaveList             0/1                    1
373  Save playlist to ~/.xtimidity when saving configuration. If Autostart is 1,
374  it will begin playing immediately when timidity is next started.
375SaveConfig           0/1                    1
376  Save config at exit.
377File                 a valid file name.     None
378  This file will be loaded at next start. If SaveList is 1, the previous
379  playlist will be saved using this option. This option may occur multiple
380  times in ~/.xtimidity.
381
382[1] When timidity is compiled with xaw3d, tooltips are by default off.
383    Tooltips can not be enabled when the neXtaw toolkit is used.
384
385* REPORTS
386
387Please send problems concerning Xaw interface, feature requests,
388bug reports or comments to the TiMidity mailing list
389<timidity-talk@lists.sourceforge.net>.
390
391  Regards,
392
393	Yoshishige Arai	<ryo2@on.rim.or.jp>
394

README.xskin

1------------------------------------------------------------------
2This document describes about TiMidity++ skin interface.
3
4 Skin interface is the front-end of TiMidity++ to allow users to
5control TiMidity++ with funny GUI. The face of GUI is changable
6by using "skin data" of WinAmp / x11amp.
7
8
9* SETTING UP THE X-SKIN INTERFACE *
10
11 First, choose a skin data to use and place it on some directory.
12And set this path to the environment variable "timidity_skin"
13 e.g, If your favourite skin data (*.bmp) is placed on
14 ~/.x11amp/Skins/timidity/ :
15
16% setenv timidity_skin ~/.x11amp/Skins/timidity/                 (csh)
17$ timidity_skin=~/.x11amp/Skins/timidity ; export timidity_skin  (sh)
18
19 If your skin data archive file is on /dos/programs/winamp/skins/winamp.zip:
20
21% setenv timidity_skin /dos/programs/winamp/skins/winamp.zip
22$ timidity_skin=/dos/programs/winamp/skins/winamp.zip ; export timidity_skin
23
24 Only one skin can be specified. There are no selector of skin data.
25 Since default skin is not prepared, if the environment variable isn't
26specified or the data specified is broken, TiMidity++ won't boot.
27
28 This skin interface requires 10 BMP files for skin data such that:
29
30 main, titlebar, playpaus, cbuttons, monoster,
31 posbar, shufrep, text, volume, number
32
33 If your data losts some of these files, please borrow the corresponding
34data from other skin data.
35 In case the data has viscolor.txt, the color of spectrum analyzer is
36determined by this file. If not, the default colors are used.
37
38
39* BOOTING TiMidity++ *
40
41 To use skin interface, boot TiMidity++ with command-line option -ii(tv).
42After initializing of internal of TiMidity++, a window looks like WinAmp :)
43will raise.
44
45
46* USAGE OF INTERFACE *
47
48 Features of this interface now available are:
49
50  Prev/Play/Pause/Stop/Next/ Shuffle/Repeat/ Volume/ Exit
51
52with every corresponding buttons.
53 Clicking the area of displaying elapsed-time changes the contents of
54this area as elapsed-time / remained-time.
55 Clicking the area below the time displaying area changes the contents of
56this area as spectrum analyzer. If you want to display the spectrum analyzer,
57you should compile TiMidity++ with configure option --enable-spectrogram.
58
59 You can move interface's window by grabbing any place of this window.
60
61 To exit this interface, click the little button on right corner.
62
63
64* BUG? *
65
66 Text displaying area can display only English, digits and some graphical
67characters. Any of multi-byte character won't displayed.
68 Cannot set panpot, Equalizer and PlayList of TiMidity++.
69 There no effect by clicking the eject button.
70 Cannot iconize, smalling.
71
72
73 YOU CAN USE THIS INTERFACE AT YOUR OWN RISK.
74
75                              Daisuke Nagano <breeze_geo@geocities.co.jp>
76                      http://www.geocities.co.jp/Playtown/4370/index.html
77