Skip to main content

MetaSona

Psychoacoustic metrics in C, with a typed Python interface.

MetaSona packages compiled C implementations in a Python wheel to reduce computation time for repeated psychoacoustic analysis, while keeping a simple NumPy interface. The speed comes from the native implementation; the wheel makes that implementation easy to install.

Function Calculates Unit
stationary_loudness Zwicker loudness from audio sone
loudness_from_levels Zwicker loudness from 28 third-octave levels sone
time_varying_loudness Zwicker loudness over time sone
roughness_daniel_weber Daniel–Weber roughness asper
tonality_aures Aures tonality dimensionless
sharpness_din45692 Sharpness from specific loudness acum
loudness_ecma ECMA-418-2:2025 loudness, including tonal/noise separation sone_HMS
roughness_ecma ECMA-418-2:2025 roughness asper_HMS
tonality_ecma ECMA-418-2:2025 psychoacoustic tonality tu_HMS

The current version is experimental, particularly roughness and tonality. Standards conformance has not been established.

The metrics draw on SQAT revision e6228b789fc9. Aures tonality uses 250 ms windows and 125 ms hops. MetaSona returns every complete frame with centre timestamps; see implementation credits and differences.

Computation time

Measured September 2026 with the SQAT-aligned MetaSona wheel. Median of five warmed calls for 10 s of 48 kHz audio (1 kHz carrier, 70 Hz AM plus noise, 60 dB SPL), Ryzen 9 5950X, Windows. MetaSona: MSVC Release; MoSQITo: 1.2.1; imports and audio I/O are excluded.

Metric MetaSona MoSQITo Speedup vs MoSQITo
Stationary loudness 0.090 s 0.220 s 2.4×
Time-varying loudness 0.233 s 17.092 s 73.5×
Roughness 1.448 s 22.754 s 15.7×
Aures tonality 0.572 s Not available —

These are workload timings; models and outputs differ. Native filtering and channel processing contribute to speed alongside FFTs; compiler and framing differences also affect timings.

Python

MetaSona requires Python 3.10–3.14. Install the published package from PyPI with pip:

python -m pip install metasona

Or add it to a uv project:

uv add metasona

Prebuilt wheels are published for Windows x64, Linux x64/ARM64, and macOS Intel/Apple silicon, so these installations do not require a C compiler.

To install from a source checkout instead, use python -m pip install . or uv add /path/to/metasona. Building from source requires a C11 compiler.

Pass calibrated pressure in pascals, not uncalibrated audio samples. The ECMA functions accept mono (samples,) or stereo (samples, 2) arrays; the other functions accept mono arrays. Python accepts integer sample rates from 8 to 192 kHz and resamples to 48 kHz when needed. Results include their units and read-only NumPy arrays.

For ECMA loudness and tonality together, use result = ms.ecma_tonal_analysis(pressure_pa, fs) and read result.loudness and result.tonality. Loudness/tonality require at least 304 ms of audio; roughness requires 320 ms. Representative values exclude the initial filter transient. ECMA loudness implements Section 8, whereas MoSQITo's loudness_ecma implements the Section 5 basis calculation. ECMA roughness does not apply the optional entropy weighting. Function and result-class docstrings describe output shapes, units, timing and binaural combination.

import numpy as np
import metasona as ms

# One second of a 1 kHz tone at 60 dB SPL (0.02 Pa RMS).
fs = 48_000
t = np.arange(fs) / fs
pressure_pa = np.sqrt(2) * 0.02 * np.sin(2 * np.pi * 1_000 * t)

loudness = ms.stationary_loudness(pressure_pa, fs, sound_field="free")
sharpness = ms.sharpness_din45692(loudness.specific_loudness_sone_per_bark)

print(f"Loudness: {loudness.loudness_sone:.3f} sone")
print(f"Sharpness: {sharpness.sharpness_acum:.3f} acum")

See the Python API and complete example.

C library

Requires CMake 3.21 or newer and a C11 compiler:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release
cmake --install build --config Release --prefix install

Include <metasona/metasona.h> and link the installed CMake target MetaSona::metasona. Native signal functions require 48 kHz input. Use -DMS_BUILD_SHARED=OFF for a static library.

See the C API and C example.

License and credits

GPL-3.0 for the combined distribution, with retained Apache-2.0, BSD-3-Clause and MIT component notices. See third-party credits.

Acknowledgements

Developed by Jiahua Zhang with assistance from OpenAI Codex.

Developed during PhD research within the METAVISION MSCA Doctoral Network.

The European Commission is gratefully acknowledged for their support of the Horizon Europe DN METAVISION project (GA 101072415). Views and opinions expressed are however those of the authors only and do not necessarily reflect those of the European Union. The European Union cannot be held responsible for them.

Release files for metasona 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for metasona 0.2.0
File Size Uploaded
metasona-0.2.0.tar.gz 97.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for metasona 0.2.0
File
metasona-0.2.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
metasona-0.2.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
metasona-0.2.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
metasona-0.2.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
metasona-0.2.0-py3-none-macosx_10_9_x86_64.whl Python 3 none macOS 10.9+ x86-64 Details

Total release size: 930.7 kB

Release files / metasona-0.2.0.tar.gz

Download URL metasona-0.2.0.tar.gz
Size 97.0 kB
Tags Source
SHA-256 checksum
How to use checksums
f3dd6f77437a26db8d9a8b5eca06f86791f809280984f2af8fb7eff6a8014a15
BLAKE2b-256 checksum
How to use checksums
902331e42d2cd93714294b4c0a2bac3000ddbf9e021c726962a4e2bccb7f9ad8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / metasona-0.2.0-py3-none-win_amd64.whl

Download URL metasona-0.2.0-py3-none-win_amd64.whl
Size 166.9 kB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
b2dbb10534d37be3559b78c966f3e5c6723288fc6b22fb8b89307510f5d05234
BLAKE2b-256 checksum
How to use checksums
0f9b99560b2af1b02d350cfcca474674bb1e7626c99bfcf24b68a4fbdf50582f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / metasona-0.2.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL metasona-0.2.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 159.3 kB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
8ae353e6b4b53074c98539430e7b45a8ad6f503ca1cb8ce8bead3d06a3d13722
BLAKE2b-256 checksum
How to use checksums
0833c11deedfd0dab62aa3926f4f7ee9d6e33f294a7a3c7c4f9cc8affec4e528
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / metasona-0.2.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL metasona-0.2.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 156.2 kB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
2446fba248f9d9d7061416567d8f2b9b33b26e3bab210f9171daa11a6355a727
BLAKE2b-256 checksum
How to use checksums
e280e968ac11878b10e389d40f4bde50289176aaf879dddbbce0a27c32b32d61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / metasona-0.2.0-py3-none-macosx_11_0_arm64.whl

Download URL metasona-0.2.0-py3-none-macosx_11_0_arm64.whl
Size 167.2 kB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3e761a277cf0aae191f5e5ca467027f37333121aec3db1b57033e5336115610c
BLAKE2b-256 checksum
How to use checksums
aef2bd5f6ee0687b387b738d4ec1dd0c8f987c13ce725420da285571b3c9c6f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / metasona-0.2.0-py3-none-macosx_10_9_x86_64.whl

Download URL metasona-0.2.0-py3-none-macosx_10_9_x86_64.whl
Size 184.0 kB
Tags Python 3 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
bf47543c186505cd4be073b44c68b407cf55811e4d199039baecc96ef4821c45
BLAKE2b-256 checksum
How to use checksums
7776fa78d03d8d245de353a7a50fa0cfc0b2d54013dadf545ed8376e1b7a0cf0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.2

6 release files

0.2.1

6 release files

This release

0.2.0 This release

6 release files

0.1.1

6 release files

0.1.0

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page