# Tonality, Aures/Terhardt model

> Part of [LISQM](https://zhenxianli.github.io/LISQM/) (List of Implementations of Sound Quality Metrics), a list of open-source implementations of psychoacoustic metrics. Data as of 2026-10-28. Web page: https://zhenxianli.github.io/LISQM/metrics/tonality-aures.html

**Quantity:** Tonality · **Unit:** t.u. · **Also known as:** Aures tonality, Terhardt tonality, tonality units, t.u., sensory euphony

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](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (MATLAB), **[MoSQITo](https://zhenxianli.github.io/LISQM/projects/mosqito.html)** (Python; PR, not merged), [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html) (C, Python; newly released, not yet seen to be widely used), and [pySQAT](https://zhenxianli.github.io/LISQM/projects/pysqat.html) (Python; developing).

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

| Date | Edition | Status | What changed | Implemented by |
|---|---|---|---|---|
| 1985 | [Aures (1985b)](https://zhenxianli.github.io/LISQM/standards.html#ref-aures-1985-euphony) | published | Tonality model. | **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**, **[MoSQITo](https://zhenxianli.github.io/LISQM/projects/mosqito.html)** (PR), [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html), [pySQAT](https://zhenxianli.github.io/LISQM/projects/pysqat.html) |
| 1982 | [Terhardt et al. (1982)](https://doi.org/10.1121/1.387544) | published | Extraction of tonal components used by the model. | — |

## Project map

The lines of the project map for tonality (Aures) only, between the projects listed for it (the whole map: https://zhenxianli.github.io/LISQM/projects/map.md). Agreement between a project and the code it was ported or adapted from only checks the port.

### Ported or adapted from another project

- From **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**: [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html) (Aures (1985b)); [pySQAT](https://zhenxianli.github.io/LISQM/projects/pysqat.html) (Aures (1985b))

On the map without a line, as no relation to another project listed for tonality (Aures) is recorded for them: **[MoSQITo](https://zhenxianli.github.io/LISQM/projects/mosqito.html)**.

## Implementations

| Project | Language | Edition | Functions | Validation (as stated) | Notes |
|---|---|---|---|---|---|
| **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** | MATLAB | [Aures (1985b)](https://zhenxianli.github.io/LISQM/standards.html#ref-aures-1985-euphony) (since v1.0) | `Tonality_Aures1985`, `Tonality_Aures1985_from_wavfile` | standard or paper data | v2.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](https://zhenxianli.github.io/LISQM/projects/mosqito.html)** | Python | [Aures (1985b)](https://zhenxianli.github.io/LISQM/standards.html#ref-aures-1985-euphony) | — | not stated | PR (https://github.com/Eomys/MoSQITo/pull/97). Pull request from April 2026 following the improved Aures metric of Estreder et al. (2023); no maintainer reply. |
| [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html) | C, Python | [Aures (1985b)](https://zhenxianli.github.io/LISQM/standards.html#ref-aures-1985-euphony) (since 0.1.0) | `tonality_aures` | compared with SQAT (its source) | Newly released project, not yet seen to be widely used. Follows SQAT's September 2026 revision (250 ms Hann windows, 125 ms hop). |
| [pySQAT](https://zhenxianli.github.io/LISQM/projects/pysqat.html) | Python | [Aures (1985b)](https://zhenxianli.github.io/LISQM/standards.html#ref-aures-1985-euphony) | `Tonality_Aures1985` | compared with SQAT (its source) | Developing project: no publication or documented use by others. No licence file: by default, copying, changing or sharing the code needs the author's permission. A June 2026 commit corrected its calibration; it predates SQAT's September 2026 fixes. |

**See also:** [Tonality from the Sottek Hearing Model (ECMA-418-2)](https://zhenxianli.github.io/LISQM/metrics/tonality-ecma-418-2.html)

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

- **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**, 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](https://zhenxianli.github.io/LISQM/projects/metasona.html), Aures (1985b): compared with **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (its source)
  - Ported or adapted from **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**. 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](https://zhenxianli.github.io/LISQM/projects/pysqat.html), Aures (1985b): compared with **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** (its source)
  - Ported or adapted from **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)**. 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](https://zhenxianli.github.io/LISQM/projects/sqat.html)**: 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](https://zhenxianli.github.io/LISQM/projects/metasona.html): 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.
