On this page, I put some of the softwares and programs which are related to my research topic -
music information retrieval
and source separation.
Probably the most finished program I propose here is the Python program of my research topic which you will find in the Python scripts section, there.
- [08/01/08] soon the program we are working on, based
on NMF, that separates the singer from the background music when it
actually predominates it. The program in Python/NumPy is available below.
- [08/01/08] some people might be interested in that
Matlab function if_logcqspectro.m,
it produces a pseudo-spectrogram whose characteristics are cited below:
- log-scale for the frequencies (as in the
transform) - see J C
Brown for more details,
- good resolution overall - even in lower frequency
bins - thanks to the instantaneous frequency reassignment - see Abe,
T.; Kobayashi, T. & Imai, S. The IF spectrogram: a new
spectral representation Proc. of ASVA, 1997, 97, 423-430;
- This representation could be used later for use in
the so-called NMF2D
framework - Schmidt, M. N. & M°rup, M. Nonnegative Matrix
Factor 2-D Deconvolution for Blind Single Channel Source Separation
- PYTHON SCRIPTS
- [02/05/2010] A little hint to load MAT files (produced by Matlab) into Python/NumPy, and handling sparse matrices:
To load MAT files, use scipy.io.loadmat:
data = scipy.io.loadmat(filename)
If there is a sparse matrix A in the MAT file, you can use it as a normal numpy array by doing so:
It would seem that the
A = numpy.array(data['A'].todense())
loadmat method loads the sparse matrix in a quite weird format. For my own purpose, I only needed to get an array I could display with Matplotlib. Note that the
'todense' method produces a matrix. Frankly, I am not sure why I needed to seek for the element
. Maybe this tweak may only work with the specific way my data was saved, but it can still give some hint to other people...
- [30/04/2010] [NEW!] A program that implements parts of my research: separateLead.zip.
A README file with some more information and reference about what the program does is provided in the archive. Basically, given an music excerpt, the program uses the model we have worked on, called the Instantaneous Mixture Model (IMM), to separate the lead instrument from the accompaniment. First, the melody line of the lead instrument is estimated, then using the thus estimated fundamental frequency line, another round of estimation provides a more satisfying decomposition.
This program is unfortunately not completely equivalent to the Matlab version we used to compute all the results for our articles. However, with these scripts, I wanted to try out Python, associated with NumPy, as an alternative to Matlab and Octave. This example shows that it is possible to use it for scientific research, almost as easily as the other solutions. The use of the matplotlib package makes it also closer to the way I used Matlab's plotting functions: a sort of "graphical debugging" programming...
At last, a word about the copyright: I put a copy of the GNU GPL license. I believe it is worth publishing this program only as free software, and open source, such that it can be used as an example for people interested in using Python for scientific purposes. Of course, you can also use it to generate your own Karaoke accompaniment files! Have fun!
- [06/11/2008] A python script based on Snack
that creates a nice GUI useful for demos in source separation (mainly
designed for solo/accompaniment applications, but can be used for other
source separation which separates the mixture into 2 contributions): mixplay.py (NB: a lot of the code there is taken from the snack demo "mixplay"). An executable for linux is also available: mixplay (ubuntu 8.10 Intrepid), compiled with pyinstaller, mixplay_deb (debian 4.0 Etch).
- [10/11/2008] Another script based on Snack
for remixing 4 sounds using a "fancy" graphical interface. This is
"beta", but can be easily changed to fit other purposes (different
number of sources in the mixture, different position on the grid, and
so on...): mixplayc.py. (NB: again based on mixplay from the snack demo examples and also on some tkinter demo "bind1" which I found here). The executable for linux: mixplayf (ubuntu 8.10 Intrepid), mixplayf_deb (debian 4.0 Etch).
Telecom, the directories in public_html (used to?) have limited acces, and one
cant see the index on the web anymore (it used to be easier...). Here
is a python
that creates an html index of the current directory. Each entry of the
index is also a link to the files in the directory.
- Another python
which converts wav files in the current directory into mp3 files thanks
to LAME (you need it installed in the first place).
- PERL SCRIPTS
- [08/01/08] a C
phase-vocoder that does a few things (check the README file
to know what)