All notable changes to pyroomacoustics will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.


Nothing yet.

0.7.3 - 2022-12-05


  • Fixes issue #293 due to the C++ method Room::next_wall_hit not handling 2D shoebox rooms, which cause a seg fault

0.7.2 - 2022-11-15


  • Appveyor builds for compiled wheels for win32/win64 x86


  • Fixes missing import statement in room.plot for 3D rooms (PR #286)

  • On win64, bss.fastmnmf would fail due to some singular matrix. 1) protect solve with try/except and switch to pseudo-inverse if necessary, 2) change eps 1e-7 -> 1e-6

0.7.1 - 2022-11-11


  • Fixed pypi upload for windows wheels

0.7.0 - 2022-11-10


  • Added the AnechoicRoom class.

  • Added FastMNMF2 (Fast Multichannel Nonnegative Matrix Factorization 2) to bss subpackage.

  • Randomized image source method for removing sweeping echoes in shoebox rooms.

  • Adds the cart2spher method in pyroomacoustics.doa.utils to convert from cartesian to spherical coordinates.

  • Example

  • CI for python 3.10


  • Cleans up the plot_rir function in Room so that the labels are neater. It also adds an extra option kind that can take values “ir”, “tf”, or “spec” to plot the impulse responses, transfer functions, or spectrograms of the RIR.

  • Refactored the implementation of FastMNMF.

  • Modified the document of in doa subpackage.

  • End of Python 3.6 support.

  • Removed the deprecated realtime sub-module.

  • Removed the deprecated functions pyroomacoustics.transform.analysis, pyroomacoustics.transform.synthesis, pyroomacoustics.transform.compute_synthesis_window. They are replaced by the equivalent functions in pyroomacoustics.transform.stft sub-module.

  • The minimum required version of numpy was changed to 1.13.0 (use of np.linalg.multi_dot in doa sub-package see #271)


  • Fixed most warnings in the tests

  • Fixed bug in examples/

0.6.0 - 2021-11-29


  • New DOA method: MUSIC with pseudo-spectra normalization. Thanks @4bian! Normalizes MUSIC pseudo spectra before averaging across frequency axis.


  • Issue 235: fails when set_ray_tracing is called, but no mic_array is set

  • Issue 236: general ISM produces the wrong transmission coefficients

  • Removes an unncessery warning for some rooms when ray tracing is not needed


  • Unify code format by using Black

  • Add code linting in continuous integration

  • Drop CI support for python 3.5

0.5.0 - 2021-09-06


  • Adds tracking of reflection order with respect to x/y/z axis in the shoebox image source model engine. The orders are available in source.orders_xyz after running the image source model

  • Support for microphone and source directivites for image source model. Source directivities just for shoebox room. Available directivities are frequency-independent (cardioid patterns), although the infrastructure is there for frequency-dependent directivities: frequency-dependent usage in Room.compute_rir and abstract Directivity class.

  • Examples scripts and notebook for directivities.


  • Fix wrong bracketing for negative values in is_inside (ShoeBox)

0.4.3 - 2021-02-18


  • Support for Python 3.8 and 3.9


  • Fixes typo in a docstring

  • Update docs to better reflect actual function parameters

  • Fixes the computation of the cost function of SRP-PHAT doa algorithm (bug reported in #PR197)


  • Improve the computation of the auxiliary variables in AuxIVA and ILRMA. Unnecessary division operations are reduced.

0.4.2 - 2020-09-24


  • Fixes the Dockerfile so that we don’t have to install the build dependencies manually

  • Change the eps for geometry computations from 1e-4 to 1e-5 in libroom


  • A specialized is_inside routine for ShoeBox rooms

0.4.1 - 2020-07-02


  • Issue #162 (crash with max_order>31 on windows), seems fixed by the new C++ simulator

  • Test for issue #162 added

  • Fix Binder link

  • Adds the pyproject.toml file in so that it gets picked up for packaging


  • Minimal Dockerfile example.

0.4.0 - 2020-06-03

Improved Simulator with Ray Tracing

  • Ray Tracing in the libroom module. The function compute_rir() of the Room object in python can now be executed using a pure ray tracing approach or a hybrid (ISM + RT) approach. That’s why this function has now several default arguments to run ray tracing (number of rays, scattering coefficient, energy and time thresholds, microphone’s radius).

  • Bandpass filterbank construction in pyroomacoustics.acoustics.bandpass_filterbank

  • Acoustic properties of different materials in pyroomacoustics.materials

  • Scattering from the wall is handled via ray tracing method, scattering coefficients are provided in pyroomacoustics.materials.Material objects

  • Function inverse_sabine allows to compute the absorption and max_order to use with the image source model to achieve a given reverberation time

  • The method rt60_theory in allows to compute the theoretical RT60 of the room according to Eyring or Sabine formula

  • The method measure_rt60 in allows to measure the RT60 of the simulated RIRs

Changes in the Room Class

  • Deep refactor of Room class. The constructor arguments have changed

  • No more sigma2_awgn, noise is now handled in pyroomacoustics.Room.simulate method

  • The way absorption is handled has changed. The scalar variables absorption are deprecated in favor of pyroomacoustics.materials.Material

  • Complete refactor of libroom, the compiled extension module responsible for the room simulation, into C++. The bindings to python are now done using pybind11.

  • Removes the pure Python room simulator as it was really slow

  • pyroomacoustics.transform.analysis, pyroomacoustics.transform.synthesis, pyroomacoustics.transform.compute_synthesis_window, have been deprecated in favor of pyroomacoustics.transform.stft.analysis, pyroomacoustics.transform.stft.synthesis, pyroomacoustics.transform.stft.compute_synthesis_window.

  • pyroomacoustics.Room has a new method add that can be used to add either a SoundSource, or a MicrophoneArray object. Subsequent calls to the method will always add source/microphones. There exists also methods add_source and add_microphone that can be used to add source/microphone via coordinates. The method add_microphone_array can be used to add a MicrophoneArray object, or a 2D array containing the locations of several microphones in its columns. While the add_microphone_array method used to replace the existing array by the argument, the new behavior is to add in addition to other microphones already present.


  • From Issue #150, increase max iterations to check if point is inside room

  • Issues #117 #163, adds project file pyproject.toml so that pip can know which dependencies are necessary for setup

  • Fixed some bugs in the documentation

  • Fixed normalization part in FastMNMF


  • Added room_isinside_max_iter in

  • Default set to 20 rather than 5 as it was in

  • Added Binder link in the README for online interactive demo


  • Changed while loop to iterate up to room_isinside_max_iter in

  • Changed initialization of FastMNMF to accelerate convergence

  • Fixed bug in doa/tops (float -> integer division)

  • Added vectorised functions in MUSIC

  • Use the vectorised functions in _process of MUSIC

0.3.1 - 2019-11-06


  • Fixed a non-unicode character in pyroomacoustics.experimental.rt60 breaking the tests

0.3.0 - 2019-11-06


  • The routine pyroomacoustics.experimental.measure_rt60 to automatically measure the reverberation time of impulse responses. This is useful for measured and simulated responses.


  • Fixed docstring and an argument of pyroomacoustics.bss.ilrma

0.2.0 - 2019-09-04


  • Added FastMNMF (Fast Multichannel Nonnegative Matrix Factorization) to bss subpackage.

  • Griffin-Lim algorithm for phase reconstruction from STFT magnitude measurements.


  • Removed the supperfluous warnings in pyroomacoustics.transform.stft.

  • Add option in to set pair of channels to plot; useful when there’s too many impulse responses.

  • Add some window functions in and rearranged it in alphabetical order

  • Fixed various warnings in tests.

  • Faster implementation of AuxIVA that also includes OverIVA (more mics than sources). It also comes with a slightly changed API, Laplace and time-varying Gauss statistical models, and two possible initialization schemes.

  • Faster implementation of ILRMA.

  • SparseAuxIVA has slightly changed API, f_contrast has been replaced by model keyword argument.


  • Set rcond=None in all calls to numpy.linalg.lstsq to remove a FutureWarning

  • Add a lower bound to activations in pyroomacoustics.bss.auxiva to avoid underflow and divide by zero.

  • Fixed a memory leak in the C engine for polyhedral room (issue #116).

  • Fixed problem caused by dependency of on Cython (Issue #117)

0.1.23 - 2019-04-17


  • Expose mu parameter for adaptive.subband_lms.SubbandLMS.

  • Add SSL context to download_uncompress and unit test; error for Python 2.7.

0.1.22 - 2019-04-11


  • Added “precision” parameter to “stft” class to choose between ‘single’ (float32/complex64) or ‘double’ (float64/complex128) for processing precision.

  • Unified unit test file for frequency-domain souce separation methods.

  • New algorithm for blind source separation (BSS): Sparse Independent Vector Analysis (SparseAuxIVA).


  • Few README improvements


  • Remove np.squeeze in STFT as it caused errors when an axis that shouldn’t be squeezed was equal to 1.

  • Beamformer.process was using old (non-existent) STFT function. Changed to using one-shot function from transform module.

  • Fixed a bug in utilities.fractional_delay_filter_bank that would cause the function to crash on some inputs (issue #87).

0.1.21 - 2018-12-20


  • Adds several options to to finely control the SNR of the microphone signals and also return the microphone signals with individual sources, prior to mix (useful for BSS evaluation)

  • Add subspace denoising approach in pyroomacoustics.denoise.subspace.

  • Add iterative Wiener filtering approach for single channel denoising in pyroomacoustics.denoise.iterative_wiener.


  • Add build instructions for python 3.7 and wheels for Mac OS X in the continuous integration (Travis and Appveyor)

  • Limits imports of matplotlib to within plotting functions so that the matplotlib backend can still be changed, even after importing pyroomacoustics

  • Better Vectorization of the computations in pyroomacoustics.bss.auxiva


  • Corrects a bug that causes different behavior whether sources are provided to the constructor of Room or to the add_source method

  • Corrects a typo in pyroomacoustics.SoundSource.add_signal

  • Corrects a bug in the update of the demixing matrix in pyroomacoustics.bss.auxiva

  • Corrects invalid memory access in the pyroomacoustics.build_rir cython accelerator and adds a unit test that checks the cython code output is correct

  • Fix bad handling of 1D b vectors in `pyroomacoustics.levinson.

0.1.20 - 2018-10-04


  • STFT tutorial and demo notebook.

  • New algorithm for blind source separation (BSS): Independent Low-Rank Matrix Analysis (ILRMA)


  • Matplotlib is not a hard requirement anymore. When matplotlib is not installed, only a warning is issued on plotting commands. This is useful to run pyroomacoustics on headless servers that might not have matplotlib installed

  • Removed dependencies on joblib and requests packages

  • Apply matplotlib.pyplot.tight_layout in pyroomacoustics.Room.plot_rir


  • Monaural signals are now properly handled in one-shot stft/istft

  • Corrected check of size of absorption coefficients list in Room.from_corners

0.1.19 - 2018-09-24


  • Added noise reduction sub-package denoise with spectral subtraction class and example.

  • Renamed realtime to transform and added deprecation warning.

  • Added a cython function to efficiently compute the fractional delays in the room impulse response from time delays and attenuations

  • notebooks folder.

  • Demo IPython notebook (with WAV files) of several features of the package.

  • Wrapper for Google’s Speech Command Dataset and an example usage script in examples.

  • Lots of new features in the pyroomacoustics.realtime subpackage

    • The STFT class can now be used both for frame-by-frame processing or for bulk processing

    • The functionality will replace the methods pyroomacoustics.stft, pyroomacoustics.istft, pyroomacoustics.overlap_add, etc,

    • The new function pyroomacoustics.realtime.compute_synthesis_window computes the optimal synthesis window given an analysis window and the frame shift

    • Extensive tests for the pyroomacoustics.realtime module

    • Convenience functions pyroomacoustics.realtime.analysis and pyroomacoustics.realtime.synthesis with an interface similar to pyroomacoustics.stft and pyroomacoustics.istft (which are now deprecated and will disappear soon)

    • The ordering of axis in the output from bulk STFT is now (n_frames, n_frequencies, n_channels)

    • Support for Intel’s mkl_fft package

    • axis (along which to perform DFT) and bits parameters for DFT class.


  • Improved documentation and docstrings

  • Using now the built-in RIR generator in examples/

  • Improved the download/uncompress function for large datasets

  • Dusted the code for plotting on the sphere in pyroomacoustics.doa.grid.GridSphere

Deprecation Notice

  • The methods pyroomacoustics.stft, pyroomacoustics.istft, pyroomacoustics.overlap_add, etc, are now deprecated and will be removed in the near future

0.1.18 - 2018-04-24


  • Added AuxIVA (independent vector analysis) to bss subpackage.

  • Added BSS IVA example


  • Moved Trinicon blind source separation algorithm to bss subpackage.


  • Correct a bug that causes 1st order sources to be generated for max_order==0 in pure python code

0.1.17 - 2018-03-23


  • Fixed issue #22 on github. Added INCREF before returning Py_None in C extension.

0.1.16 - 2018-03-06


  • Base classes for Dataset and Sample in pyroomacoustics.datasets

  • Methods to filter datasets according to the metadata of samples

  • Deprecation warning for the TimitCorpus interface


  • Add list of speakers and sentences from CMU ARCTIC

  • CMUArcticDatabase basedir is now the top directory where CMU_ARCTIC database should be saved. Not the directory above as it previously was.

  • Libroom C extension is now a proper package. It can be imported.

  • Libroom C extension now compiles on windows with python>=3.5.

0.1.15 - 2018-02-23


  • Added pyroomacoustics.datasets to list of sub-packages in

0.1.14 - 2018-02-20


  • Changelog

  • CMU ARCTIC corpus wrapper in pyroomacoustics.datasets


  • Moved TIMIT corpus wrapper from pyroomacoustics.recognition module to sub-package pyroomacoustics.datasets.timit