Add your description here
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.
License
Apache-2.0. See LICENSE and NOTICE.
Example Usage
# CMU ARCTIC + static RIR (fixed sources/mics)
uv run python examples/static.py --plot
# Dynamic RIR demos
uv run python examples/dynamic_mic.py --plot
uv run python examples/dynamic_src.py --plot
# Unified CLI
uv run python examples/cli.py --mode static --plot
uv run python examples/cli.py --mode dynamic_mic --plot
uv run python examples/cli.py --mode dynamic_src --plot
# Config + deterministic
uv run python examples/cli.py --mode static --deterministic --seed 123 --config-out outputs/cli.json
uv run python examples/cli.py --config-in outputs/cli.json
YAML configs are supported when PyYAML is installed.
# YAML config
uv run python examples/cli.py --mode static --config-out outputs/cli.yaml
uv run python examples/cli.py --config-in outputs/cli.yaml
examples/cli_example.yaml provides a ready-to-use template.
from torchrir import DynamicConvolver
# Trajectory-mode dynamic convolution
y = DynamicConvolver(mode="trajectory").convolve(signal, rirs)
# Hop-mode dynamic convolution
y = DynamicConvolver(mode="hop", hop=1024).convolve(signal, rirs)
Dynamic convolution is exposed via DynamicConvolver only (no legacy function wrappers).
Dataset-agnostic utilities
from torchrir import (
CmuArcticDataset,
binaural_mic_positions,
clamp_positions,
load_dataset_sources,
sample_positions,
)
def dataset_factory(speaker: str | None):
spk = speaker or "bdl"
return CmuArcticDataset("datasets/cmu_arctic", speaker=spk, download=True)
signals, fs, info = load_dataset_sources(
dataset_factory=dataset_factory,
num_sources=2,
duration_s=10.0,
rng=random.Random(0),
)
Dataset template (for future extension)
TemplateDataset provides a minimal stub to implement new datasets later.
Logging
from torchrir import LoggingConfig, get_logger, setup_logging
setup_logging(LoggingConfig(level="INFO"))
logger = get_logger("examples")
logger.info("running torchrir example")
Scene container
from torchrir import Scene
scene = Scene(room=room, sources=sources, mics=mics, src_traj=src_traj, mic_traj=mic_traj)
scene.validate()
Immutable geometry helpers
Room, Source, and MicrophoneArray are immutable; use .replace() to update fields.
Result container
from torchrir import RIRResult
result = RIRResult(rirs=rirs, scene=scene, config=config)
Simulation strategies
from torchrir import ISMSimulator
sim = ISMSimulator()
result = sim.simulate(scene, config)
Device Selection
device="cpu": CPU executiondevice="cuda": NVIDIA GPU (CUDA) if available, otherwise fallback to CPUdevice="mps": Apple Silicon GPU via Metal (MPS) if available, otherwise fallback to CPUdevice="auto": prefer CUDA → MPS → CPU
from torchrir import DeviceSpec
device, dtype = DeviceSpec(device="auto").resolve()
References
Specification (Current)
Purpose
- Provide room impulse response (RIR) simulation on PyTorch with CPU/CUDA/MPS support.
- Support static and dynamic scenes with a maintainable, modern API.
Room Model
- Shoebox (rectangular) room model.
- 2D or 3D.
- Image Source Method (ISM) implementation.
Inputs
Scene Geometry
- Room size:
[Lx, Ly, Lz](2D uses[Lx, Ly]). - Source positions:
(n_src, dim). - Microphone positions:
(n_mic, dim). - Reflection order:
max_order.
Acoustic Parameters
- Sample rate:
fs. - Speed of sound:
c(default 343.0 m/s). - Wall reflection coefficients:
beta(4 faces for 2D, 6 for 3D) ort60(Sabine).
Output Length
- Specify
nsample(samples) ortmax(seconds).
Directivity
- Patterns:
omni,cardioid,hypercardioid,subcardioid,bidir. - Orientation specified by vector or angles.
Configuration
SimulationConfigcontrols algorithm settings (e.g., max_order, tmax, directivity, device, seed, fractional delay length, LUT, chunk sizes, compile path).- Passed explicitly via
simulate_rir(..., config=...)orsimulate_dynamic_rir(..., config=...).
Outputs
- Static RIR shape:
(n_src, n_mic, nsample). - Dynamic RIR shape:
(T, n_src, n_mic, nsample). - Preserves dtype/device.
Core APIs
Static RIR
room = Room.shoebox(size=[6.0, 4.0, 3.0], fs=16000, beta=[0.9] * 6)
sources = Source.positions([[1.0, 2.0, 1.5], [4.5, 1.0, 1.2]])
mics = MicrophoneArray.positions([[2.0, 2.0, 1.5], [3.0, 2.0, 1.5]])
rir = simulate_rir(
room=room,
sources=sources,
mics=mics,
max_order=8,
tmax=0.4,
directivity="omni",
device="auto",
)
Dynamic RIRs + Convolution
rirs = simulate_dynamic_rir(
room=room,
src_traj=src_traj, # (T, n_src, dim)
mic_traj=mic_traj, # (T, n_mic, dim)
max_order=8,
tmax=0.4,
device="auto",
)
y = DynamicConvolver(mode="trajectory").convolve(signal, rirs)
Device Control
device="cpu","cuda","mps", or"auto"; resolves with fallback to CPU.
Future Work
- Ray tracing backend: implement
RayTracingSimulatorwith frequency-dependent absorption/scattering. - FDTD backend: implement
FDTDSimulatorwith configurable grid resolution and boundary conditions. - Dataset expansion: add additional dataset integrations beyond CMU ARCTIC (see
TemplateDataset). - Enhanced acoustics: frequency-dependent absorption and more advanced diffuse tail models.
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.1.0.tar.gz.
File metadata
- Download URL: torchrir-0.1.0.tar.gz
- Upload date:
- Size: 34.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0115ca7916a60afcc9912b1e60d44df521574b8d2642593bfc390e0ca020c3d7
|
|
| MD5 |
9cdf0fa799270307dfb32b1c3bbccfcf
|
|
| BLAKE2b-256 |
c36d0bdc70c2e5a6319ca8bd5055e655d2c30bf55a8dd9ee77803316b85d7223
|
File details
Details for the file torchrir-0.1.0-py3-none-any.whl.
File metadata
- Download URL: torchrir-0.1.0-py3-none-any.whl
- Upload date:
- Size: 35.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17a5b456631ce3c41cd6eb4ff87fc64c57b2d8486b7df647448efd12b8e62a06
|
|
| MD5 |
72f6f7b5b936aa4812bb1e8067714fba
|
|
| BLAKE2b-256 |
a6512a5759268247c92c3b96711c761be6890179f5a70dd2b3f1f4e7309e633f
|