TiMidity(1)

NAME
TiMidity - MIDI to WAVE converter and player

SYNOPSIS
timidity [-options] filename [filenames ...]

DESCRIPTION
TiMidity is a MIDI to WAVE converter using Gravis Ultrasound-compatible patch files to generate digital audio data from General MIDI files. The data can be stored in a file for processing, or played in real time through an audio device.

OPTIONS
The following command line options are accepted by version 0.2i of TiMidity:

-o filename
    Place output on filename, which may be a file, device, or HP-UX audio server, depending on the output mode selected with the -O option. The special filename ``-'' causes output to be placed on stdout.

-O mode
    Selects the output mode from the compiled-in alternatives. mode must begin with one of the supported output mode identifiers. Run TiMidity with the -h option to see a list. The following identifiers should be available in all versions:

    -Or Generate raw waveform data. All format options are supported. Common formats include:

        -OrU
            uLaw

        -Or1sl
            16-bit signed linear PCM

        -Or8ul
            8-bit unsigned linear PCM

    -Ow Generate RIFF WAVE format output. If output is directed to a non-seekable file, or if TiMidity is interrupted before closing the file, the file header will contain 0xFFFFFFFF in the RIFF and data block length fields. The popular sound conversion utility sox is able to read such malformed files, so you can pipe data directly to sox for on-the-fly conversion to other formats.

    Format options
        Option characters may be added immediately after the mode identifier to change the output format. The following options are recognized:

        8   8-bit sample width

        1   16-bit sample width

        l   Linear encoding

        U   uLaw (8-bit) encoding

        M   Monophonic

        S   Stereo

        s   Signed output

        u   Unsigned output

        x   Byte-swapped output

    Note that some options have no effect on some modes. For example, you cannot generate a byte-swapped RIFF WAVE file, or force uLaw output on a Linux PCM device.

-s frequency
    Sets the resampling frequency. Not all sound devices are capable of all frequencies -- an approximate frequency may be selected, depending on the implementation.

-a  Turns on antialiasing. Samples are run through a lowpass filter before playing, which reduces aliasing noise at low resampling frequencies.

-f  Toggles fast envelopes. Some MIDI files sound better when notes decay slower -- it gives the impression of reverb, which TiMidity doesn't currently support.

-e  Make TiMidity evil. On Win32 version, this increases the task priority by one. It can give better playback when you switch tasks at the expense of slowing all other tasks down.

-p voices
    Sets polyphony (maximum number of simultaneous voices) to voices.

-A amplification
    Multiplies the master volume by amplification%.

-C ratio
    Sets the ratio of sampling and control frequencies. This determines how often envelopes are recalculated -- small ratios yield better quality but use more CPU time.

-L directory
    Adds directory to the library path. Patch, configuration, and MIDI files are searched along this path. Directories added last will be searched first. Note that the current directory is always searched first before the library path.

-c file
    Reads an extra configuration file.

-I number
    Uses the program number as the default instrument. Any Program Change events in MIDI files will override this option.

-P file
    Uses the patch file for every program except drums. Program Change events will be ignored. This is useful for testing new patches.

-D channel
    Marks channel as a drum channel. If channel is negative, channel -channel is marked as an instrumental channel. If channel is 0, all channels are marked as instrumental.

-Q channel
    Causes channel to be quiet. If channel is negative, channel -channel is turned back on. If channel is 0, all channels are turned on.

-F  Turns on fast panning to accommodate MIDI pieces that expect panning adjustments to affect notes that are already playing. Some files that don't expect this have a habit of flipping balance rapidly between left and right, which can cause severe popping when the -F flag is used.

-U  Instructs TiMidity to unload all instruments from memory between MIDI files. This can reduce memory requirements when playing many files in succession.

-i interface
    Selects the user interface from the compiled-in alternatives. interface must begin with one of the supported interface identifiers. Run TiMidity with the -h option to see a list. The following identifiers may be available:

    -id The dumb interface -- plays files in sequence, prints messages according to verbosity level. The trace mode shows the current and total playing time.

    -im The motif interface -- X Window interactive interface.

    -ik The Tcl/Tk interface -- X Window interactive interface.

    -in The ncurses full-screen interface with interactive controls.

    -is The S-Lang full-screen interface with interactive controls.

    Interface options
        Option characters may be added immediately after the interface identifier. The following options are recognized:

        v   Increases verbosity. This option is cumulative.

        q   Decreases verbosity. This option is cumulative.

        t   Toggles trace mode. In trace mode, TiMidity attempts to display its current state in real time. For the Linux sound driver, this is accomplished through the use of short DMA buffer fragments, which can be tuned via the -B option.

-B fragments
    For the Linux sound driver, selects the number of buffer fragments in interactive mode. Increasing the number of fragments may reduce choppiness when many processes are running. It will make TiMidity seem to respond sluggishly to fast forward, rewind, and volume controls, and it will throw the status display off sync. Specify a fragments of 0 to use the maximum number of fragments available.

FILES
TiMidity looks for the configuration file timidity.cfg at startup, before processing any options. If it can't be accessed, and the library path is changed with a -L option on the command line, then the default file will be sought again along the new library path after processing all options, unless another configuration file was specified with the -c option.

Configuration files define the mapping of MIDI programs to instrument files. Multiple files may be specified, and statements in later ones will override earlier ones. The following statements can be used in a configuration file:

dir directory
    Adds directory to the search path in the same manner as the -L command line option.

source file
    Reads another configuration file, then continues processing the current one.

bank number
    Selects the tone bank to modify. Patch mappings that follow will affect this tone bank.

drumset number
    Selects the drum set to modify. Patch mappings that follow will affect this drum set.

number file [options]
    Specifies that the the MIDI program number in the current tone bank or drum set should be played using the patch file. options may be any of the following:

    amp=amplification
        Amplifies the instrument's volume by amplification percent. If no value is specified, one will be automatically determined whenever the instrument is loaded.

    note=note
        Specifies a fixed MIDI note to use when playing the instrument. If note is 0, the instrument will be played at whatever note the Note On event triggering it has. For percussion instruments, if no value is specified in the configuration file, the default in the patch file will be used.

    pan=panning
        Sets the instrument's default panning. panning may be left, right, center, or an integer between -100 and 100, designating full left and full right respectively. If no value is specified, the default in the patch file will be used. Note that panning controls in MIDI files will override this value.

    keep={loop|env}
        By default, percussion instruments have their loop and envelope information stripped. Strangely shaped envelopes are removed automatically from melodic instruments as well. keep can be used to prevent stripping envelope or loop data. For example, the Short and Long Whistle percussion instruments (General Midi numbers 71 and 72) need to have ``keep=loop keep=env'' specified in the configuration file.

    strip={loop|env|tail}
        Force removal of loop or envelope information from all patches in the instrument, or strip the tail, i.e. all data after the loop. Some third-party instruments have garbage after the loop, as evidenced by a clicking noise whenever the instrument is played, so adding the strip=tail option will markedly improve sound quality.

NOTE: Whenever any filename ends in one of the compiled-in compression identifiers, such as .gz, or .sht, TiMidity will pipe the file through the appropriate decompressor. MIDI files often compress very well, so the ability to handle compressed files can be useful.

The special filename ``-'' can be used on the command line to indicate that a MIDI file should be read from stdin.

COPYRIGHT
Copyright (C) 1995 Tuukka Toivonen.

TiMidity is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

TiMidity is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

AVAILABILITY
The latest release is available on the TiMidity Home Page, URL http://www.clinet.fi/~toivonen/timidity/.

BUGS
8-bit and low-rate output sounds worse than it should.

Eats more CPU time than a small CPU-time-eating animal.

AUTHORS
Tuukka Toivonen <toivonen@clinet.fi>
HP-UX audio code, X-Motif interface, icons and antialiasing filter by Vincent Pagel <pagel@loria.fr>
Tcl/Tk interface by Takashi Iwai <iwai@dragon.mm.t.u-tokyo.ac.jp>
Windows 95/NT audio code by Davide Moretti <dmoretti@iper.net>
DEC audio code by Chi Ming HUNG <cmhung@insti.physics.sunysb.edu>
S-Lang user interface by Riccardo Facchetti <riccardo@cdc8g5.cdc.polimi.it>