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

Library Comparison

Feature torchrir gpuRIR pyroomacoustics rir-generator
🎯 Dynamic Sources 🟡 Single moving source 🟡 Manual loop
🎤 Dynamic Microphones 🟡 Manual loop
🖥️ CPU
🧮 CUDA
🍎 MPS
📊 Scene Plot
🎞️ Dynamic Scene GIF 🟡 Manual animation script
🗂️ Dataset Build

Detailed notes and equations: Read the Docs: Library Comparisons

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
  • Scene models: StaticScene, DynamicScene (Scene is deprecated)
  • Static RIR: torchrir.sim.simulate_rir
  • Dynamic RIR: torchrir.sim.simulate_dynamic_rir
  • Simulator object: torchrir.sim.ISMSimulator(max_order=..., tmax=... | nsample=...)
  • Dynamic convolution: torchrir.signal.DynamicConvolver
  • Audio I/O:
    • wav-specific: torchrir.io.load_wav, torchrir.io.save_wav, torchrir.io.info_wav
    • backend-supported formats: torchrir.io.load_audio, torchrir.io.save_audio, torchrir.io.info_audio
    • metadata-preserving: torchrir.io.AudioData, torchrir.io.load_audio_data
  • 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 for wav-only, *_audio for backend-supported formats)
  • torchrir.util: shared math/tensor/device helpers
  • torchrir.logging: logging utilities
  • torchrir.config: simulation configuration objects

Design Notes

  • Scene typing is explicit: use StaticScene for fixed geometry and DynamicScene for trajectory-based simulation.
  • DynamicScene accepts tensor-like trajectories (e.g., lists) and normalizes them to tensors internally.
  • Scene remains as a backward-compatibility wrapper and emits DeprecationWarning.
  • Scene.validate() performs validation without emitting additional deprecation warnings.
  • ISMSimulator fails fast when max_order or tmax conflicts with the provided SimulationConfig.
  • Model dataclasses are frozen, but tensor payloads remain mutable (shallow immutability).
  • torchrir.load / torchrir.save and torchrir.io.load / save / info are deprecated compatibility aliases.
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: Read the Docs

Future Work

  • Ray tracing backend: implement torchrir.experimental.RayTracingSimulator with frequency-dependent absorption/scattering.
  • 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

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.3.tar.gz (57.1 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.3-py3-none-any.whl (67.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: torchrir-0.6.3.tar.gz
  • Upload date:
  • Size: 57.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3.tar.gz
Algorithm Hash digest
SHA256 eb9c7844db95e2891d5c49f9106711082db85df84353182f718951d2a4aa60f6
MD5 d279a0c63a3a169d6c9f8ea907be1042
BLAKE2b-256 2d606969da6fad5caa405157ec7a5bf7b0184d728a69f334817795e28cd04a28

See more details on using hashes here.

File details

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

File metadata

  • Download URL: torchrir-0.6.3-py3-none-any.whl
  • Upload date:
  • Size: 67.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0d87aa22ac19257894d40cd8941d9605eb50cc2f9ae2f994c55edabec28f0689
MD5 2ce78ddf76648d94f891d7ec248b3d58
BLAKE2b-256 6da6bc6053caf33ae9295ef2c39540ee5fba8ecc656be31407454bea52c79e19

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