LINGOT - A musical instrument tuner.

Written by:
  Ibán Cereijo Graña <ibancg@gmail.com>
  Jairo Chapela Martínez <jairochapela@gmail.com>

Copyright (C) 2004-2011 Ibán Cereijo Graña, Jairo Chapela Martínez

Description
===========

Lingot is a musical instrument tuner. It's accurate, easy to use, and highly
configurable. Originally conceived to tune electric guitars, it can now be used
to tune other instruments.

It looks like an analog tuner, with a gauge indicating the relative shift to a
certain note, found automatically as the closest note to the estimated frequency.


Requisites
==========

    * Sound card.
    * Linux kernel with audio support (OSS, ALSA, JACK).
    * GTK+ library, version 2.0.
    
Installation
============

    Type:
    
     > configure
     > make install
    
    If you don't want ALSA or JACK support, use the options --enable-alsa=no and
    --enable-jack=no in the configure script.
    
    Please, see the INSTALL file.
    
Synopsis
========

    lingot [-c config]

The -c option causes the search of a file named {config}.conf in the ~/.lingot
folder. For example:

    lingot -c bass

will take the configuration file ~/.lingot/bass.conf. This is useful for
maintaining different configurations for different instruments. It's also
possible to load and save configuration files from the GUI.

Configuration file
==================

When lingot is launched, the configuration file ~/.lingot/lingot.conf will be
created.

The default values are optimized for electric guitar tuning, for other musical
instruments these values must be slightly changed (a good practice would be
to have a configuration file for each instrument). The options must be changed
via GUI.

There is a wide range of options, with the purpose of keeping the maximum
configurability, and signal processing knowledge is needed for a good
understanding of their effects.

Next, we detail the main options that make up this file, and we recommend to
make changes regarding the desired tuning precision and the demanded CPU time.
If you don't understand the effects of any option, then just try different
values or, even better, don't change it.


 AUDIO_SYSTEM

    Audio system switch. Possible values:
    
    OSS
    ALSA *
    JACK
    
    * default value

    
 AUDIO_DEV (OSS sound device)

    Selected sound device for the OSS audio system. The default value is
    '/dev/dsp'.


 AUDIO_DEV_ALSA (ALSA sound device)

    Selected sound device for ALSA, the default value is 'hw:0'.


 SAMPLE_RATE ('physical' sampling rate)

    With ALSA and OSS, the input signal will be sampled at this frequency by the
    audio driver (in JACK, the sample rate is provided externally by the sound
    server). Some cards don't support an arbitrary sampling rate, so we
    recommend to choose one of the options that the GUI gives us, namely

      8000 Hz
     11025 Hz
     22050 Hz
     44100 Hz *

    We will be able to find an effective sampling rate submultiple of this by
    means of an oversampling factor.

    In order to select a sampling rate, we must consider the maximum frequency
    our instrument is able to produce (or the maximum one we want to tune), and
    choose an effective sampling rate (already divided by the oversampling
    factor) as, at least, the double of the former (Nyquist frequency). All the
    spectral components over the half of the effective sampling rate will be
    filtered out and they will not appear in the spectrum.

    It must be an integer number, in Hertz.


 OVERSAMPLING (oversampling factor) 

    The sampled signal will be decimated by this factor, producing the same
    effect as if the sound card was using as sampling rate the effective
    sampling rate f = SAMPLE_RATE/OVERSAMPLING.

    For example, to obtain an effective sampling rate of 4 KHz (we can tune
    tones up to 2 KHz), we can choose a sampling rate of 8 KHz and an
    oversampling factor equals to 2, since 8 KHz / 2 = 4 KHz.

    It must be an integer number, dimensionless. The default value is 25.


 ROOT_FREQUENCY_ERROR ("A" reference note error)

    This option is used when we want to tune with a certain amount of frequency
    shift error.

    This can be useful when tuning an instrument against a recording with a
    shifted tuning. For example, if we hear an "A" note in a recording that
    it's a quarter of a tone over the real note (440 Hz), we put here 50 cents
    of error.

    It must be a real number, expressed in cents. The default value is 0.


 MIN_FREQUENCY (minimum valid frequency)

    To avoid detecting the continuous component as the fundamental peak when
    it has enough power, we consider a minimum valid frequency.
     
    It must be a real number, in hertz. The default value is 15 Hz.


 FFT_SIZE (Size of the FTT)

    A high value gets more accuracy, especially more precision locking the
    desired frequency, but it demands more CPU time.

    We must consider the time interval involved on the calculus before
    unnecessarily raising this value: having a buffer of 4096 samples for the
    FFT, and a sampling rate of 8 KHz, each transform needs the last 512 ms
    temporary values, so there is no point in putting a shorter temporal window.

    Let's see a more extreme example:

    Let us suppose we have an instrument able to generate low frequencies
    (< 200 Hz), and therefore we choose an effective sampling rate of 
    400 Hz (an audio card sampling rate of 8 KHz and an oversampling factor 
    of 20). With the aim of obtaining the best initial precision, we choose
    a FFT buffer of 4096 samples. This implies that the minimal temporal window
    size has to be 10.24 seconds, in other words, the sounds from the last 10.24
    seconds are polluting the tuning taking. So, we've to wait 10.24 seconds
    between note and note to avoid 'interferences'.
    
    It must be an integer power of 2. The default value is 512 samples.


 TEMPORAL_WINDOW

    The length in time of the signal used to compute the final frequency. With
    higher values, we'll obtain a more accurate result, but also a slower
    response polluted by earlier notes.

    As a practical rule, we say that if we've a temporal window of 1 second, we
    must wait 1 second between two consecutive notes to obtain a correct tuning.
    So, this parameter affects directly to the dynamic response of the tuner.

    The temporal window size in samples (obtained as the multiplication of its
    duration in seconds and the effective sampling rate) must be greater than
    the FFT buffer size.

    It must be a real number in seconds. The default value is 0.32 seconds.


 NOISE_THRESHOLD

    To avoid tuning noise, this threshold distinguish what is signal and what
    is noise. Try to tune it empirically with the help of a sound mixer.

    It's a real number whose units are dB.


 CALCULATION_RATE

    With higher calculations per second, the tuner gives us a better dynamic
    sensation, but it'll need more CPU time.
    
    It's a real number, in hertz, and the default value is 20 Hz.


 VISUALIZATION_RATE

    It has impact in the dynamism sensation achieved, but less in the
    computation time.

    There is no point having a calculation rate greater than the visualization
    rate.

    It's a real number, in hertz. The default value is 30 Hz.


 PEAK_NUMBER (Number of peaks)

    For the identification of the fundamental peak, depending on the timbre
    generated by the instrument, we must consider the number of harmonics
    (peaks in frequencies multiple of the fundamental one) which can be greater
    than the fundamental peak (up to the relation remarked in the next option).

    It's an integer, expressing an amount. The default value is 3 peaks.


 PEAK_REJECTION_RELATION

    Any peak with a relative amplitude (relative to the maximum peak) bigger
    than this parameter will be ruled out.

    It's a real number with dB units. The default value is 20 dB.


 PEAK_HALF_WIDTH

    Number of samples at each side needed for a peak to be accepted. The correct
    tuning of this parameter will depend on the instrument, and mainly on the
    spectral resolution obtained with the effective sampling rate and the FFT
    size. Note that considering N samples of the FFT implies a variable
    frequency interval that depends on those parameters.
    
    It's an integer expressing a number of samples. The default value is 1
    sample.


 DFT_NUMBER (Number of DFTs)

    After the fundamental peak is found on the FFT, a certain amount of DFTs
    (localized in frequency domain) are computed to get close to the note
    frequency. This is a previous step before launching a final approximation
    with an iterative method (Newton-Raphson).

    It's an integer expressing an amount of DFTs, and the default value is 2
    DFTs.
    
    
 DFT_SIZE

    DTF size in samples. Bigger values gets more locking precision, but more
    computing time is needed.

    It's an integer. The default value is 15 samples.
    
    
 GAIN

    Real value indicating a scale factor for the input signal, that may help
    in fitting the signal between certain desirable levels.
    
    It's a real number expressed in logarithmic units (dB). The default value is
    0 dB.
    
    
 SCALE
 
 	Definition of the scale used for the tuning. By default a 12 semitones
 	equal-tempered scale is used. It contains different parameters:
 	
 	NAME: Scale name, only for your information.
 	BASE_FREQUENCY: The absolute frequency, in hertz, of the first note.
 	NOTE_COUNT: number of notes in the scale.
 	NOTES: list of notes, being them pairs of name and frequency shift. The
 		frequency shift can be expressed as a real number in cents or a
 		division of integer values, codifying a frequency ratio, like '3/2'
 		or '5/4'. Be careful with leaving wide gaps in frequency between each
 		pair of adjacent notes, as the gauge range will adapt to the maximum
 		of those distances. Try to use scales with at least 12 tones. 
