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
| Project | How it is used | Current editions it implements |
|---|---|---|
| MoSQITo | Written in Python. pip install mosqito | Zwicker loudness, Sharpness, Roughness (Daniel & Weber) |
| sottek-hearing-model | Written in Python; based on refmap-psychoacoustics. pip install sottek-hearing-modelNeeds 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-toolbox | Written in Python; based on python-acoustics. pip install acoustic-toolbox | older editions or unreleased code only |
| refmap-psychoacoustics | Written 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 |
| PyDSM | Written in Python. pip install pydsm | older editions or unreleased code only |
| MetaSona new | Written in C, with a Python interface; based on SQAT. pip install metasonaA 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 new | Written 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 new | Written 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 licence | Written in Python; based on AMT. NumPy adaptation of the AMT functions moore1997 and glasberg2002. | older editions or unreleased code only |
| phonometry new | Written in Python. pip install phonometryPure 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 new | Written in Python. pip install rota-orderPython 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 new | Written in Python; based on AMT. pip install torch-amtPyTorch: differentiable, and runs on GPU. | older editions or unreleased code only |
| pySQAT developing no licence | Written 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 developing | Written 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 legacy | Written 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 legacy | Written in Python; based on MoSQITo. From the repository. | older editions or unreleased code only |
| PsychoacousticParametersMeasurer legacy no licence | Written in Python. From the repository. | Zwicker loudness, Sharpness, Psychoacoustic annoyance |
| python-acoustics legacy | Written in Python. pip install acoustics | older editions or unreleased code only |
| SUAVE legacy | Written in Python. From the repository. | Perceived noise level and EPNL |
MATLAB and Octave 11
| Project | How it is used | Current editions it implements |
|---|---|---|
| SQAT | Written 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 |
| AMT | Written 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-psychoacoustics | Written 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 |
| AARAE | Written in MATLAB. From the repository. | Zwicker loudness, Roughness (Daniel & Weber) |
| iso532-3 (tv2018.m) no licence | Written in MATLAB. From the repository. | Time-varying loudness (Moore–Glasberg–Schlittenlacher) |
| ITA-Toolbox | Written 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 licence | Written in MATLAB. From the repository. | Fluctuation strength (Osses et al.) |
| HAW loudness tool legacy | Written in MATLAB. From the repository. | older editions or unreleased code only |
| IoSR Matlab Toolbox legacy | Written in MATLAB. From the repository. | older editions or unreleased code only |
| PsySound3 legacy no licence | Written in MATLAB. From the repository. | Roughness (Daniel & Weber) |
| Swift & Gee codes legacy | Written in MATLAB. | older editions or unreleased code only |
C and C++ 6
| Project | How it is used | Current editions it implements |
|---|---|---|
| PSYCHO | Written in C. Objects for Pure Data: C externals built with pd-lib-builder, and Pd abstractions. | older editions or unreleased code only |
| MetaSona new | Written 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 new | Written 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-available | Written in C++. C++: a static library, a command-line tool and a desktop app. | Zwicker loudness, Sharpness, Roughness (Daniel & Weber) |
| deeuu/loudness legacy | Written 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 legacy | Written 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
| Project | How it is used | Current editions it implements |
|---|---|---|
| Mosqito.NET new | Written 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
| Project | How it is used | Current editions it implements |
|---|---|---|
| iso532-1-rs new | Written 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 new | Written 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 licence | Written in Rust. From the repository. | Perceived noise level and EPNL partial |
Julia 2
| Project | How it is used | Current editions it implements |
|---|---|---|
| PsychoacousticMetrics.jl new | Written 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 new | Written in Julia. using Pkg; Pkg.add("ZwickerLoudness")Takes one-third-octave band levels, not audio; ZwickerLoudnessAudio.jl adds that. | Zwicker loudness |
Pure Data 1
| Project | How it is used | Current editions it implements |
|---|---|---|
| PSYCHO | Written 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.
- MATLAB code from Python. The MATLAB Engine API for Python runs MATLAB functions from Python. It needs a MATLAB installation and licence. This is how a MATLAB toolbox such as SQAT or the Auditory Modeling Toolbox can be used from Python. Without MATLAB, there are Python ports: pySQAT of SQAT, and torch_amt and NumpyLibforPsychoAcoustic of some AMT loudness models.
- Octave code from Python. oct2py runs GNU Octave functions from Python, without a MATLAB licence, for code that runs in Octave.
- Python packages from MATLAB. MATLAB can call Python libraries directly, so a Python package such as MoSQITo can be used from MATLAB.
- C libraries from other languages. A C library can be called from Python (ctypes or cffi), Julia (
ccall), Rust and most other languages. MetaSona's Python package loads its C library this way, and iso532-1-rs has a C interface for the same purpose. - Python from Julia. PythonCall.jl calls Python packages from Julia.