Skip to main content

Release Notes: SDK 3.xx

SDK 3.1.11

Release Date: 2026-07-14

Changes

  • This release includes various bug fixes and improvements.

SDK 3.1.0

Release Date: 2026-07-06

This release bundles a few novel and powerful features for virtual prototyping and audio machine learning intelligence, along with a few adjustments, cleanups and bugfixes. Namely a rebuilt remote processing pipeline for IRCollection, and the official release of Audio Scene Generation - the toolkit for building static acoustic scenes for audio machine learning, now covering a wide range of production use cases with AudioScene, SceneGeneration and SceneCollection.

Documentation for Audio Scene Generation will be expanded over the coming weeks as part of a broader documentation revamp.

IR Collections

Breaking changes

Batch device rendering in IRCollections

Local bulk device rendering in IRCollection has been replaced by remote IR processing. This moves device rendering and signal processing off your machine and onto Treble's backend, so it scales to much larger collections without being limited by local compute or bandwidth. Per-IR local device rendering is unaffected. See IR Collections.

The following methods have been removed:

RemovedReplacement
apply_filtersstart_remote_processing
perform_device_render_bulkstart_remote_processing
estimate_device_render_costprint_remote_processing_token_cost

When using remote processing, there is no need to prefetch or download spatial IR data before processing.

Bulk device rendering

# Before
device_coll = ir_coll.create_device_render_collection(...)
device_coll.perform_device_render_bulk()

# After
device_coll = ir_coll.create_device_render_collection(...)
device_coll.start_remote_processing()
device_coll.as_remote_processing_live_progress()

Applying filters

# Before
ir_coll.set_filters(...)
ir_coll.apply_filters()

# After
ir_coll.set_filters(...)
ir_coll.start_remote_processing()
ir_coll.as_remote_processing_live_progress()

Note: start_remote_processing() is only needed if you want to bulk-process a collection remotely (e.g. for device rendering, or to pre-compute/cache results at scale). If you just want to read filtered IR data, no processing step is required. Once set_filters(...) has been called on an IRCollection, every IR you access afterwards (e.g. via ir_info.get_mono_ir(dl)) is filtered automatically. You can still get the unfiltered version for any individual IR by passing apply_filters=False to the accessor.

Loading of IR data in IRCollections and IRDataLoaders

Data access methods on IRDataLoader have been consolidated onto IRInfo, giving a single, consistent set of accessors regardless of IR type.

Removed from IRDataLoader:

  • get_mono_ir_data, get_mono_ir_from_row, get_mono_ir_from_ir_info → use ir_info.get_mono_ir
  • get_spatial_ir_data, get_spatial_ir_from_row, get_spatial_ir_from_ir_info → use ir_info.get_spatial_ir
  • get_ir_data_from_row → use the get_*_ir accessors on IRInfo
  • get_device_ir_data, get_device_ir_data_from_row, get_srd_device_ir_data_from_ir_info, get_device_ir_data_from_ir_info → use ir_info.get_device_ir
  • get_processed_ir_data, get_processed_ir_data_from_ir_info, get_processed_ir_data_from_row → use the get_*_ir accessors on IRInfo
  • has_local_device_render_data — removed, no longer applicable

Fetching IR data

# Get a reusable data loader
dl = ir_coll.get_data_loader('./cache_dir')

# Get the first IR in the collection
ir_info = ir_coll[0]

# Mono part of the IR (filters applied, if any are set)
mir = ir_info.get_mono_ir(dl)

# Explicitly request the unfiltered IR
mir_clean = ir_info.get_mono_ir(dl, apply_filters=False)

# Spatial IR
sir = ir_info.get_spatial_ir(dl)

# Device-rendered IR (raises if the IR has no device render data)
pir = ir_info.get_device_ir(dl)

Features

  • Remote IR processing for IRCollection — see Breaking changes above.
  • IRDataLoader.preload_data can now target specific IR types: preload_data(ir_collection, targets: PreloadTarget | None = None), where targets selects one or more categories (auto / mono / spatial / device).
  • Result data packages now use improved compression and ordering, giving faster downloads and IR access.

Scene Generation

AudioScene, SceneGeneration and SceneCollection are now in the official release state. See the Audio Scene Generation notebook and Generating scene collections for audio ML notebook for documentation and examples. The documentation pages on the feature will go live in the coming weeks as part of a general revamp of the SDK docs site.

Features

Scene Collection & Audio Scene

  • Device IR processing can be offloaded to a remote backend:
    • start_remote_optimization() — start remote optimization for a scene collection.
    • get_remote_optimization_token_cost() — estimate the token cost of running the remote optimization for this collection.
    • remote_optimization_status — remote optimization status.
    • print_remote_optimization_token_cost() — print the token cost of running the remote optimization for this collection.
    • wait_for_remote_optimization_processing() — wait until the remote optimization has completed and return its status.
    • remote_optimization_status — return the aggregate status of the remote optimization job.
    • as_remote_optimization_live_progress() — display a live, auto-refreshing progress view for the remote optimization job.
    • cancel_remote_optimization() — cancel remote optimization.
    • preload_rendered_irs() — optionally preload rendered IR data into the data loader.
  • Serialization with a versioned DataFrame for forward compatibility:
    • Serialize: scene_collection.dataframe.write_parquet(parquet_path)
    • Deserialize: scene_collection = tsdk.collections.scene_collection_from_file(parquet_path)
  • render() renders an entire Scene Collection in one call; get_render() retrieves and decodes rendered audio for a given scene index and rendering settings.
  • SNR estimation in rendered audio:
    • Pass calculate_snr=True to render() to estimate SNR for all scenes; retrieve it via get_render().
    • A standalone estimate_snr() function is available for individual use.
  • SNR prediction from scene metadata:
    • SceneCollection.enrich_with_predicted_snr() predicts SNR for every scene in a collection; get_predicted_snr() retrieves it for a given scene and render target.
    • AudioScene.predict_snr() predicts the SNR of an individual scene.
  • scene_collection.plot() now includes histograms for predicted and estimated SNR across a collection.
  • filter_by_predicted_snr() filters a Scene Collection by predicted SNR.

Audio Datasets

  • AudioDataset.from_local_wav_directory() — build a noise dataset from a local directory of .wav files.
  • AudioDataset.from_local_speech_directory() — build a speech dataset from a directory of per-talker WAV subfolders (each subfolder name becomes the talker ID), automatically associating each .wav with its sibling .txt transcript.
  • AudioDataset.enrich_with_spl() — SPL analysis on audio datasets.

Device noise from microphone SNR

Device noise can now be specified and generated directly from a microphone SNR value, via StaticNoiseRules within DeviceSpecs.

Speech sample selection modes

ConversationRules.samples_per_talker now supports four sampling modes:

  • force_unique — raise an error once the sample pool is exhausted.
  • reshuffle — exhaust the sample list in order, then reshuffle and continue.
  • recycle — exhaust the sample list in order, then repeat from the beginning in the same order.
  • random — pick samples randomly from the pool on every draw.

Random parameter sampling

A new ScaledBeta distribution samples a scene parameter over a range, optionally discretized at fixed steps (e.g. levels in [60, 65] dB with a 1 dB step).

Channel routing in scene plot

The scene plot now includes a channel routing module for playback in the AudioScene.plot() widget. This lets you assign each channel of the device to left, right, mono or muted.

Features, Improvements & Fixes

Improvements

  • New GeometryGenerator shapes: create_cylinder, create_sphere, create_ellipsoid.
  • Random parameter generation now uses Sobol' sequences, giving better-distributed samples with fewer draws.
  • A shared, efficient IR loading data loader can now be passed to SceneGenerator, SceneCollection, and AudioScene to support all workflows.
  • AudioDataset.from_huggingface() can now cache the assembled metadata DataFrame to a local Parquet file, so subsequent calls skip the multi-shard download.
  • Target selection now also supports a source group or a list of explicit indices, in addition to the previous options.
  • Expanded docstrings and updated documentation throughout the SDK.

Bug fixes

  • Reorganized the Source-Receiver-Device plot so all microphones can be compared directly.
  • Fixed zoom being reset when changing angles in Source-Receiver-Device plots.
  • Fixed the same talker appearing across multiple tracks when two or more track generators share an audio dataset with ConversationRules.
  • Various other bug fixes and general robustness improvements.

SDK 3.0.74

Release Date: 2026-06-16

Changes

  • Added some new settings for GA Simulations
  • fix sub source labels in mesh plots

SDK 3.0.65

Release Date: 2026-06-02

Changes

  • Source receiver device improvements.
  • Use look_at parameters to rotate sources towards targets.
  • Various performance improvements and bug fixes.

SDK 3.0.57

Release Date: 2026-05-21

Changes

  • Performance of 3d plotting has been improved significantly.
  • New point_at method added to sources; directional_source.point_at(receiver) and an optional point_at parameter added to make_ sources operations.
  • Point3d *, / and // operators added, points and vectors can be multiplied and divided with scalars Point3d(1,1,2) * 3 == Point3d(3,3,6)
  • Improved detection of outer parts of devices.
  • Various performance improvements and bug fixes.

SDK 3.0.36

Release Date: 2026-04-28

  • Improvements and fixes

SDK 3.0.31

Release Date: 2026-04-21

Changes

  • Fix total-runtime estimate being inaccurate for simulations with many boundary velocity sources. (Did not affect token cost)
  • Fix simulation task progress showing +99% instead of 100% for completed simulations that include directive sources.
  • Fix files not being found issue in datasets when using local data reader (preloaded data).
  • Scene generation: create audio dataset from a local wav directory.

SDK 3.0.28

Release Date: 2026-04-15

Changes

  • Improvements to Device geometry import feedback

SDK 3.0.24

Release Date: 2026-04-13

Changes

  • Fixes plotting issue affecting users with pyvista version 0.47 and later where model plotting would break for models with degenerate faces.
  • The from_file method on MonoIR and SpatialIR can now read .h5 files written by the write_to_file method.
  • Improved device geometry checking feedback.

SDK 3.0.22

Release Date: 2026-04-07

Changes

  • Improvements to plotting device geometries.

SDK 3.0.21

Release Date: 2026-04-01

Changes

  • Improvements to post-processing pipeline.
  • Support geometry snapping to walls and ceiling when injecting GeometryComponents to GeometryDefinition.

SDK 3.0.9

Release Date: 2026-03-11

Changes

  • Fixed an issue where roll_angle or rotation values would not always be set correctly.
  • Improved notebook environment detection for interactive plots and progress displays.
  • Fixed issue where preloading data for IRCollections from Datasets would not work if a new IRCollection was created from the original one.

SDK 3.0

Release Date: 2026-02-26

Welcome to Treble 3.0! This release transitions the Treble SDK from a simulation platform to an end-to-end simulation and data platform. With 3.0 we introduce features and workflows that enable users to work beyond their simulated IRs and create acoustic scenes with speech and noise paired with spatial and acoustic metadata. We are also significantly expanding our simulation capabilities with moving sources, receivers and devices.

Moving Sources, Receivers and Devices

Sources and receivers are no longer static with this new beta feature. We have introduced a new source and receiver type. The upgrade is so substantial that we encourage you to seek out the separate documentation pages:

Collections

There is a new workflow in the SDK that supports working with large amounts of IRs. Simulation metadata is stored in parquet files, it is straightforward to append more spatial or acoustic metadata to the file. Filtering and querying is fast since polars is used. This represents a major improvement to the SDK and we advise you to take a deep dive on the relevant documentation pages below.

Audio scene generation

Up until this point the SDK has exclusively been a high-quality impulse response simulator. This changes with the introduction of the audio scene generator, a new beta feature. It is now possible to set up complex audio scenes with speaker, distractors and noise. Device noise and conversation rules can be easily controlled. There are elaborate examples that demonstrate this new feature in the links below.

Improvements to GA solver

At Treble, we continuously improve our core simulation technology, and GA is no exception. This update brings state-of-the-art acoustic modeling even further forward, with improvements that will deliver faster, more accurate results, especially for larger venues and spatial impulse responses.

Performance Improvements

  • Improved handling of large jobs
    Mitigates memory issues that occasionally caused problems in previous versions.

  • Broadband tracing optimization
    By default, the simulation now traces all bands at once when possible.

  • General multithreading and runtime optimizations
    Overall performance improvements across the engine.

Improvements to Impulse Responses

We’ve made major upgrades to spatial IR and IR modeling, particularly for diffuse fields:

  • Improved spatial IRs
    Produces a better diffuse-field representation of the impulse response resulting from the ray-radiosity and volumetric ray tracing engine.

  • Improved IR generation
    The Poisson sequence for the late tail now uses an estimated reflection density. This resolves spacing issues that occasionally occurred in large and open spaces.

  • Higher default maximum reflection density (10,000 → 50,000)
    Results in smoother reverb tails and mitigates rare “spikes” in the late tail of the IRs.

  • Improved air absorption (now continuous)
    Produces smoother spectrograms and more natural-sounding impulse responses.

  • Interpolation of Poisson pulses across frequencies
    Creates smoother frequency-dependent decays and cleaner spectrograms.

Stability and Tooling Updates

  • Fixed random seed based on position
    Random number generation is now bound to receiver and source locations, ensuring identical results for identical simulations (also fixes edge cases like receivers on grid centers).

  • Option to split direct path from the rest of the IR
    Enables workflows that require separate handling of the direct sound component.