LISQM A List of Open-Source Implementations of Psychoacoustic and Sound Quality Metrics

Version 0.5.10 · data as of 28 October 2026
Source on GitHub

Metrics Tonality

Tonality, Aures/Terhardt model

Tonality from Aures (1985): tonal components are extracted with the method of Terhardt, Stoll & Seewann (1982), weighted, and related to the loudness of the whole sound. Not standardised.

There is no standard; the reference model is Aures (1985b). Open-source implementations of it:

SQAT corrected several issues in September 2026, released in v2.0 (for example, the level excess of only one tonal component, the last positive one, entered the result, combined with the first component's frequency and bandwidth), which changes results compared with SQAT v1.3 and earlier.

Editions and who implements them

DateEditionStatusWhat changedImplemented by
1985Aures (1985b)publishedTonality model.SQAT, MoSQITo PR, MetaSona new, pySQAT developing
1982Terhardt et al. (1982)publishedExtraction of tonal components used by the model.—

Project map

The project map, with only the lines for tonality (Aures) between the projects listed for it. Agreement between a project and the code it was ported or adapted from only checks the port.

Project map for Tonality (Aures) MoSQITo: Python py   MoSQITo no relation recorded SQAT: MATLAB m   SQAT MetaSona: C, Python c   MetaSona Ported or adapted: SQAT to MetaSona, for Aures (1985b) pySQAT: Python py   pySQAT Ported or adapted: SQAT to pySQAT, for Aures (1985b)

Implementations

ProjectEditionFunctionsValidation (as stated)Notes
SQAT
MATLAB
Aures (1985b)
since v1.0
Tonality_Aures1985, Tonality_Aures1985_from_wavfilestandard or paper datav2.0 fixes eight defects (issue #67; for example, only one tonal component's level excess entered the result, and tones were removed from the wrong spectrum), so results differ from v1.x.
MoSQITo
Python
Aures (1985b)—not statedPR Pull request from April 2026 following the improved Aures metric of Estreder et al. (2023); no maintainer reply.
MetaSona
C Python
Aures (1985b)
since 0.1.0
tonality_aurescompared with SQAT (its source)new Follows SQAT's September 2026 revision (250 ms Hann windows, 125 ms hop).
pySQAT
Python
Aures (1985b)Tonality_Aures1985compared with SQAT (its source)developing no licence A June 2026 commit corrected its calibration; it predates SQAT's September 2026 fixes.

Projects in bold and other established projects come first, then newly released, developing and legacy ones. Validation is what each project says about its own testing. The details are below, and the kinds of evidence are explained on the About page. The project map above shows which project was ported or adapted from which.

See also: Tonality from the Sottek Hearing Model (ECMA-418-2).

How they were validated

As reported by each project; LISQM has not run the code. Two implementations that agree can still share the same error. Kinds of evidence.

SQAT · Aures (1985b)

standard or paper data

  • v2.0 has five validation scripts: a tone emerging from noise, compared with Fig. 1(a) of Hastings et al. (2003) (root mean square deviation 0.0129 t.u. over nine points); the extraction of tonal components and the level excess, compared with the intermediate values of an independent implementation (Zhang & Shrestha, 2003); the weightings of bandwidth and frequency, compared with Aures's Figs. 6 and 5; and the dependence on bandwidth, compared with Hastings's subjective data.
  • v1.3 is checked with one signal-to-noise comparison.
MetaSona new · Aures (1985b)

compared with SQAT (its source)

Ported or adapted from SQAT. It was compared with the code it was ported from, which checks the port only.

  • The project calls its source-based Python comparisons "development checks, not an executed MATLAB/Octave validation"; exact agreement with MATLAB is not established.
  • The results are not published.
pySQAT developing · Aures (1985b)

compared with SQAT (its source)

Ported or adapted from SQAT. It was compared with the code it was ported from, which checks the port only.

  • Compared with SQAT v1.3, run in MATLAB, by validation/FINAL_VAL.py; the generated reports are not committed.

Not stated by MoSQITo.

Before you compare numbers

Implementations of the same metric can give different numbers without either being wrong. Check these choices first.

What the projects state:

SQAT
  • Statistics such as N5 take the nearest rank of the sorted time series, without interpolation (get_exceeded_value), and leave out the first time_skip seconds of the signal.
MetaSona new
  • Expects calibrated sound pressure in pascals.
  • The C functions require 48 kHz input; the Python interface resamples other rates to 48 kHz (SciPy resample_poly).
  • time_skip_s (default 0 s) leaves out the start of the signal from the reported frames; the computation still runs over the whole signal. Time-varying results include every complete frame, labelled at frame centres, which differs from SQAT's handling of the last frame and of time stamps.

References

  1. Terhardt, E., Stoll, G., & Seewann, M. (1982). Algorithm for extraction of pitch and pitch salience from complex tonal signals. The Journal of the Acoustical Society of America, 71(3), 679–688. https://doi.org/10.1121/1.387544
  2. Aures, W. (1985). Berechnungsverfahren für den sensorischen Wohlklang beliebiger Schallsignale [A model for calculating the sensory euphony of various sounds]. Acustica, 59, 130–141.

Metrics, standards and papers, projects, function names and pages.