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 Loudness

Zwicker loudness (ISO 532-1, DIN 45631)

Loudness from Zwicker's model: third-octave band levels are turned into specific loudness on the critical-band (Bark) scale and integrated. ISO 532-1:2017 specifies one procedure for stationary sounds and one for time-varying sounds (from which percentile values are taken, such as N5, the loudness exceeded 5 % of the time), and replaced method B of ISO 532:1975. The German standards DIN 45631 (stationary) and DIN 45631/A1 (time-varying) specify Zwicker's method; ISO 532-1:2017 states that its stationary method is based on DIN 45631:1991.

The current edition is ISO 532-1:2017. In development: ISO/CD 532-1. Open-source implementations of it:

Earlier editions or related models: ITA-Toolbox (MATLAB; DIN 45631/A1:2010; time-varying, with N5), AARAE (MATLAB; Chalupper & Fastl (2002); time-varying), ITA-Toolbox (MATLAB; DIN 45631:1991; stationary; free or diffuse field), PsySound3 (MATLAB; legacy, no commit since 2015-03; Chalupper & Fastl (2002); time-varying), deeuu/loudness (C++, Python; legacy, no commit since 2019-08; DIN 45631:1991; stationary only), and zwickerloudness (C; legacy, no commit since 2018-06; DIN 45631:1991; stationary, from one-third-octave band levels).

In China, GB/T 25982-2024 (interior noise of buses, in force since July 2025) sets loudness and sharpness limits and gives Zwicker's calculation in an informative annex.

Editions and who implements them

DateEditionStatusWhat changedImplemented by
2024-11ISO/CD 532-1in developmentSecond edition at committee-draft stage since November 2024.—
2017-06ISO 532-1:2017current
Under revision; the 2nd edition has been at committee-draft stage since 2024-11-01.
Stationary and time-varying procedures; Annex A reference program, Annex B test signals.SQAT, MoSQITo, AARAE, MetaSona new, iso532-1-rs new, Kirin Hypha new, Mosqito.NET new, phonometry new, SoundPalette new, ZwickerLoudness.jl new, pySQAT developing, PsychoacousticParametersMeasurer legacy
2010-03DIN 45631/A1:2010currentAdds the procedure for time-varying sounds.ITA-Toolbox
2002Chalupper & Fastl (2002)publishedDynamic loudness model built on Zwicker's model, also for hearing impairment (not standardised).AARAE, PsySound3 legacy
1991-03DIN 45631:1991currentStationary sounds.ITA-Toolbox, deeuu/loudness legacy, zwickerloudness legacy
1975-07ISO 532:1975withdrawnMethod B (Zwicker) for stationary sounds, from third-octave levels.—

Project map

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

Scroll the picture sideways.

Project map for Zwicker loudness PsychoacousticParametersMeasurer: Python py   PsychoacousticParametersMeasurer no relation recorded AARAE: MATLAB m   AARAE SQAT: MATLAB m   SQAT Ported or adapted: AARAE to SQAT, for ISO 532-1:2017 MetaSona: C, Python c   MetaSona Ported or adapted: SQAT to MetaSona, for ISO 532-1:2017 pySQAT: Python py   pySQAT Ported or adapted: SQAT to pySQAT, for ISO 532-1:2017 rota-order: Python py   rota-order Used at run time: rota-order calls SQAT for ISO 532-1:2017 BASIC program of DIN 45631 (Zwicker et al., 1991), published with the standard or paper BASIC program (DIN 45631, 1991) MoSQITo: Python py   MoSQITo Ported or adapted: BASIC program of DIN 45631 (Zwicker et al., 1991) to MoSQITo, for ISO 532-1:2017 ITA-Toolbox: MATLAB m   ITA-Toolbox Ported or adapted: BASIC program of DIN 45631 (Zwicker et al., 1991) to ITA-Toolbox, for DIN 45631:1991 deeuu/loudness: C++, Python c++   deeuu/loudness Ported or adapted: BASIC program of DIN 45631 (Zwicker et al., 1991) to deeuu/loudness, for DIN 45631:1991 zwickerloudness: C c   zwickerloudness Ported or adapted: BASIC program of DIN 45631 (Zwicker et al., 1991) to zwickerloudness, for DIN 45631:1991 Ported or adapted: MoSQITo to MetaSona, for ISO 532-1:2017 Kirin Hypha: Rust rs   Kirin Hypha Ported or adapted: MoSQITo to Kirin Hypha, for ISO 532-1:2017 Mosqito.NET: C# c#   Mosqito.NET Ported or adapted: MoSQITo to Mosqito.NET, for ISO 532-1:2017 ZwickerLoudness.jl: Julia jl   ZwickerLoudness.jl Ported or adapted: MoSQITo to ZwickerLoudness.jl, for ISO 532-1:2017 ZwickerLoudnessAudio.jl: Julia jl   ZwickerLoudnessAudio.jl Ported or adapted: MoSQITo to ZwickerLoudnessAudio.jl, for ISO 532-1:2017 Used at run time: rota-order calls MoSQITo for ISO 532-1:2017 PsychoBox: Python py   PsychoBox Used at run time: PsychoBox calls MoSQITo for ISO 532-1:2017 Soundscapy: Python py   Soundscapy Used at run time: Soundscapy calls MoSQITo for ISO 532-1:2017 iso532-1-rs: Rust, C, Python rs   iso532-1-rs Results checked: iso532-1-rs against MoSQITo, for ISO 532-1:2017 SoundPalette: C++ c++   SoundPalette Results checked: SoundPalette against MoSQITo, for ISO 532-1:2017 ISO 532-1 Annex A reference program, published with the standard or paper ISO 532-1 Annex A program Ported or adapted: ISO 532-1 Annex A reference program to AARAE, for ISO 532-1:2017 phonometry: Python py   phonometry Ported or adapted: ISO 532-1 Annex A reference program to phonometry, for ISO 532-1:2017 PsySound3: MATLAB m   PsySound3 Author's own code: PsySound3 to AARAE (Densil Cabrera), for Chalupper & Fastl (2002) Used at run time: ZwickerLoudnessAudio.jl calls ZwickerLoudness.jl for ISO 532-1:2017 Same contributor: ZwickerLoudness.jl and ZwickerLoudnessAudio.jl (slink)

Implementations

ProjectEditionFunctionsValidation (as stated)Notes
SQAT
MATLAB
ISO 532-1:2017
stationary and time-varying; since v1.0
Loudness_ISO532_1, Loudness_ISO532_1_from_wavfilestandard or paper datav2.0 corrects the time-varying procedure (PR #48) and the time_skip handling of the stationary procedure; results differ from v1.x.
MoSQITo
Python
ISO 532-1:2017
stationary (also per segment and from a spectrum) and time-varying; since 1.0.0
loudness_zwst, loudness_zwst_perseg, loudness_zwst_freq, loudness_zwtvstandard or paper data
(outcome not stated)
—
AARAE
MATLAB
ISO 532-1:2017
stationary and time-varying
Loudness_ISO532_1standard or paper data
(time-varying signals only)
The header cites a 2014 draft of ISO 532-1 and describes the code as Ella Manor's 2015 MATLAB port, with adjustments, of the Annex A C code.
ITA-Toolbox
MATLAB
DIN 45631/A1:2010
time-varying, with N5
ita_loudness_timevariantstandard or paper data
(results plotted, not checked)
The header says "DIN 45631/A1" without a year; the function was written in August 2010, after the amendment was published. A code comment says the C code of the nonlinearity block was copied from the DIN document, "without its errors".
AARAE
MATLAB
Chalupper & Fastl (2002)
time-varying
LoudnessCFnot statedAlso outputs loudness fluctuation and time-varying sharpness. Josef Chalupper's code (2000) in its PsySound3 version (2007), adjusted for AARAE by Ella Manor in 2015.
ITA-Toolbox
MATLAB
DIN 45631:1991
stationary; free or diffuse field
ita_loudnessstandard or paper dataThe header says "DIN 45631 / ISO 532 B". The C core (private/DIN45631.c) is Aaron Hastings' version (2000) of the BASIC program published by Zwicker, Fastl, Widmann, Kurakata, Kuwano and Namba in J. Acoust. Soc. Jpn (E) 12(1), 1991.
MetaSona
C Python
ISO 532-1:2017
stationary and time-varying; also from 28 third-octave levels; since 0.1.0
stationary_loudness, time_varying_loudness, loudness_from_levelscompared with MoSQITo (its source)new
iso532-1-rs
Rust C Python
ISO 532-1:2017
stationary, time-varying and streaming; since 0.1.0
loudness_zwst, loudness_zwtv, ZwtvStreamstandard or paper data
also compared with MoSQITo
new Python uses the same names (iso532.loudness_zwst …); the C API has iso532_loudness_zwst, iso532_loudness_zwtv and iso532_stream_*.
Kirin Hypha
Rust
ISO 532-1:2017
time-varying, per channel at 48 kHz; stored in the recorded data; since 1.0.0
kirin_measure::phase_dcompared with MoSQITo (its source)new Ported from MoSQITo v1.2.1.
Mosqito.NET
C#
ISO 532-1:2017
stationary (also per segment and from a spectrum) and time-varying
Sq.LoudnessZwst, Sq.LoudnessZwstFreq, Sq.LoudnessZwstPerSeg, Sq.LoudnessZwtvstandard or paper data
also compared with MoSQITo (its source)
new
phonometry
Python
ISO 532-1:2017
stationary and time-varying; since 3.1.0
loudness_zwicker, loudness_zwicker_from_spectrumstandard or paper datanew
SoundPalette
C++
ISO 532-1:2017
time-varying, reported as N5; monaural; since v0.5.0
sp::compute_psychocompared with MoSQITonew source-available No MoSQITo code is ported.
ZwickerLoudness.jl
Julia
ISO 532-1:2017
stationary, from 28 one-third-octave band levels; since 0.2.0
zwicker_loudnessstandard or paper data
(one Annex B signal)
also compared with MoSQITo
new
ZwickerLoudness.jl
Julia
ISO 532-1:2017
time-varying, from band levels at 2000 Hz; N5 and N10; since 0.3.0
zwicker_loudness_time_varyingstandard or paper data
(one Annex B signal)
also compared with MoSQITo (its source)
new
pySQAT
Python
ISO 532-1:2017Loudness_ISO532_1compared with SQAT (its source)developing no licence
PsychoacousticParametersMeasurer
Python
ISO 532-1:2017
stationary and time-varying, from third-octave levels
loudness_ISO532, loudness_ISO532_timenot statedlegacy no licence The file header says "Loudness ISO 532-1:2014" and the filter coefficients are labelled "ISO 532-1:2014"; the published edition is ISO 532-1:2017.
PsySound3
MATLAB
Chalupper & Fastl (2002)
time-varying
@LoudnessCFnot statedlegacy no licence The analyser names J. Chalupper and H. Fastl as authors.
deeuu/loudness
C++ Python
DIN 45631:1991
stationary only
StationaryLoudnessDIN456311991compared with GENESIS ACOUSTICS code (Python port)legacy Uses 28 third-octave filters with third-order Butterworth responses after ANSI S1.11:1986; there is no time-varying (DIN 45631/A1) model.
zwickerloudness
C
DIN 45631:1991
stationary, from one-third-octave band levels
—own tests onlylegacy Port of the 1991 BASIC program "according to DIN 45631 (ISO 532B)", the program that accompanies DIN 45631:1991; the same program is the basis of deeuu/loudness.

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.

Also available through tools that call one of these implementations: rota-order (via MoSQITo, ISO 532-1:2017), PsychoBox (via MoSQITo, ISO 532-1:2017), Soundscapy (via MoSQITo, ISO 532-1:2017), and ZwickerLoudnessAudio.jl (via ZwickerLoudness.jl, ISO 532-1:2017).

See also: Sharpness (DIN 45692, Aures, von Bismarck), Loudness 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 · ISO 532-1:2017

standard or paper data

Ported or adapted from AARAE.

  • Checked with the 25 test signals of Annex B.2–B.5 against the standard's tolerances.
  • For v2.0, the validation notes say that the maximum loudness and N5 of the time-varying test signals are close to the reference values, apart from offsets in the N5 of test signals 12 and 13 that they trace to the standard's reference spreadsheet. In v1.3, test signal 10 deviated by 18.14 % (PR #48).
MoSQITo · ISO 532-1:2017

standard or paper data (outcome not stated)

Ported or adapted from BASIC program of DIN 45631 (Zwicker et al., 1991).

  • Validation scripts use the ISO 532-1 Annex B test signals; the documentation marks it as validated.
AARAE · ISO 532-1:2017

standard or paper data (time-varying signals only)

Ported or adapted from ISO 532-1 Annex A reference program.

  • A commit of 2017-12-11 says the code was verified with the time-varying test signals of Annex B.5; no check of the stationary method is stated.
ITA-Toolbox · DIN 45631/A1:2010

standard or paper data (results plotted, not checked)

  • A test script plots the results for the amendment's test signals A to D (1 kHz tone pulses of 10 ms to 500 ms) against its tolerance bands; it does not check them automatically.
AARAE · Chalupper & Fastl (2002)

not stated

Ported or adapted from PsySound3 (the author's own code).

ITA-Toolbox · DIN 45631:1991

standard or paper data

Ported or adapted from BASIC program of DIN 45631 (Zwicker et al., 1991).

  • A test compares the loudness of a generated pink noise with 95.09 sone (GF), a value the test attributes to DIN 45631, within 5 %, with third-octave levels computed both by FFT and by filter bank.
MetaSona new · ISO 532-1:2017

compared with MoSQITo (its source)

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

  • Model tables taken from MoSQITo were checked element by element; one upper-slope value (0.22) follows the ISO 532-1 reference C table where MoSQITo uses 0.24.
  • The project says that detailed validation and reference comparisons are kept outside the repository; the results are not published. The README says standards conformance has not been established.
iso532-1-rs new · ISO 532-1:2017

standard or paper data also compared with MoSQITo

  • Parity tests with MoSQITo 1.2.1 on nine synthetic and Annex B signals (worst reported difference 1.3e-9).
  • Checked separately against ISO 532-1 Annex B: the README reports stationary offsets of about +0.82 % and −0.76 % for signals 3 and 5, inside the standard's tolerance, and details signals 3, 5 and 10 in docs/ISO-ANNEXB-NUMERICAL-ERROR-2026-07-04.md.
Kirin Hypha new · ISO 532-1:2017

compared with MoSQITo (its source)

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

  • Tests assert specific loudness within a relative 1e-3 of MoSQITo.
Mosqito.NET new · ISO 532-1:2017

standard or paper data also compared with MoSQITo (its source)

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

  • Unit tests ported from MoSQITo compare stationary loudness with ISO 532-1 Annex B values.
  • Every public function is compared with the output of Python MoSQITo for seven WAV files (three of them ISO 532-1 test signals), within 1 % (0.5 dB for levels).
phonometry new · ISO 532-1:2017

standard or paper data

Ported or adapted from ISO 532-1 Annex A reference program.

  • Annex B test signals are used in the tests.
SoundPalette new · ISO 532-1:2017

compared with MoSQITo

  • Compared with MoSQITo 1.2.1 on calibrated test signals, used as a development-time reference (NOTES.md, tools/psycho_oracle).
ZwickerLoudness.jl new · ISO 532-1:2017 (stationary, from 28 one-third-octave band levels)

standard or paper data (one Annex B signal) also compared with MoSQITo

  • Checked against ISO 532-1 Annex B signal 1, the only 28-band reference in Annex B (83.296 sone, tolerance ±5 %).
  • Checked per Bark bin against MoSQITo output (maximum difference below 0.001 sone/Bark).
ZwickerLoudness.jl new · ISO 532-1:2017 (time-varying, from band levels at 2000 Hz; N5 and N10)

standard or paper data (one Annex B signal) also compared with MoSQITo (its source)

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

  • Stages are tested against MoSQITo loudness_zwtv intermediates (agreement about 1e-9 to 1e-15).
  • An Annex B.4 "Test signal 6" test regenerates band levels from a local MoSQITo checkout and is skipped when none is present; CI clones MoSQITo for it.
  • The ISO WAV files are not included.
rota-order new via MoSQITo · ISO 532-1:2017 (time-varying, through MoSQITo's loudness_zwtv)

own tests only

  • Tests, which run only where MoSQITo is installed (the project's continuous integration does not install it), check that the wrapper returns what a direct call of MoSQITo gives on the same signal, also after resampling to 48 kHz, that the calibration factor scales the loudness, and that vs_rpm gives what binning the values by hand gives.
rota-order new via SQAT · ISO 532-1:2017 (time-varying, through SQAT v2.0's Loudness_ISO532_1 in MATLAB)

own tests only

  • Tests with a stub engine check the call passed to SQAT and the conversion of its output; the comparison with a direct SQAT call runs only where MATLAB and SQAT v2.0 are installed.
pySQAT developing · ISO 532-1:2017

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.
deeuu/loudness legacy · DIN 45631:1991

compared with GENESIS ACOUSTICS code (Python port)

Ported or adapted from BASIC program of DIN 45631 (Zwicker et al., 1991).

  • Tested against "a quick and dirty Python port of the Matlab code private by GENESIS ACOUSTICS".
zwickerloudness legacy · DIN 45631:1991

own tests only

Ported or adapted from BASIC program of DIN 45631 (Zwicker et al., 1991).

  • The documentation in the release archive says that tests with "classical cases", such as the included test WAV files, "seems to give correct results", and invites users to compare the output with that of the original BASIC program.
ZwickerLoudnessAudio.jl via ZwickerLoudness.jl · ISO 532-1:2017 (stationary, from a waveform or WAV file)

standard or paper data

  • ISO 532-1 Annex B signals 2–5, synthesised in-process, are within the standard's ±5 % (+2.9 %, +3.6 %, +0.5 % and +2.6 % per the README).
ZwickerLoudnessAudio.jl via ZwickerLoudness.jl · ISO 532-1:2017 (time-varying, from a waveform or WAV file at 48 kHz)

standard or paper data also compared with MoSQITo (its source)

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

  • Cross-checked end to end with MoSQITo loudness_zwtv (N(t) about 3e-16 relative, N5/N10 about 2e-15 absolute).
  • An Annex B.4 test is skipped when the ISO recording is not available locally.

Not stated by PsychoacousticParametersMeasurer, PsySound3, PsychoBox, and Soundscapy.

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.
MoSQITo
  • Signals sampled below 48 kHz are resampled to 48 kHz (FFT method) with a warning; time-varying loudness rejects rates above 48 kHz.
ITA-Toolbox
  • N5 is MATLAB's prctile(N, 95). Blocks are 2 ms long without overlap by default, and the signal is processed at its own sample rate.
  • Third-octave levels come from an FFT by default, or from a filter bank ('mode', 'filter').
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.
Mosqito.NET new
  • Time-varying loudness and ECMA-418-2 roughness resample input at any other rate to 48 kHz, and stationary loudness resamples rates below 48 kHz; MoSQITo rejects rates above 48 kHz for time-varying loudness.
rota-order new
  • The method vs_rpm of a wrapper's result bins it along rpm after leaving out the start of the signal: by default it takes in each speed bin the 95th percentile of the loudness (N5), the median of the sharpness and the 90th percentile of the roughness, after 0.6 s for loudness and sharpness and 1.5 s for roughness. Keyword arguments override these choices.
  • Input in any unit is turned into sound pressure in Pa by an explicit calibration factor and resampled to 48 kHz.
ZwickerLoudnessAudio.jl
  • Stationary loudness resamples input below 48 kHz to 48 kHz (polyphase), with a warning.
  • Time-varying loudness accepts 48 kHz input only (an error otherwise).

References

  1. ISO 532:1975. Acoustics — Method for calculating loudness level. https://www.iso.org/standard/4603.html
  2. DIN 45631:1991. Berechnung des Lautstärkepegels und der Lautheit aus dem Geräuschspektrum; Verfahren nach E. Zwicker. https://www.dinmedia.de/en/standard/din-45631/1666531
  3. Chalupper, J., & Fastl, H. (2002). Dynamic loudness model (DLM) for normal and hearing-impaired listeners. Acta Acustica united with Acustica, 88(3), 378–386. https://www.ingentaconnect.com/contentone/dav/aaua/2002/00000088/00000003/art00009
  4. DIN 45631/A1:2010. Calculation of loudness level and loudness from the sound spectrum — Zwicker method — Amendment 1: Calculation of the loudness of time-variant sound. https://www.dinmedia.de/en/standard/din-45631-a1/122476084
  5. ISO 532-1:2017. Acoustics — Methods for calculating loudness — Part 1: Zwicker method. https://www.iso.org/standard/63077.html
  6. ISO/CD 532-1. Acoustics — Methods for calculating loudness — Part 1: Zwicker method (2nd edition). https://www.iso.org/standard/90809.html

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