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-2010 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 analogue 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.

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
having a configuration file for each instrument, and use '-c' option to load the
configuration that best fits to you). The options can be changed via GUI
(recommended way to make changes).

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 who make up this file, and we recommend making
changes regarding the desired tuning precision and the demanded CPU power. If
you don't understand the meaning or the effects of any option, then just try
different values or, 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 'plughw: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
    mean 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
    spectral components over the half of the effective sampling rate will be
    filtered and they will not appear in the spectrum.

    It must be an integer number, in Hertzs.

 OVERSAMPLING (oversampling factor) 

    The sampled signal will be decimated by this factor, yielding 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 until 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 equally tempered semitones, i.e., a
    value of 0.5 equals to an error of 50 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 it's no sense to put a shorter temporal window.

    Let's see 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 that used to compute the final
    frequency. With greater 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 give 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 compute
    time.

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

    It's a real number, in hertzs. 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) 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 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 frequential
    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 in the FFT, a certain amount of DFTs
    (localized in the 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. 
