LINGOT - A musical instrument tuner.

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

Copyright (C) 2004-2007 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,
its configurability gives it a more general character.

It looks like an analogic tuner, with a gauge indicating the 
relative shift to a certain note --found automatically as the closest 
note to the estimated frequency--, indicating that note and its frequency.

The note will be found automatically, since the program hasn't any
manual function mode (indicating the note to tune manually), for
mantaining generality.

We recommend using the tuner in conjunction with a sound mixer for 
selecting the desired recording source and the signal recording levels.


Requisites
==========

	* Sound card.
	* Kernel linux with audio support (OSS).
	* GTK+ library, version 2.0.
	
Installation
============

	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 configuration options can be also changed in GUI, and we recommend
use it to make changes. The default values are optimized for electric
guitar tuning, for other musical instruments the default values must be 
slightly changed (it's a good idea to have one config file for each 
instrument, and use '-c' option to load the configuration that best fits
to you)

With the purpose of maintaining the maximun configurability, the user 
has many options, and signal processing knowledge was need for the total 
understanding of its effects. Following, the effects of the options will
be tried to explain, but if you don't understand it well, the best is no
change it. Future versions would have less options to obtain an easy to
use tuner.

Now we detail the options that we'll found in this file, and we recommend
to make changes according with the tunning precission obtained and the
cpu power needed.

AUDIO_DEV (sound device)

	Selected sound device.

SAMPLE_RATE (sampling rate)

	The input signal will be sampled at this frecuency by the sound card.
	Not all cards support arbitrary sampling rate, and we recommend to
	choose one of the options that the GUI gives us:

	  8000 Hz
	 11025 Hz
	 22050 Hz
	 44100 Hz

	We will be able to find an effective sampling rate submultiple 
	of that we'll put here by means of a oversampling factor.

	In order to select a sampling rate, we must consider the maximun
	frecuency which we want to tune our instrument, and choose an
	effective sampling rate (already divided by the oversampling factor)
	that is the double of the maximun at least (Nyquist frequency). 
	All spectral components that are over the half of 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. This has the
	same effect that if the sound card was using as sampling rate the
	effective sampling rate.

	For example, to obtain a 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 of 2.

	It must be an integer number, dimensionless.

ROOT_FREQUENCY_ERROR ("A" reference note error)

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

	This is useful when we want to adapt the instrument tuning to
     	a recording which have 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 an 50% error.
	(error is the amount percentual error in halftones)

	It must be a real number in as much by one (0.5 is equal to
	a 50% error, expressed in percentage of	halftones)

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 hertzs.

FFT_SIZE (Size of the FTT)

	A high value gets more accuracy, especially more precision locking
	the desired frecuency, but it needs more compute time.

	It must consider the calculation time interval that implies to raise 
	unnecessarily this value: having a buffer of 4096 samples for FFT,
	with a sampling rate of 8 KHz implies that each transform needs
	last 512 ms temporary values, so it's no sense to put a shorter time
	window. 

	Let's see more extrem example:

	Let us suppose we have an instrument able to generate low frecuencies
	(< 200 Hz), and therebefore we choose a efective sampling rate of 
	400 Hz 	(an audio card sampling rate of 8 Khz and an oversampling factor 
	of 20). With the aim to obtain the better initial precision, we choose
	a FFT buffer length of 4096 samples. This implies that the minimal 
	temporal window length 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.
	
	Note that the spetrum viewer only displays 256 samples, and higher 
	values of this parameter can make that the fundamental frecuency
	matched is out the viewer window (a viewer that shifts in frecuency
	isn't implemented at the moment)

	It must be an integer power of 2.


TEMPORAL_WINDOW

	The length in time of the signal that is used to compute the final
	frecuency. With greater values, we'll obtain a more accurate result, 
	but also a slower response polluted by early notes.

	As a practical rule, we say that if we've a temporal window of one
	second, we must wait one second to between two consecutive notes
	to obtain a correct tuning. So, this parameter affects directly
	to the dinamic 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 FFT buffer size.

	It must be a real number in seconds.


NOISE_THRESHOLD

	To avoid to tune noise, this threshold distingish what is signal and
	what is noise. Obtain a correct value empirically with the help of a
	sound mixer to deal with the signal level.

	It's a real number which units are dB

CALCULATION_RATE

	With higher calculations per second, the tuner give us a better 
	dynamic sensation, but it'll needs more computer time.
	

VISUALIZATION_RATE

	It's impact in the dynamism sensation achieved, but less in the
	compute time.

	It does have no sense that the calculation rate are greater than
	the visualization rate.


PEAK_NUMBER (Number of peaks)

	For the identification of the fundamental peak, we must consider
	the number of armonics peaks (in frecuencies that are multiple of the
	fundamental). They are function of the timbre generated by the 
	instrument, and they can be greater than the fundamental peak (until
	the relation signaled in the next option)


PEAK_REJECTION_RELATION

	Any peak which magnitude has a relationship with the magnitude of the 
	max. peak bigger than this parameter will be discarded (this parameter 
	is to deal with the instrument timbre)

	Its a real number with dB units.

PEAK_ORDER

	Number of samples needed to accept a peak. The correct tuning of this
	parameter will depend on the instrument, and in a more important way,
	on the spectral resolution obtained with effective sampling rate and
	the FFT size. Point out that N samples of the FFT means that a
	variable frecuency interval that depends in those parameteres.
	

DFT_NUMBER (Number of DFTs)

	After the max. peak in the FFT is found, a certain amount of 
  localized DFTs in the frecuency domain was done to get close to the
	note frecuency before to launch a final aproximation that uses
	a iterative method (Newton-Raphson).

	
DFT_SIZE

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


How it works
============

	Check technical docs.
