Skip to main content

PyTorch-based room impulse response (RIR) simulation toolkit for static and dynamic scenes.

Project description

TorchRIR

PyTorch-based room impulse response (RIR) simulation toolkit focused on a clean, modern API with GPU support. This project has been substantially assisted by AI using Codex.

[!WARNING] TorchRIR is under active development and may contain bugs or breaking changes. Please validate results for your use case. If you find bugs or have feature requests, please open an issue. Contributions are welcome.

Installation

pip install torchrir

CUDA CI (GitHub Actions)

  • CUDA tests run in .github/workflows/cuda-ci.yml on a self-hosted runner with labels: self-hosted, linux, x64, cuda.
  • The workflow validates installation via uv sync --group test, checks torch.cuda.is_available(), runs tests/test_device_parity.py with -k cuda, and then tries to install gpuRIR from GitHub.
  • If gpuRIR installs successfully, the workflow runs tests/test_compare_gpurir.py (static + dynamic RIR comparisons). If installation fails, those comparison tests are skipped without failing the whole CUDA CI job.

Examples

  • examples/static.py: fixed sources/mics with configurable mic count (default: binaural).
    uv run python examples/static.py --plot
  • examples/dynamic_src.py: moving sources, fixed mics.
    uv run python examples/dynamic_src.py --plot
  • examples/dynamic_mic.py: fixed sources, moving mics.
    uv run python examples/dynamic_mic.py --plot
  • examples/cli.py: unified CLI for static/dynamic scenes, JSON/YAML configs.
    uv run python examples/cli.py --mode static --plot
  • examples/build_dynamic_dataset.py: small dynamic dataset generator (CMU ARCTIC / LibriSpeech; fixed room/mics, randomized source motion).
    uv run python examples/build_dynamic_dataset.py --dataset cmu_arctic --num-scenes 4 --num-sources 2
  • examples/benchmark_device.py: CPU/GPU benchmark for RIR simulation.
    uv run python examples/benchmark_device.py --dynamic

Core API Overview

  • Geometry: Room, Source, MicrophoneArray
  • Static RIR: torchrir.sim.simulate_rir
  • Dynamic RIR: torchrir.sim.simulate_dynamic_rir
  • Dynamic convolution: torchrir.signal.DynamicConvolver
  • Metadata export: torchrir.io.build_metadata, torchrir.io.save_metadata_json

Module Layout (for contributors)

  • torchrir.sim: simulation backends (ISM implementation lives under torchrir.sim.ism)
  • torchrir.signal: convolution utilities and dynamic convolver
  • torchrir.geometry: array geometries, sampling, trajectories
  • torchrir.viz: plotting and animation helpers
  • torchrir.models: room/scene/result data models
  • torchrir.io: audio I/O and metadata serialization (wav-only load/save/info with backend selection)
  • torchrir.util: shared math/tensor/device helpers
  • torchrir.logging: logging utilities
  • torchrir.config: simulation configuration objects
from torchrir import MicrophoneArray, Room, Source
from torchrir.sim import simulate_rir
from torchrir.signal import DynamicConvolver

room = Room.shoebox(size=[6.0, 4.0, 3.0], fs=16000, beta=[0.9] * 6)
sources = Source.from_positions([[1.0, 2.0, 1.5]])
mics = MicrophoneArray.from_positions([[2.0, 2.0, 1.5]])

rir = simulate_rir(room=room, sources=sources, mics=mics, max_order=6, tmax=0.3)
# For dynamic scenes, compute rirs with torchrir.sim.simulate_dynamic_rir and convolve:
# y = DynamicConvolver(mode="trajectory").convolve(signal, rirs)

For detailed documentation, see the docs under docs/ and Read the Docs.

Future Work

  • Ray tracing backend: implement torchrir.experimental.RayTracingSimulator with frequency-dependent absorption/scattering.
  • CUDA-native acceleration: introduce dedicated CUDA kernels for large-scale RIR generation.
  • Dataset expansion: add additional dataset integrations beyond CMU ARCTIC (see torchrir.experimental.TemplateDataset), including torchaudio datasets (e.g., LibriSpeech, VCTK, LibriTTS, SpeechCommands, CommonVoice, GTZAN, MUSDB-HQ).

Related Libraries

Related Library Comparison (Quick View)

Dynamic Simulation

Feature torchrir gpuRIR pyroomacoustics rir-generator
🎯 Dynamic Sources 🟡 Single-source workflow 🟡 Manual loop
🎤 Dynamic Microphones 🟡 Manual loop
🖥️ CPU
🧮 CUDA 🚧 Coming soon
🍎 MPS
📊 Visualization
🗂️ Dataset Build 🟡 Custom scripts

ISM HPF (RIR High-Pass Filter)

Library Built-in HPF Method
torchrir IIR, zero-phase
gpuRIR No built-in HPF
rir-generator Allen & Berkley-style recursive HPF
pyroomacoustics IIR, zero-phase

ISM Amplitude Scaling (Image-Source Gain)

Library Typical distance scaling Notes
torchrir 1/r Reflection/directivity gains are multiplied, then divided by distance.
gpuRIR 1/(4πr) Includes explicit free-field factor in image-source amplitude.
rir-generator 1/(4πr) Core implementation follows free-field normalization.
pyroomacoustics Usually 1/r in room ISM path The build_rir_matrix path uses 1/(4πr), so scaling depends on API path.

When comparing raw waveform amplitudes across libraries, a near-constant factor of about can appear between 1/r and 1/(4πr) conventions.

Legend:

  • native support
  • 🟡 manual setup
  • 🚧 coming soon
  • unavailable

Detailed notes and equations: docs/comparisons.md.

Project details


Download files

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

Source Distribution

torchrir-0.6.0.tar.gz (52.7 kB view details)

Uploaded Source

Built Distribution

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

torchrir-0.6.0-py3-none-any.whl (63.4 kB view details)

Uploaded Python 3

File details

Details for the file torchrir-0.6.0.tar.gz.

File metadata

  • Download URL: torchrir-0.6.0.tar.gz
  • Upload date:
  • Size: 52.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.1 {"installer":{"name":"uv","version":"0.10.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for torchrir-0.6.0.tar.gz
Algorithm Hash digest
SHA256 71afbbaf7838bd67b646fd93020b4986b96b280897f42dfd0e7d0cf01dc18881
MD5 047500d069a047e5524737fbf4c90284
BLAKE2b-256 875133e5125b9df1f2fefdb9fd5a01577ce7f8b9722d5a85fa2d7d9a9c244dae

See more details on using hashes here.

File details

Details for the file torchrir-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: torchrir-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 63.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.1 {"installer":{"name":"uv","version":"0.10.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for torchrir-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5d01bc9e13869290d3d450a8cb58257303fc50423aa10cc74ef56e2503447c61
MD5 3a1e23db620e307cf92f0b732d67c642
BLAKE2b-256 102a987adb5a53c2734528ee8e8adc6a8bff4afb199a2dfb08fe3bc8025035dd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page