A room-acoustics measurement instrument for Android. RT60, clarity, speech intelligibility, distortion and more — each reported with a calculated measurement uncertainty, referenced to ISO / IEC / ANSI / AES standards, and verified against analytical truth and real measured rooms.
Status — alpha (v0.7a). This is early, actively-developed software: expect rough edges and open bugs — for example, some USB audio interfaces are not yet reliably detected or driven. Every number it does report is referenced to a published standard and checked against closed-form theory and real measured rooms. What is not yet done — cross-validation against commercial analysers, and a few paywalled standard clauses — is listed openly in docs/LIMITATIONS.md and scheduled before v1.0.
AcoustiQ is a native Android app (Kotlin + Jetpack Compose) that runs a room-acoustics measurement and reports the standard parameters, each with a calculated uncertainty.
Use it with a USB audio interface and a measurement microphone — that is the recommended setup and the path AcoustiQ is designed for. Multi-channel, multi-format USB interfaces are supported (you pick which input channel to capture), and external speakers are selectable as the output; the input and output device names you selected are recorded on the result and in the exported PDF. The built-in phone speaker and mic work for a quick test, but are not the measurement path.
A frequency band whose signal-to-noise ratio or repeatability is too low is reported as
n/a rather than as a confident-but-wrong number.
AcoustiQ is built for audio engineers, AV integrators and acoustic consultants — and for researchers who want to inspect exactly how each number is produced. That is what this repository documents: the methods, the standards mapping, the uncertainty model, and the verification harness.
| Parameter | In plain terms | Referenced to |
|---|---|---|
| RT60 (T20 / T30) | how long sound takes to fade away (by 60 dB) | ISO 3382-1 / -2 |
| EDT (early decay time) | how reverberant the room feels | ISO 3382-1 |
| C50 / C80 (clarity) | balance of early vs late energy (speech / music) | ISO 3382-1 |
| D50 (definition) | % of energy in the first 50 ms (speech clarity) | ISO 3382-1 |
| Ts (centre time) | the "centre of gravity" in time of the sound energy | ISO 3382-1 |
| STI / STIPA | speech intelligibility (0–1) | IEC 60268-16 |
| SPL + A/C/Z weighting, noise floor | sound level and how quiet the room is | IEC 61672-1 |
| Coherence | how repeatable the measurement is, per frequency | Müller & Massarani (2001) |
| THD | speaker / amplifier distortion | Farina (2000) |
| Room modes | predicted bass resonances from room dimensions | rectangular eigenmodes |
| Room modes, non-rectangular rooms | predicted resonances for a room you draw, not just a rectangular box — a prediction from the drawn geometry, not a measured survey | 2D-prism FEM eigensolver |
| Frequency response + EQ | tonal balance and correction-filter suggestions | RBJ cookbook |
| Spatial average | a room average over several mic positions, with pooled uncertainty | ISO 3382-1 / GUM |
Capture modes: log-swept-sine (the reference), hand-clap, voice decay, STIPA, guided multi-position spatial averaging, modal decay, non-rectangular room modal analysis, stereo geometry, and device/microphone calibration. The non-rectangular modal analysis is a prediction computed from a room shape you draw — not a field-measured modal survey; it is validated against an independent solver on a rectangle only, and carries an element count and effective-frequency ceiling, detailed in docs/LIMITATIONS.md. Full detail in docs/METHODOLOGY.md.
Correctness rests on three independent legs (see docs/VERIFICATION.md):
- Closed-form analytical truth — synthetic impulse responses with mathematically known answers are run through the real pipeline and checked against theory.
- Independent reference oracles — 27 numpy/scipy generators re-derive the expected values from published formulae, by an implementation that does not share the production code's algebra, and the pipeline is pinned to them.
- Real measured rooms — seven published/measured impulse responses from six rooms (Pori, Detmold's Brahmssaal and SommerTheater halls, BRAS, York Minster, St Margaret's, Aachen) are validated against primary-source published room parameters, within an inter-method scatter on the order of ±5 %.
Plus a standards-conformance suite, a per-metric uncertainty model, and mutation testing and coverage floors on the DSP core.
| Document | What's in it |
|---|---|
| docs/ARCHITECTURE.md | The code map — packages, the end-to-end measurement pipeline, and the test architecture. |
| docs/METHODOLOGY.md | How each metric is computed — algorithm, standard, trust level. |
| docs/STANDARDS.md | The standards-conformance map and the citation trust legend. |
| docs/UNCERTAINTY.md | The GUM ± model: statistical (type-A) and hardware (type-B) terms. |
| docs/VERIFICATION.md | The verification harness and how to reproduce it. |
| docs/LIMITATIONS.md | Honest scope — what is not claimed, and the road to v1.0. |
Requirements: JDK 17, the Android SDK (compileSdk 35), and Android Studio or the bundled
Gradle wrapper.
./gradlew assembleDebug # debug APK -> app/build/outputs/apk/debug/Install on an Android 8.0+ (API 26) device and grant microphone permission. For real measurements, connect a USB audio interface with a measurement microphone (and an external speaker); the built-in phone speaker and mic are for quick testing only.
./gradlew testDebugUnitTest # full JVM unit + conformance + oracle suite
./gradlew testDebugUnitTest --rerun # clean tally (forces a full re-run of the test task)The real-room tests need impulse responses that are not bundled; see docs/VERIFICATION.md for the one-time fetch. Everything else runs offline.
- Pick the output (speaker) and input (microphone / interface channel).
- Optionally calibrate, so absolute SPL and corrected response are trustworthy.
- Pick a mode — Sweep is the most accurate.
- Set the room / use case (studio, hi-fi, lecture, worship, …).
- Start the measurement, keeping the room quiet.
- Read the result: each metric shows value ± uncertainty; ungated bands show
n/a. Export a PDF report or the session JSON for your records.
ISO 3382-1 / ISO 3382-2 · IEC 60268-16 · IEC 61260-1 · IEC 61672-1 · ANSI S1.11 · ANSI/ASA S12.2 · AES (Farina 2000; Olive/Welti Harman target) · ISO/IEC Guide 98-3 (GUM). The exact mapping, with an honest per-citation trust label, is in docs/STANDARDS.md.
AcoustiQ does not claim a specific IEC accuracy class, and cross-validation against commercial analysers (REW, SMAART, CLIO) is part of the road to v1.0. Read docs/LIMITATIONS.md before relying on a result for a critical decision.
If you use AcoustiQ in research, please cite it using CITATION.cff.
See CONTRIBUTING.md. Bug reports about a wrong measurement or a mis-stated citation are especially welcome.
Apache License 2.0. Third-party reference-data attributions are in NOTICE.