/!\ This repository is a work in progress /!\
Blind source separation allows to separates multiple sound sources that have been mixed together in a multi-channel audio file. This is a performance-oriented implementation based on independent vector analysis. The implementations are for batch processing with fully parallel processing. At the moment, we implement two algorithms.
- AuxIVA with iterative projection (IP) [1]
- AuxIVA with iterative source steering (AuxIVA-ISS) [2]
- OverIVA for when there are more microphones than sources [3]
- Fast independent vector exctraction (FIVE) that extracts only one source [4]
ISS is faster than IP, especially for larger number of channels. Separation performance is about the same. OverIVA is suitable to extract few sources from a larger number of channels. FIVE extracts a single source, but is very fast. The library is a C++ header-only library with Python bindings.
The library is header only with the headers in include/piva
.
At the moment, the package is only supported through Anaconda.
conda install piva -c fakufaku
First, clone this repository.
git clone https://github.com/fakufaku/piva
Make sure you have the dependencies installed
cd piva
conda env create -f environment
Build the module
conda activate piva
pip install .
On Windows, the Visual C++ 2015 redistributable packages are a runtime requirement for this project. It can be found here.
If you use the Anaconda python distribution, you may require the Visual Studio runtime as a platform-dependent runtime requirement for you package:
requirements:
build:
- python
- setuptools
- pybind11
run:
- python
- vs2015_runtime # [win]
- XTensor
- Intel Threading Building Blocks (Intel TBB)
- FFTW (for the STFT)
- SndFile (for C++ examples, to read audio files)
Documentation to be added later
Documentation for the example project is generated using Sphinx. Sphinx has the ability to automatically inspect the signatures and documentation strings in the extension module to generate beautiful documentation in a variety formats. The following command generates HTML-based reference documentation; for other formats please refer to the Sphinx manual:
piva/docs
make html
Tests to be added later
Running the tests requires pytest
.
py.test .
Copyright 2020 Robin Scheibler. GPL3 License (see LICENSE).
If you use this library for an academic publication, please cite [2]. Please also cite the paper for the relevant algorithm used.
[1] Nobutaka Ono, "Stable and fast update rules for independent vector analysis based on auxiliary function technique," Proc. WASPAA, 2011.
[2] Robin Scheibler, Nobutaka Ono, "Fast and stable blind source separation with rank-1 updates," Proc. IEEE ICASSP, 2020.
[3] Robin Scheibler, Nobutaka Ono, "Independent vector analysis with more microphones than sources," Proc. WASPAA, 2019.
[4] Robin Scheibler, Nobutaka Ono, "Fast independent vector extraction by iterative SINR maximization," Proc. IEEE ICASSP, 2020.