Skip to main content

Ambiscape

CI docs PyPI version Python License: MIT

Ambiscape is a toolbox for analysing soundscapes, with a particular focus on the sonic ambiences of rooms. It takes a holistic view, bringing together measurements of level, spectral, spatial, temporal, ecological, and source-domain descriptors so a place's sound can be described as a whole rather than one metric at a time.

The toolbox works from many different types of recordings: mono, stereo, binaural, or first-order ambisonic, using whatever spatial information each format carries (see Mono, stereo & binaural inputs). It is built to be useful to different people: acousticians and soundscape ecologists, sound artists and composers, students, and anyone curious about the sound of a place.

Scope: ambiscape and MGT

ambiscape and MGT-python are sister toolboxes: ambiscape owns the samples, MGT owns the pixels. The built-in vision module extracts only lightweight per-frame features as a multimodal companion to the audio; for real video analysis (motion, pose, 360° stitching) use MGT, which can ingest ambiscape sessions directly via pip install "musicalgestures[soundscape]". ambiscape itself stays dependency-light and never imports MGT.

Install

pip install ambiscape            # core
pip install "ambiscape[iso]"     # + ISO 532-1 loudness/sharpness/roughness
pip install "ambiscape[ml]"      # + AudioSet tagging, speech privacy gate
pip install "ambiscape[viz]"     # + ambiviz (HRIR binaural, AEM visuals)

Quickstart

ambiscape probe      <session-folder>   # metadata
ambiscape analyze    <session-folder>   # features, descriptors, figures, README
ambiscape draft      <session-folder>   # pre-fill taxonomy annotations
ambiscape taxonomy   <session-folder>   # Schaeffer map + Schafer timeline
ambiscape rhythm     <session-folder>   # strike-level rhythm of periodic sources
ambiscape modspec    <session-folder>   # micro/meso/macro modulation profile
ambiscape tonality   <session-folder>   # tonal tracks, harmonicity, pitch classes
ambiscape spatial    <session-folder>   # direct/diffuse split, pass-bys, azimuth R(t)
ambiscape schedule   <session-folder>   # match events against civic time grids
ambiscape timbre     <session-folder>   # event timbre templates (no-ML clustering)
ambiscape music      <session-folder>   # librosa tempogram + chromagram [music]
ambiscape background <session-folder>   # background-only bed render, or --excerpt: a characteristic minute
ambiscape loop       <session-folder>   # seamlessly loopable prototype segment (typical, not just calm)
ambiscape resynth    <session-folder>   # recreate the soundscape from basic synthesis models (Web Audio page)
ambiscape carillon   <session-folder>   # which bells a carillon played: strike-note inventory [music]
ambiscape vision     <video-or-folder>  # per-frame visual features (multimodal companion)
ambiscape iso        <session-folder>   # ISO 12913-3 indicators
ambiscape calibrate  <session-folder>   # store dBFS->dB SPL offset from a field SPL reading
ambiscape speechgate <wav-or-folder>    # privacy check before publishing
ambiscape deposit    <session-folder>   # non-identifying 1 Hz TSV export
ambiscape resolve    <session-folder>   # per-state descriptors (on/off, day/night)
ambiscape catalog    <corpus-folder>    # aggregate all summary.json -> CSV
ambiscape longitudinal <corpus-folder>  # trend + seasonal over dated sessions
ambiscape scenes     <folder>           # analyze each WAV as an independent scene
ambiscape capture    <root>             # always-on feature-extraction daemon [capture]

A session is a folder of WAVs on one absolute clock (BWF timestamps, parsed natively); a single one-off recording opens as its own scene with open_recording(path). analyze produces a per-session README.md with a descriptor table (Leq, LAeq, L10/L50/L90, events, diffuseness ψ, azimuthal concentration R, …) and overview figures (level + spectrogram + anglegram + ψ timeline, percentile spectra, directogram).

In notebooks

Everything the CLI does is a library call. From version 0.3 there has been a notebook-oriented case-study toolbox — machine on/off states, source fingerprints, civic-grid scans, bit-exact segment export:

import ambiscape as asc
from ambiscape import background, features, schedule, states

sess = asc.open_session("2026-07-15-Haarlem-loft")
F = features.load_features(
    features.extract_session(sess, "analysis/features"))

segs = states.state_segments(states.band_level(F, (250, 1000)))  # vent on/off
fp = background.source_fingerprint(F, night_minutes, morning_minutes)
bells = schedule.grid_scan(F, 900.0, band=(350, 800))            # church clock
asc.export_segment(sess, t0, 600.0, "seg6_vent_switchoff.wav")

from ambiscape import enf                       # v0.4: grid-frequency traces
enf.enf_summary(enf.enf_track(sess))            # mains ENF wander, mHz-level

from ambiscape import ecology, iso              # v0.5: ratings & indices
ecology.indices(F)                              # ACI, ADI/AEI, NDSI, BI, H
iso.room_criteria(iso.background_octaves_db(F)) # NR / NC / RC (HVAC idiom)
asc.decay_metrics(x[:, 0], fs)                  # T60 + EDT, C50/C80, D50

from ambiscape import biophony, ml              # v0.6: nature & animals
biophony.summarize_biophony(F)                  # narrowband/temporal/spatial
ml.birdnet_session(sess, F=F, hifi_max_diffuse=0.75, lat=52.4, lon=4.6)

See the machine-states guide and the executable session report it was built for.

Documentation

  • User guide & API reference — the session model and conventions, feature/descriptor definitions, room acoustics and ISO indicators, the taxonomy workflow, machine listening, deposit export.
  • Wiki — research context, field-recording protocol, design decisions, recipes, roadmap.

Dependencies

License

MIT — see LICENSE.

Funding

Developed as part of the AMBIENT project at fourMs / RITMO, University of Oslo. Supported by the Research Council of Norway.

Related toolboxes

These four toolboxes come out of the fourMs lab at the University of Oslo. They are separate packages with separate release cycles, but they are built to be used together and share several implementations, so a measure computed in one agrees with the same measure computed in another.

  • Musical Gestures Toolbox (musicalgestures) — video and audio: motiongrams, videograms, and motion analysis from ordinary video files
  • musiscape — music collections: comparing many tracks and albums held as audio files in folders
  • micromotion — human micromotion: quantity of motion from optical markers, accelerometers, respiration belts and force plates

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ambiscape-0.22.0.tar.gz (170.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ambiscape-0.22.0-py3-none-any.whl (156.5 kB view details)

Uploaded Python 3

File details

Details for the file ambiscape-0.22.0.tar.gz.

File metadata

  • Download URL: ambiscape-0.22.0.tar.gz
  • Upload date:
  • Size: 170.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ambiscape-0.22.0.tar.gz
Algorithm Hash digest
SHA256 4ab7308f212eca2033220b71a1eb51dbb9e6d936e1cf4e43fed6c061afe17d3c
MD5 68e00fe13b2319d6a81775d670871da0
BLAKE2b-256 743a83d027df5d326c266ad7ff7ff1d5c58b308b7dc7053307d848e71461a055

See more details on using hashes here.

Provenance

The following attestation bundles were made for ambiscape-0.22.0.tar.gz:

Publisher: python-publish.yml on fourMs/ambiscape

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ambiscape-0.22.0-py3-none-any.whl.

File metadata

  • Download URL: ambiscape-0.22.0-py3-none-any.whl
  • Upload date:
  • Size: 156.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ambiscape-0.22.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d18dba9ce9fd140af33bf83451c950efd7813216d925564acb8ccba93f43f8f6
MD5 ab2d37c0dba180e183e3588995801127
BLAKE2b-256 f761cd631392c5c29099a32253dfb6668cc956f65cbb4f893d6ff4722eb05ae0

See more details on using hashes here.

Provenance

The following attestation bundles were made for ambiscape-0.22.0-py3-none-any.whl:

Publisher: python-publish.yml on fourMs/ambiscape

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.49.0

2 files

0.48.0

2 files

0.47.0

2 files

0.46.0

2 files

0.45.0

2 files

0.44.0

2 files

0.43.0

2 files

0.42.0

2 files

0.41.0

2 files

0.40.0

2 files

0.39.0

2 files

0.38.0

2 files

0.37.0

2 files

0.36.0

2 files

0.35.0

2 files

0.34.0

2 files

0.33.0

2 files

0.32.0

2 files

0.31.0

2 files

0.30.0

2 files

0.29.0

2 files

0.28.1

2 files

0.28.0

2 files

0.27.0

2 files

0.26.0

2 files

0.25.0

2 files

0.24.1

2 files

0.24.0

2 files

0.23.3

2 files

0.23.2

2 files

This release

0.22.0 This release

2 files

0.17.0

2 files

0.16.0

2 files

0.15.1

2 files

0.15.0

2 files

0.14.0

2 files

0.2.0

2 files

0.1.0

2 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