# Languages

> 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/languages.html

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

| Metric | Python | MATLAB/Octave | C/C++ | Rust | Julia | Other |
|---|---|---|---|---|---|---|
| [Zwicker loudness](https://zhenxianli.github.io/LISQM/metrics/loudness-zwicker.html) | ● | ● | ◐ | ◐ | ◐ | ◐ |
| [Moore–Glasberg loudness](https://zhenxianli.github.io/LISQM/metrics/loudness-moore-glasberg.html) | ◐ | ○ | ○ | — | — | — |
| [Time-varying loudness (Moore–Glasberg–Schlittenlacher)](https://zhenxianli.github.io/LISQM/metrics/loudness-moore-glasberg-time-varying.html) | ◐ | ● | ○ | — | — | — |
| [Sottek Hearing Model loudness](https://zhenxianli.github.io/LISQM/metrics/loudness-ecma-418-2.html) | ● | ● | ◐ | — | — | ○ |
| [Sharpness](https://zhenxianli.github.io/LISQM/metrics/sharpness.html) | ● | ● | ◐ | ◐ | ◐ | ◐ |
| [Roughness (Daniel & Weber)](https://zhenxianli.github.io/LISQM/metrics/roughness-daniel-weber.html) | ● | ● | ◐ | — | ◐ | ◐ |
| [Sottek Hearing Model roughness](https://zhenxianli.github.io/LISQM/metrics/roughness-ecma-418-2.html) | ● | ● | ◐ | — | — | ○ |
| [Roughness (DIN 38455)](https://zhenxianli.github.io/LISQM/metrics/roughness-din-38455.html) | — | — | — | — | — | — |
| [Fluctuation strength (Osses et al.)](https://zhenxianli.github.io/LISQM/metrics/fluctuation-strength-osses.html) | ● | ● | — | — | ◐ | — |
| [Sottek Hearing Model fluctuation strength](https://zhenxianli.github.io/LISQM/metrics/fluctuation-strength-ecma-418-2.html) | ◐ | ○ | — | — | — | — |
| [Tonality (Aures)](https://zhenxianli.github.io/LISQM/metrics/tonality-aures.html) | ● | ● | ◐ | — | — | — |
| [Sottek Hearing Model tonality](https://zhenxianli.github.io/LISQM/metrics/tonality-ecma-418-2.html) | ● | ● | ◐ | — | — | — |
| [Tone-to-noise ratio and prominence ratio](https://zhenxianli.github.io/LISQM/metrics/tone-to-noise-prominence-ratio.html) | ◐ | — | — | — | — | ○ |
| [Tonal components (DIN 45681)](https://zhenxianli.github.io/LISQM/metrics/tonality-din-45681.html) | — | ○ | — | — | — | — |
| [Audibility of tones in noise (ISO/TS 20065)](https://zhenxianli.github.io/LISQM/metrics/tonal-audibility-iso-20065.html) | ○ | — | — | — | — | — |
| [Tonal audibility (ISO 1996-2)](https://zhenxianli.github.io/LISQM/metrics/tonal-audibility-iso-1996-2.html) | ◐ | — | — | — | — | — |
| [Tonal audibility of wind turbines (IEC 61400-11)](https://zhenxianli.github.io/LISQM/metrics/tonal-audibility-iec-61400-11.html) | ◐ | — | — | — | — | — |
| [Impulse prominence](https://zhenxianli.github.io/LISQM/metrics/impulsiveness.html) | ◐ | — | — | — | — | — |
| [Psychoacoustic annoyance](https://zhenxianli.github.io/LISQM/metrics/psychoacoustic-annoyance.html) | ● | ● | — | — | ◐ | — |
| [Equal-loudness contours](https://zhenxianli.github.io/LISQM/metrics/equal-loudness-contours.html) | ◐ | ○ | ○ | — | — | ○ |
| [Perceived noise level and EPNL](https://zhenxianli.github.io/LISQM/metrics/epnl.html) | ● | ● | — | ○ | — | — |
| [Aural detectability](https://zhenxianli.github.io/LISQM/metrics/aural-detectability.html) | ● | ● | — | — | — | — |

● 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. Bindings count: a C library with a Python interface counts for Python.

## Python

| Project | How it is used | Current editions it implements |
|---|---|---|
| **[MoSQITo](https://zhenxianli.github.io/LISQM/projects/mosqito.html)** | Written in Python. `pip install mosqito` | Zwicker loudness, Sharpness, Roughness (Daniel & Weber) |
| **[sottek-hearing-model](https://zhenxianli.github.io/LISQM/projects/sottek-hearing-model.html)** | Written 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-toolbox](https://zhenxianli.github.io/LISQM/projects/acoustic-toolbox.html) | Written in Python; based on python-acoustics. `pip install acoustic-toolbox` | older editions or unreleased code only |
| [refmap-psychoacoustics](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html) | 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](https://zhenxianli.github.io/LISQM/projects/pydsm.html) | Written in Python. `pip install pydsm` | older editions or unreleased code only |
| [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html) (newly released) | Written 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](https://zhenxianli.github.io/LISQM/projects/ecma418-torch.html) (newly released) | 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](https://zhenxianli.github.io/LISQM/projects/iso532-1-rs.html) (newly released) | 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](https://zhenxianli.github.io/LISQM/projects/numpylib-psychoacoustic.html) (newly released, no licence) | Written in Python; based on AMT. NumPy adaptation of the AMT functions `moore1997` and `glasberg2002`. | older editions or unreleased code only |
| [phonometry](https://zhenxianli.github.io/LISQM/projects/phonometry.html) (newly released) | Written 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](https://zhenxianli.github.io/LISQM/projects/rota-order.html) (newly released) | Written 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](https://zhenxianli.github.io/LISQM/projects/torch-amt.html) (newly released) | Written in Python; based on AMT. `pip install torch-amt` PyTorch: differentiable, and runs on GPU. | older editions or unreleased code only |
| [pySQAT](https://zhenxianli.github.io/LISQM/projects/pysqat.html) (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](https://zhenxianli.github.io/LISQM/projects/loudnessmodel.html) (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](https://zhenxianli.github.io/LISQM/projects/deeuu-loudness.html) (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](https://zhenxianli.github.io/LISQM/projects/mosqito-fdp.html) (legacy) | Written in Python; based on MoSQITo. | older editions or unreleased code only |
| [PsychoacousticParametersMeasurer](https://zhenxianli.github.io/LISQM/projects/psychoacoustic-parameters-measurer.html) (legacy, no licence) | Written in Python. | Zwicker loudness, Sharpness, Psychoacoustic annoyance |
| [python-acoustics](https://zhenxianli.github.io/LISQM/projects/python-acoustics.html) (legacy) | Written in Python. `pip install acoustics` | older editions or unreleased code only |
| [SUAVE](https://zhenxianli.github.io/LISQM/projects/suave.html) (legacy) | Written in Python. | Perceived noise level and EPNL |

## MATLAB and Octave

| Project | How it is used | Current editions it implements |
|---|---|---|
| **[SQAT](https://zhenxianli.github.io/LISQM/projects/sqat.html)** | 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](https://zhenxianli.github.io/LISQM/projects/amt.html) | 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](https://zhenxianli.github.io/LISQM/projects/refmap-psychoacoustics.html) | 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](https://zhenxianli.github.io/LISQM/projects/aarae.html) | Written in MATLAB. | Zwicker loudness, Roughness (Daniel & Weber) |
| [iso532-3 (tv2018.m)](https://zhenxianli.github.io/LISQM/projects/js2251-iso532-3.html) (no licence) | Written in MATLAB. | Time-varying loudness (Moore–Glasberg–Schlittenlacher) |
| [ITA-Toolbox](https://zhenxianli.github.io/LISQM/projects/ita-toolbox.html) | 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](https://zhenxianli.github.io/LISQM/projects/fluctuation-strength-tue.html) (legacy, no licence) | Written in MATLAB. | Fluctuation strength (Osses et al.) |
| [HAW loudness tool](https://zhenxianli.github.io/LISQM/projects/haw-specific-loudness.html) (legacy) | Written in MATLAB. | older editions or unreleased code only |
| [IoSR Matlab Toolbox](https://zhenxianli.github.io/LISQM/projects/iosr-matlab-toolbox.html) (legacy) | Written in MATLAB. | older editions or unreleased code only |
| [PsySound3](https://zhenxianli.github.io/LISQM/projects/psysound3.html) (legacy, no licence) | Written in MATLAB. | Roughness (Daniel & Weber) |
| [Swift & Gee codes](https://zhenxianli.github.io/LISQM/projects/rapid-loudness-sharpness.html) (legacy) | Written in MATLAB. | older editions or unreleased code only |

## C and C++

| Project | How it is used | Current editions it implements |
|---|---|---|
| [PSYCHO](https://zhenxianli.github.io/LISQM/projects/pd-psycho.html) | Written in C. Objects for Pure Data: C externals built with pd-lib-builder, and Pd abstractions. | older editions or unreleased code only |
| [MetaSona](https://zhenxianli.github.io/LISQM/projects/metasona.html) (newly released) | Written in C; 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 |
| [iso532-1-rs](https://zhenxianli.github.io/LISQM/projects/iso532-1-rs.html) (newly released) | 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](https://zhenxianli.github.io/LISQM/projects/soundpalette.html) (newly released, 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](https://zhenxianli.github.io/LISQM/projects/deeuu-loudness.html) (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](https://zhenxianli.github.io/LISQM/projects/zwickerloudness-sourceforge.html) (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#

| Project | How it is used | Current editions it implements |
|---|---|---|
| [Mosqito.NET](https://zhenxianli.github.io/LISQM/projects/mosqito-net.html) (newly released) | 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

| Project | How it is used | Current editions it implements |
|---|---|---|
| [iso532-1-rs](https://zhenxianli.github.io/LISQM/projects/iso532-1-rs.html) (newly released) | 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](https://zhenxianli.github.io/LISQM/projects/kirin-hypha.html) (newly released) | 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](https://zhenxianli.github.io/LISQM/projects/zhen-ni-epnl.html) (legacy, no licence) | Written in Rust. | Perceived noise level and EPNL (partial) |

## Julia

| Project | How it is used | Current editions it implements |
|---|---|---|
| [PsychoacousticMetrics.jl](https://zhenxianli.github.io/LISQM/projects/psychoacousticmetrics-jl.html) (newly released) | 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](https://zhenxianli.github.io/LISQM/projects/zwickerloudness-jl.html) (newly released) | Written in Julia. `using Pkg; Pkg.add("ZwickerLoudness")` Takes one-third-octave band levels, not audio; ZwickerLoudnessAudio.jl adds that. | Zwicker loudness |

## Pure Data

| Project | How it is used | Current editions it implements |
|---|---|---|
| [PSYCHO](https://zhenxianli.github.io/LISQM/projects/pd-psycho.html) | 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

- MATLAB code from Python: the MATLAB Engine API for Python (https://www.mathworks.com/help/matlab/matlab-engine-for-python.html) runs MATLAB functions from Python and needs a MATLAB installation and licence. This is how 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 (https://pypi.org/project/oct2py/) runs GNU Octave functions from Python, without a MATLAB licence.
- Python packages from MATLAB: MATLAB can call Python libraries directly (https://www.mathworks.com/help/matlab/call-python-libraries.html), for example MoSQITo.
- C libraries from other languages: through ctypes or cffi in Python, ccall in Julia, or the foreign function interface of Rust and most other languages. MetaSona's Python package loads its C library this way, and iso532-1-rs has a C interface.
- Python from Julia: PythonCall.jl (https://github.com/JuliaPy/PythonCall.jl).
