Option Audionumérique (Audio-Parole-Musique)

EXAMEN le 29 Mai

Reminder : il y aura un CONTROLE ECRIT le 29 Mai en début de séance !
Les archives des questions sont disponibles ici.

Présentation

Cette option est dédiée d’une part aux techniques de traitement du signal appliqué à la musique, d’autre part à l’audionumérique, à savoir traitement du signal dédié à l’audio, environnement de développement spécialisés (Max/MSP, puredata) et audio embarqué sur iPhone/Android/Linux ainsi que sur page web (HTML5, etc).

Le programme de l’option introduit une part importante dédiée au traitement du signal musical. On y aborde la mise en oeuvre des outils dits de “music information retrieval” (MIR). L’objectif est d’être capable de comprendre les techniques de classification, de segmentation, de détection de BPM et d’accords, etc.

Concernant la partie audionumérique proprement dite, une première séance est consacrée à la chaîne audionumérique (acquisition, échantillonage et conversion A/N et N/A, traitement), une seconde séance est consacrée à la programmation audio en java et HTML5. Un tutoriel d’initiation à puredata est également disponible ci-dessous en apprentissage autonome.

Planning 2017 + supports de cours et sujets de TP

  1. cours des 26/1 et 23/2 : architectures de traitement audionumérique (transparents du cours) puis audionumérique embarqué
    • Un peu de psycho-acoustique…
    • Musique et spectres
    • Architectures matérielles (DSP, …)
    • Dynamique, virgule flottante vs virgule fixe, dithering
    • Double Buffering, Direct Memory Access (DMA)
    • Transformée de Fourier Discrète et implémentation matérielle – instruction “Multiply and ACcumulate” – produit scalaire et convolution
    • Conversion A/N : exemple d’un CAN à approximation successives
    • Conversion N/A : exemple d’un CNA à conversion courant-tension
    • Suréchantillonage
    • Sources d’erreur dans les CNA et CAN
    • Bruit de quantification – calcul du SNR d’un CAN sur 16 bits
    • Traiter le son avec java (javax.sound, jaudiolibs, JACK/Java)
    • Embarquer de l’audio dans une page web : l’API webaudio (TP d’initiation)
    • TP initiation à puredata
    • TP initiation aux effets audio
  2. cours du 9/3 : bases de l’apprentissage machine (machine learning) par Geoffroy Peeters (IRCAM) – supports de cours
    • apprentissage supervisé
      1. approche générative (Bayes, HMM),
      2. discriminante (linéaire, SVM, ANN),
      3. par exemplification (KNN)
    • apprentissage non-supervisé (K-Means et Hiérachique)
    • application à l’audio
  3. cours du 23/3 : bases de l’estimation audio – par Geoffroy Peeters (IRCAM) supports de cours
    • descripteurs audio
    • estimation de la fréquence fondamentale
    • estimation du tempo (BPM)
  4. Les séances 5 à 10 sont consacrées aux mini-projets

Mini-projets

Les mini-projets occupent les cinq dernières séances. Plusieurs binômes ou trinômes peuvent choisir le même thème !

Voici les thèmes pour 2015 avec pour chaque thème, le travail demandé, la documentation (sous forme PDF, ZIP ou lien web) et le langage de développement :

  1. Application pour la séparation de sources d’un morceau de musique (par “NMF informée”) [matlab] : Séparer les différentes sources qui composent un signal de musique dans le cas où l’on dispose uniquement d’un signal monophonique est un problème qui a de nombreuses applications telles que la transcription automatique des morceaux de musique, la reconnaissance d’instruments, ou l’estimation de la mélodie… (lire la suite) – sujet complet ici – [matlab]
  2. Séparation automatisée de la voix et de l’accompagnement [matlab] : La séparation de la voix chantée est une étape essentielle pour plusieurs applications telles que l’identification de chanteur, la transcription de la mélodie, la recherche par fredonnement… (lire la suite) – sujet complet ici
  3. Visualisation automatique de la structure d’un morceau de musique [matlab] : Les morceaux de musique sont structurés à différentes échelles de temps (battements, temps, accords, mesure, phrase, section etc.). L’estimation de la structure consiste à décrire l’organisation des éléments qui constituent un morceau de musique à un niveau macro-temporel. Ce problème a de nombreuses applications, dont l’indexation dans de grandes bases de données, la classification des musiques par genre ou la génération de résumés audio, et a attiré l’attention de nombreux chercheurs ces dernières années… (lire la suite) – sujet complet ici
  4. Algorithme de stretch et pitch-shift [matlab]  : il s’agit de développer un algorithme permettant de modifier un titre MP3, soit en durée (stretch : titre ‘étiré’ sans modification de la hauteur tonale), soit en hauteur tonale (pitch-shift : titre plus aigu ou plus grave, sans modification de la durée) ; il ne s’agira pas de tout réinventer de zéro (beaucoup de choses existant déjà sur le net), mais plutôt d’exploiter le code des algorithmes existants et d’être capable, à la fin du projet, d’expliquer rigoureusement comment il fonctionne :
  5. Détecteur de BPM pour site web [javascript] : il s’agit de développer une page web sur laquelle on peut déposer un fichier MP3 (ou un lien soundcloud), le code javascript affichant alors le BPM du titre en question ; il ne s’agit pas de tout réinventer de zéro (beaucoup de choses existant déjà sur le net), mais plutôt d’exploiter le code des algorithmes existants et d’être capable, à la fin du projet, d’expliquer rigoureusement comment il fonctionne :
  6. On-line Remixer [javascript] : application web permettant de mixer des clips audio à la volée (sur une “timeline”) via une interface graphique simple. Par exemple, l’appli permet d’extraire des clips de quelques secondes de la bibliothèque iTunes locale et de les déposer sur une timeline pour construire un morceau [javascript].
  7. On-line Audio Effect Generator [javascript] : il s’agit de concevoir un outil graphique (en ligne) pour la construction d’une chaîne d’effets audio pour un site web dédié à la musique ; l’outil permet de déposer des blocs d’effet (compresseur, filtre, reverb, …) sur une page web vierge pour construire le code javascript correspondant [javascript].
  8. Personal Audio Streamer [javascript/php] : il s’agit d’écrire une page web qui streame de l’audio depuis un serveur personnel sur lequel se trouvent des MP3 ou WAV, et permet d’égaliser le son avec un équaliseur multibande :
  9. Audio pour smartphones Android [java] : prise en main de l’environnement de programmation Eclipse pour Android (dev en java / xml), et développement d’une application mobile autour de l’audio (thématique à discuter) :
    • procédure pour installer le plug-in Eclipse pour Android
    • voir le tutoriel d’initiation à java pour Android (réaliser sa première appli mobile)
    • suggestion d’applications : equalizer pour lecteur MP3 ; générateur de boucles (aka APC/MPC) ; enregistreur ; etc.
  10. Suivi musical de cible pour la danse [Max/MSP] : Max/MSP est un langage graphique dédié au traitement audio pour la musique (similaire à puredata) ; ici il s’agira de concevoir un “patch” sous Max/MSP permettant, à partir d’une captation caméra (webcam ou autre), de modifier un paramètre sonore en temps réel en fonction des déplacement d’un danseur (ou toute autre cible mobile lors d’un spectacle ou d’une performance) ; on utilisera la bibliothèque JITTER/video intégrée dans Max/MSP (disponible sur le Mac situé dans la petite salle au fond de la 261) [Max/MSP/puredata]
  11. Composition automatique de musique [OpenMusic] : il s’agit d’exploiter l’environnement OpenMusic, un logiciel de programmation graphique (similaire à puredata) dédié à la composition musicale, qui permet de générer des morceaux de musique à partir de règles de programmation (transpositions, figures rythmiques, etc.). Assez tripant.
    • prise en main du logiciel OpenMusic
    • réalisation d’une démo (à discuter)
  12. Composition automatique de musique [java] : il s’agit de développer une appli avec  la bibliothèque java “jMusic”, une bibliothèque dédiée à la composition musical, à la génération automatique de fichiers MIDI, au pilotage de synthétiseurs :
    • lire l’introduction à jMusic ici
    • pour se faire une idée, voir un exemple simple de code
    • enchaîner avec un tutorial sur un algorithme de composition automatique qui prend des textes (roman, poème, journaux, etc.) en entrée et produit des mélodies
    • Le site de jMusic où l’on peut downloader et installer les deux bibliothèques java et la documentation.
  13. Application de type Shazam [matlab] : l’objectif est de reproduire l’algorithme d’identification audio par technique de fingerprint de Shazam tel que publié ici ; il faudra construire :
    • une base de morceaux faites de ses morceaux personnel (votre collection musicale)
    • une fonction A permettant l’extraction des fingerprints d’un titre donné et le stockage de ceux-ci dans un fichier ;
    • une fonction B de batch appelant la fonction A sur tout les morceaux de la base, et créant un fichier unique stockant tous les triplets [fingerprint, morceau d’origine, temps d’origine] ;
    • une fonction C de reconnaissance audio, celle-ci enregistrera le signal audio du micro (fonction matlab audiorecorder), appellera la fonction A pour obtenir les fingerprints et appellera la fonction D de reconnaissance ;
    • une fonction D qui recherchera le meilleur appariement entre fingerprint d’entrée et ceux stockés dans la base.