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 Sharpness

Sharpness (DIN 45692, Aures, von Bismarck)

Sharpness is the weighted first moment of specific loudness along the critical-band rate, with a weighting that emphasises high frequencies. DIN 45692:2009 standardises the weighting and a test procedure, using Zwicker specific loudness (ISO 532-1 / DIN 45631). Most implementations also offer the weightings of von Bismarck (1974) and Aures (1985).

The current edition is DIN 45692:2009. Open-source implementations of it:

Earlier editions or related models: AARAE (MATLAB; Fastl & Zwicker (2007); from the specific loudness of LoudnessCF) and Swift & Gee codes (MATLAB; legacy, no commit since 2020-01; Swift & Gee (2017); from Moore–Glasberg specific loudness, stationary and time-varying).

Editions and who implements them

DateEditionStatusWhat changedImplemented by
2017Swift & Gee (2017)published—Swift & Gee codes legacy
2009-08DIN 45692:2009currentStandardised weighting and test procedure; no revision announced.SQAT, MoSQITo, refmap-psychoacoustics, MetaSona new, Kirin Hypha new, Mosqito.NET new, phonometry new, PsychoacousticMetrics.jl new, SoundPalette new, pySQAT developing, PsychoacousticParametersMeasurer legacy
2007Fastl & Zwicker (2007)publishedZwicker & Fastl weighting as given in the textbook.AARAE
1985Aures (1985b)publishedWeighting that depends on total loudness.—
1974von Bismarck (1974)publishedOriginal sharpness weighting.—

Project map

The project map, with only the lines for sharpness 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 Sharpness Swift & Gee codes: MATLAB m   Swift & Gee codes PsychoacousticParametersMeasurer: Python py   PsychoacousticParametersMeasurer phonometry: Python py   phonometry MetaSona: C, Python c   MetaSona AARAE: MATLAB m   AARAE no relation recorded MoSQITo: Python py   MoSQITo Kirin Hypha: Rust rs   Kirin Hypha Ported or adapted: MoSQITo to Kirin Hypha, for DIN 45692:2009 Mosqito.NET: C# c#   Mosqito.NET Ported or adapted: MoSQITo to Mosqito.NET, for DIN 45692:2009 rota-order: Python py   rota-order Used at run time: rota-order calls MoSQITo for DIN 45692:2009 PsychoBox: Python py   PsychoBox Used at run time: PsychoBox calls MoSQITo for DIN 45692:2009 Soundscapy: Python py   Soundscapy Used at run time: Soundscapy calls MoSQITo for DIN 45692:2009 PsychoacousticMetrics.jl: Julia jl   PsychoacousticMetrics.jl Results checked: PsychoacousticMetrics.jl against MoSQITo, for DIN 45692:2009 SoundPalette: C++ c++   SoundPalette Results checked: SoundPalette against MoSQITo, for DIN 45692:2009 SQAT: MATLAB m   SQAT pySQAT: Python py   pySQAT Ported or adapted: SQAT to pySQAT, for DIN 45692:2009 Used at run time: rota-order calls SQAT for DIN 45692:2009 refmap-psychoacoustics: MATLAB, Python m   refmap-psychoacoustics Same contributor: SQAT and refmap-psychoacoustics (Mike Lotinga)

Implementations

ProjectEditionFunctionsValidation (as stated)Notes
SQAT
MATLAB
DIN 45692:2009
DIN 45692 weighting, plus von Bismarck and Aures options; since v1.0
Sharpness_DIN45692, Sharpness_DIN45692_from_loudness, Sharpness_DIN45692_from_wavfilestandard or paper data—
MoSQITo
Python
DIN 45692:2009
weightings: DIN 45692, Aures, von Bismarck, Fastl; since 1.0.2
sharpness_din_st, sharpness_din_tv, sharpness_din_perseg, sharpness_din_from_loudness, sharpness_din_freqstandard or paper data
(outcome not stated)
—
refmap-psychoacoustics
MATLAB Python
DIN 45692:2009
DIN 45692 weighting applied to ECMA-418-2 loudness
acousticSharpnessSHM, acousticSharpFromSHMLoudnot statedThe DIN 45692 weighting is the option widmann; Aures (the default) and von Bismarck weightings are also offered. DIN 45692 itself is defined on Zwicker specific loudness. A further variant works from a Zwicker-based quasi-loudness (acousticSharpFromQuasiLoud). An inaccuracy in the Aures weighting was fixed on 2026-09-18.
AARAE
MATLAB
Fastl & Zwicker (2007)
from the specific loudness of LoudnessCF
sharpness_Fastlnot statedThe header describes a weighting fitted to data in Zwicker & Fastl's Psychoacoustics: Facts and Models (edition not stated), names the method "Fastl (1991)" and credits Claire Churchill (2004).
MetaSona
C Python
DIN 45692:2009
from specific loudness; since 0.1.0
sharpness_din45692not statednew
Kirin Hypha
Rust
DIN 45692:2009
from the time-varying specific loudness; shown in the plug-in; since 1.0.0
kirin_measure::phase_d::sharpnesscompared with MoSQITo (its source)new
Mosqito.NET
C#
DIN 45692:2009
weightings: DIN 45692, Aures, von Bismarck, Fastl
Sq.SharpnessDinSt, Sq.SharpnessDinTv, Sq.SharpnessDinPerSeg, Sq.SharpnessDinFreqcompared with MoSQITo (its source)new
phonometry
Python
DIN 45692:2009
also the informative Aures and von Bismarck variants; since 3.1.0
sharpness_din, sharpness_din_from_specificstandard or paper datanew
PsychoacousticMetrics.jl
Julia
DIN 45692:2009
weightings: DIN 45692 (default), Aures, von Bismarck, Fastl; from a ZwickerLoudness.jl result; since 0.2.0
sharpnessstandard or paper data
also compared with MoSQITo
new Uses ZwickerLoudness.jl.
SoundPalette
C++
DIN 45692:2009
from time-averaged specific loudness; since v0.5.0
sp::compute_psychocompared with MoSQITonew source-available
pySQAT
Python
DIN 45692:2009Sharpness_DIN45692, Sharpness_DIN45692_from_loudnesscompared with SQAT (its source)developing no licence
Swift & Gee codes
MATLAB
Swift & Gee (2017)
from Moore–Glasberg specific loudness, stationary and time-varying
stationaryLoudness, Glasberg_loudnessnot statedlegacy
PsychoacousticParametersMeasurer
Python
DIN 45692:2009calc_sharpnessnot statedlegacy no licence The file header says "Sharpness DIN 45692"; the function also returns the von Bismarck and Aures variants.

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, DIN 45692:2009), PsychoBox (via MoSQITo, DIN 45692:2009), and Soundscapy (via MoSQITo, DIN 45692:2009).

See also: Zwicker loudness (ISO 532-1, DIN 45631).

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 · DIN 45692:2009

standard or paper data

  • Checked with the narrowband and broadband test signals of DIN 45692.
MoSQITo · DIN 45692:2009

standard or paper data (outcome not stated)

  • Validation scripts use the DIN 45692 test signals; the documentation marks it as validated.
Kirin Hypha new · DIN 45692:2009

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 agreement with MoSQITo within 0.05 acum.
Mosqito.NET new · DIN 45692:2009

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.

  • 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); MoSQITo's unit tests are ported too.
phonometry new · DIN 45692:2009

standard or paper data

  • Checked with the DIN 45692 reference signal and Tables A.2 and A.3.
PsychoacousticMetrics.jl new · DIN 45692:2009

standard or paper data also compared with MoSQITo

  • Tested against all 41 reference signals of DIN 45692:2009 chapter 6 (21 narrowband, 20 broadband) within the standard's tolerance of ±max(5 %, 0.05 acum).
  • Cross-checked against MoSQITo for all four weightings.
  • Total loudness N is computed as the Riemann sum over the 240-bin specific loudness (0.1 * sum), not taken from ZwickerResult.loudness (see the sharpness docstring).
SoundPalette new · DIN 45692:2009

compared with MoSQITo

  • Compared with MoSQITo 1.2.1 (tolerance ±5 %).
rota-order new via MoSQITo · DIN 45692:2009 (through MoSQITo's sharpness_din_from_loudness)

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, also when the sharpness is computed from an earlier loudness result.
rota-order new via SQAT · DIN 45692:2009 (through SQAT v2.0's Sharpness_DIN45692_from_loudness 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 · DIN 45692:2009

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.

Not stated by refmap-psychoacoustics, AARAE, MetaSona, Swift & Gee codes, PsychoacousticParametersMeasurer, 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.
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.
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.
Swift & Gee codes legacy
  • The code works at 32 kHz; other rates are resampled with the Signal Processing Toolbox's resample.

References

  1. von Bismarck, G. (1974). Sharpness as an attribute of the timbre of steady sounds. Acustica, 30(3), 159–172. https://www.ingentaconnect.com/contentone/dav/aaua/1974/00000030/00000003/art00006
  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.
  3. Fastl, H., & Zwicker, E. (2007). Psychoacoustics: Facts and models (3rd ed.). Springer. https://doi.org/10.1007/978-3-540-68888-4
  4. DIN 45692:2009. Messtechnische Simulation der Hörempfindung Schärfe (Measurement technique for the simulation of the auditory sensation of sharpness). https://www.dinmedia.de/en/standard/din-45692/117635111
  5. Swift, S. H., & Gee, K. L. (2017). Extending sharpness calculation for an alternative loudness metric input. The Journal of the Acoustical Society of America, 142(6), EL549. https://doi.org/10.1121/1.5016193

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