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.ymlon a self-hosted runner with labels:self-hosted,linux,x64,cuda. - The workflow validates installation via
uv sync --group test, checkstorch.cuda.is_available(), runstests/test_device_parity.pywith-k cuda, and then tries to installgpuRIRfrom GitHub. - If
gpuRIRinstalls successfully, the workflow runstests/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 --plotexamples/dynamic_src.py: moving sources, fixed mics.
uv run python examples/dynamic_src.py --plotexamples/dynamic_mic.py: fixed sources, moving mics.
uv run python examples/dynamic_mic.py --plotexamples/cli.py: unified CLI for static/dynamic scenes, JSON/YAML configs.
uv run python examples/cli.py --mode static --plotexamples/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 2examples/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(Sceneis 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
- wav-specific:
- Metadata export:
torchrir.io.build_metadata,torchrir.io.save_metadata_json
Module Layout (for contributors)
torchrir.sim: simulation backends (ISM implementation lives undertorchrir.sim.ism)torchrir.signal: convolution utilities and dynamic convolvertorchrir.geometry: array geometries, sampling, trajectoriestorchrir.viz: plotting and animation helperstorchrir.models: room/scene/result data modelstorchrir.io: audio I/O and metadata serialization (*_wavfor wav-only,*_audiofor backend-supported formats)torchrir.util: shared math/tensor/device helperstorchrir.logging: logging utilitiestorchrir.config: simulation configuration objects
Design Notes
- Scene typing is explicit: use
StaticScenefor fixed geometry andDynamicScenefor trajectory-based simulation. DynamicSceneaccepts tensor-like trajectories (e.g., lists) and normalizes them to tensors internally.Sceneremains as a backward-compatibility wrapper and emitsDeprecationWarning.Scene.validate()performs validation without emitting additional deprecation warnings.ISMSimulatorfails fast whenmax_orderortmaxconflicts with the providedSimulationConfig.- Model dataclasses are frozen, but tensor payloads remain mutable (shallow immutability).
torchrir.load/torchrir.saveandtorchrir.io.load/save/infoare 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.RayTracingSimulatorwith 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb9c7844db95e2891d5c49f9106711082db85df84353182f718951d2a4aa60f6
|
|
| MD5 |
d279a0c63a3a169d6c9f8ea907be1042
|
|
| BLAKE2b-256 |
2d606969da6fad5caa405157ec7a5bf7b0184d728a69f334817795e28cd04a28
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d87aa22ac19257894d40cd8941d9605eb50cc2f9ae2f994c55edabec28f0689
|
|
| MD5 |
2ce78ddf76648d94f891d7ec248b3d58
|
|
| BLAKE2b-256 |
6da6bc6053caf33ae9295ef2c39540ee5fba8ecc656be31407454bea52c79e19
|