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

Languages

Which metrics can be computed from each programming language, and how to use each project from it. Some projects are written in the language itself, some have a compiled core with an interface for it, and some are ports of another project.

Coverage by language

an available implementation of the current edition · the same, but only from newly released projects not yet seen to be widely used · only unreleased, proposed, older-edition or partial implementations · none found. A library with bindings counts for each language it can be called from.

Python 19

ProjectHow it is usedCurrent editions it implements
MoSQIToWritten in Python. pip install mosqitoZwicker loudness, Sharpness, Roughness (Daniel & Weber)
sottek-hearing-modelWritten in Python; based on refmap-psychoacoustics. pip install sottek-hearing-model
Needs Python 3.11 or newer. Translated from the MATLAB code used in SQAT and RefMap.
Sottek Hearing Model loudness, Sottek Hearing Model roughness, Sottek Hearing Model tonality
acoustic-toolboxWritten in Python; based on python-acoustics. pip install acoustic-toolboxolder editions or unreleased code only
refmap-psychoacousticsWritten in MATLAB, with a Python interface.
MATLAB code with Python ports in the same repository. The Python port of its ECMA-418-2 code is published separately as sottek-hearing-model.
Sottek Hearing Model loudness, Sharpness, Sottek Hearing Model roughness, Sottek Hearing Model tonality, Psychoacoustic annoyance, Aural detectability
PyDSMWritten in Python. pip install pydsmolder editions or unreleased code only
MetaSona newWritten in C, with a Python interface; based on SQAT. pip install metasona
A CMake library in C11 with the header metasona/metasona.h and a documented C API. The Python package loads the compiled library with ctypes and ships prebuilt wheels for Windows x64, Linux x64 and ARM64 and macOS (Intel and Apple silicon), for Python 3.9 to 3.14. The C functions take 48 kHz input; the Python interface resamples.
Zwicker loudness, Sottek Hearing Model loudness, Sharpness, Roughness (Daniel & Weber), Sottek Hearing Model roughness, Tonality (Aures), Sottek Hearing Model tonality
ecma418-torch newWritten in Python.
A PyTorch package (Python 3.10 or newer, PyTorch 2.0 or newer) that computes in float64 and is differentiable end to end, so the metrics can serve as terms in gradient-based optimisation. Not on PyPI yet.
Sottek Hearing Model roughness, Sottek Hearing Model fluctuation strength
iso532-1-rs newWritten in Rust, with a Python interface.
It has a C ABI and a Python module built with PyO3 and maturin. Neither the crate nor the Python module is published, so both are built from the repository.
Zwicker loudness
NumpyLibforPsychoAcoustic new no licenceWritten in Python; based on AMT.
NumPy adaptation of the AMT functions moore1997 and glasberg2002.
older editions or unreleased code only
phonometry newWritten in Python. pip install phonometry
Pure Python; needs only NumPy and SciPy.
Zwicker loudness, Moore–Glasberg loudness, Time-varying loudness (Moore–Glasberg–Schlittenlacher), Sottek Hearing Model loudness, Sharpness, Sottek Hearing Model roughness, Fluctuation strength (Osses et al.), Sottek Hearing Model fluctuation strength, Sottek Hearing Model tonality, Tone-to-noise ratio and prominence ratio, Tonal audibility (ISO 1996-2), Tonal audibility of wind turbines (IEC 61400-11), Impulse prominence, Psychoacoustic annoyance, Equal-loudness contours, Perceived noise level and EPNL
rota-order newWritten in Python. pip install rota-order
Python 3.10 or newer; depends only on NumPy and SciPy. The PyPI package is rota-order, imported as rota. The wrappers of rota.bridges (since version 0.6.0) call MoSQITo or sottek-hearing-model in Python, and SQAT in a local MATLAB through the MATLAB Engine API for Python; all three are optional and installed by the user. The figures of rota.plot (since 0.7.0) need Matplotlib, also optional.
Tone-to-noise ratio and prominence ratio
torch_amt newWritten in Python; based on AMT. pip install torch-amt
PyTorch: differentiable, and runs on GPU.
older editions or unreleased code only
pySQAT developing no licenceWritten in Python; based on SQAT.
Python port of SQAT with a PySide6 interface; its ECMA-418-2 functions call sottek-hearing-model.
Zwicker loudness, Sharpness, Roughness (Daniel & Weber), Fluctuation strength (Osses et al.), Tonality (Aures), Psychoacoustic annoyance, Perceived noise level and EPNL
LoudnessModel developingWritten in Python; based on iso532-3 (tv2018.m).
Python translation of the Cambridge MATLAB code (tv2018), in a NumPy version and a JAX version.
older editions or unreleased code only
deeuu/loudness legacyWritten in C++, with a Python interface.
Python bindings generated by SWIG; building needs SWIG 3, libsndfile, FFTW and zlib. The Python package was never published on PyPI.
older editions or unreleased code only
MoSQITo-FDP legacyWritten in Python; based on MoSQITo. From the repository.older editions or unreleased code only
PsychoacousticParametersMeasurer legacy no licenceWritten in Python. From the repository.Zwicker loudness, Sharpness, Psychoacoustic annoyance
python-acoustics legacyWritten in Python. pip install acousticsolder editions or unreleased code only
SUAVE legacyWritten in Python. From the repository.Perceived noise level and EPNL

MATLAB and Octave 11

ProjectHow it is usedCurrent editions it implements
SQATWritten in MATLAB.
MATLAB only; SQAT has no Python interface of its own. pySQAT is a Python port of it, and MetaSona ports parts of it to C. Since v2.0 a graphical interface, SQAT_GUI.m, laid out like pySQAT's, runs the metrics without programming, still inside MATLAB.
Zwicker loudness, Sottek Hearing Model loudness, Sharpness, Roughness (Daniel & Weber), Sottek Hearing Model roughness, Fluctuation strength (Osses et al.), Tonality (Aures), Sottek Hearing Model tonality, Psychoacoustic annoyance, Perceived noise level and EPNL
AMTWritten in MATLAB.
Runs in MATLAB and in GNU Octave. torch_amt and NumpyLibforPsychoAcoustic port some of its loudness models to Python.
older editions or unreleased code only
refmap-psychoacousticsWritten in MATLAB.
MATLAB code with Python ports in the same repository. The Python port of its ECMA-418-2 code is published separately as sottek-hearing-model.
Sottek Hearing Model loudness, Sharpness, Sottek Hearing Model roughness, Sottek Hearing Model tonality, Psychoacoustic annoyance, Aural detectability
AARAEWritten in MATLAB. From the repository.Zwicker loudness, Roughness (Daniel & Weber)
iso532-3 (tv2018.m) no licenceWritten in MATLAB. From the repository.Time-varying loudness (Moore–Glasberg–Schlittenlacher)
ITA-ToolboxWritten in MATLAB.
MATLAB toolbox. The loudness functions call C code compiled as MEX files; the C sources and precompiled binaries for Windows, Linux and macOS are included.
Roughness (Daniel & Weber)
fluctuation-strength-TUe legacy no licenceWritten in MATLAB. From the repository.Fluctuation strength (Osses et al.)
HAW loudness tool legacyWritten in MATLAB. From the repository.older editions or unreleased code only
IoSR Matlab Toolbox legacyWritten in MATLAB. From the repository.older editions or unreleased code only
PsySound3 legacy no licenceWritten in MATLAB. From the repository.Roughness (Daniel & Weber)
Swift & Gee codes legacyWritten in MATLAB.older editions or unreleased code only

C and C++ 6

ProjectHow it is usedCurrent editions it implements
PSYCHOWritten in C.
Objects for Pure Data: C externals built with pd-lib-builder, and Pd abstractions.
older editions or unreleased code only
MetaSona newWritten in C; based on SQAT.
A CMake library in C11 with the header metasona/metasona.h and a documented C API. The Python package loads the compiled library with ctypes and ships prebuilt wheels for Windows x64, Linux x64 and ARM64 and macOS (Intel and Apple silicon), for Python 3.9 to 3.14. The C functions take 48 kHz input; the Python interface resamples.
Zwicker loudness, Sottek Hearing Model loudness, Sharpness, Roughness (Daniel & Weber), Sottek Hearing Model roughness, Tonality (Aures), Sottek Hearing Model tonality
iso532-1-rs newWritten in Rust, with a C interface.
It has a C ABI and a Python module built with PyO3 and maturin. Neither the crate nor the Python module is published, so both are built from the repository.
Zwicker loudness
SoundPalette new source-availableWritten in C++.
C++: a static library, a command-line tool and a desktop app.
Zwicker loudness, Sharpness, Roughness (Daniel & Weber)
deeuu/loudness legacyWritten in C++.
Python bindings generated by SWIG; building needs SWIG 3, libsndfile, FFTW and zlib. The Python package was never published on PyPI.
older editions or unreleased code only
zwickerloudness legacyWritten in C.
C console program for BSD, Linux and Windows that reads one-third-octave band levels from files.
older editions or unreleased code only

C# 1

ProjectHow it is usedCurrent editions it implements
Mosqito.NET newWritten in C#; based on MoSQITo.
Native C# for .NET 8 (it does not call Python), with MathNet.Numerics and NAudio. The project file has NuGet metadata, but no package was found on nuget.org (checked 2026-10-07); build it from the repository.
Zwicker loudness, Sharpness, Roughness (Daniel & Weber)

Rust 3

ProjectHow it is usedCurrent editions it implements
iso532-1-rs newWritten in Rust.
It has a C ABI and a Python module built with PyO3 and maturin. Neither the crate nor the Python module is published, so both are built from the repository.
Zwicker loudness
Kirin Hypha newWritten in Rust.
A measurement plug-in for digital audio workstations (AU and VST3 on macOS, VST3 on Windows); the psychoacoustic engine is the Rust crate kirin_measure in the repository.
Zwicker loudness, Sharpness
Zhen-Ni/epnl legacy no licenceWritten in Rust. From the repository.Perceived noise level and EPNL partial

Julia 2

ProjectHow it is usedCurrent editions it implements
PsychoacousticMetrics.jl newWritten in Julia. using Pkg; Pkg.add("PsychoacousticMetrics")
Builds on ZwickerLoudness.jl by the same author: sharpness takes its loudness result, and the time-varying annoyance takes the output of ZwickerLoudnessAudio.jl's loudness_zwtv. Roughness and fluctuation strength take audio.
Sharpness, Roughness (Daniel & Weber), Fluctuation strength (Osses et al.), Psychoacoustic annoyance
ZwickerLoudness.jl newWritten in Julia. using Pkg; Pkg.add("ZwickerLoudness")
Takes one-third-octave band levels, not audio; ZwickerLoudnessAudio.jl adds that.
Zwicker loudness

Pure Data 1

ProjectHow it is usedCurrent editions it implements
PSYCHOWritten in C, with a Pure Data interface.
Objects for Pure Data: C externals built with pd-lib-builder, and Pd abstractions.
older editions or unreleased code only

Calling code across languages

A project can often be used from a language other than its own. The routes below are general; check that the code you want to call works with them.

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