All notable changes to pyroomacoustics will be documented in this file.
- 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)
- 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.
- 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
- A specialized
- 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 MANIFEST.in so that it gets picked up for packaging
- Minimal Dockerfile example.
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
- Acoustic properties of different materials in
- Scattering from the wall is handled via ray tracing method, scattering coefficients are provided
inverse_sabineallows to compute the
max_orderto use with the image source model to achieve a given reverberation time
- The method
pyroomacoustics.room.Roomallows to compute the theoretical RT60 of the room according to Eyring or Sabine formula
- The method
pyroomacoustics.room.Roomallows 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
- The way absorption is handled has changed. The scalar variables
absorptionare deprecated in favor of
- 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.compute_synthesis_window, have been deprecated in favor of
pyroomacoustics.Roomhas a new method
addthat can be used to add either a
SoundSource, or a
MicrophoneArrayobject. Subsequent calls to the method will always add source/microphones. There exists also methods
add_microphonethat can be used to add source/microphone via coordinates. The method
add_microphone_arraycan be used to add a
MicrophoneArrayobject, or a 2D array containing the locations of several microphones in its columns. While the
add_microphone_arraymethod 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 parameters.py
- Default set to 20 rather than 5 as it was in pyroomacoustics.room.Room.isinside
- Added Binder link in the README for online interactive demo
- Changed while loop to iterate up to room_isinside_max_iter in pyroomacoustics.room.Room.isinside
- 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
- Fixed a non-unicode character in
pyroomacoustics.experimental.rt60breaking the tests
- The routine
pyroomacoustics.experimental.measure_rt60to 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
- Added FastMNMF (Fast Multichannel Nonnegative Matrix Factorization) to
- Griffin-Lim algorithm for phase reconstruction from STFT magnitude measurements.
- Removed the supperfluous warnings in pyroomacoustics.transform.stft.
- Add option in pyroomacoustics.room.Room.plot_rir to set pair of channels to plot; useful when there’s too many impulse responses.
- Add some window functions in windows.py 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_contrasthas been replaced by
rcond=Nonein all calls to
numpy.linalg.lstsqto remove a
- Add a lower bound to activations in
pyroomacoustics.bss.auxivato 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 setup.py on Cython (Issue #117)
- Add SSL context to
download_uncompressand unit test; error for Python 2.7.
- 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
np.squeezein STFT as it caused errors when an axis that shouldn’t be squeezed was equal to 1.
Beamformer.processwas using old (non-existent) STFT function. Changed to using one-shot function from
- Fixed a bug in
utilities.fractional_delay_filter_bankthat would cause the function to crash on some inputs (issue #87).
- Adds several options to
pyroomacoustics.room.Room.simulateto 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
- Add iterative Wiener filtering approach for single channel denoising in
- 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
- Corrects a bug that causes different behavior whether sources are provided to the constructor of
Roomor to the
- Corrects a typo in
- Corrects a bug in the update of the demixing matrix in
- Corrects invalid memory access in the
pyroomacoustics.build_rircython accelerator and adds a unit test that checks the cython code output is correct
- Fix bad handling of 1D b vectors in
- 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
- Monaural signals are now properly handled in one-shot stft/istft
- Corrected check of size of absorption coefficients list in
- Added noise reduction sub-package
denoisewith spectral subtraction class and example.
transformand 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
- Lots of new features in the
STFTclass can now be used both for frame-by-frame processing or for bulk processing
- The functionality will replace the methods
- The new function
pyroomacoustics.realtime.compute_synthesis_windowcomputes the optimal synthesis window given an analysis window and the frame shift
- Extensive tests for the
- Convenience functions
pyroomacoustics.realtime.synthesiswith an interface similar to
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
axis(along which to perform DFT) and
- Improved documentation and docstrings
- Using now the built-in RIR generator in examples/doa_algorithms.py
- Improved the download/uncompress function for large datasets
- Dusted the code for plotting on the sphere in
- The methods
pyroomacoustics.overlap_add, etc, are now deprecated and will be removed in the near future
- Added AuxIVA (independent vector analysis) to
- Added BSS IVA example
- Moved Trinicon blind source separation algorithm to
- Correct a bug that causes 1st order sources to be generated for max_order==0 in pure python code
- Fixed issue #22 on github. Added INCREF before returning Py_None in C extension.
- Base classes for Dataset and Sample in
- 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.