Jean-Louis DURRIEU
PhD Candidate at the Ecole Nationale SupÚrieure des TÚlÚcommunications (ENST)



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.

  • MATLAB CODE
    • [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 constant-Q 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 ICA2006, 2006
  • 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:
        A = numpy.array(data['A'][0][0].todense())
      It would seem that the 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 [0][0]. 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).

    • At 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 script 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 script which converts wav files in the current directory into mp3 files thanks to LAME (you need it installed in the first place). 
  • PERL SCRIPTS
  • MISC.
    • [08/01/08] a C phase-vocoder that does a few things (check the README file to know what)
Document made with Nvu