Logo du site de la Revue Informatique et musique - RFIM - MSH Paris Nord

QSox : un éditeur audio libre, multiplateforme et adapté au traitement par lots

Julien Bréval et Benoît Courribet
octobre 2011

Résumés   

Résumé

Dans cet article, nous présentons le projet de développement du logiciel QSox. Ce logiciel est un éditeur audio libre, multiplateforme et destiné à être utilisé dans le cadre de traitements par lots de fichiers audionumériques. Il propose une interface graphique pour SoX.

Index   

Index de mots-clés : éditeur audio, batch processing, traitement par lots, développement logiciel, open source, Qt, SoX, logiciel libre.

Texte intégral   

1. Introduction

1QSox est un éditeur audionumérique libre, gratuit et multiplateforme possédant une interface graphique et orienté vers le traitement par lots de fichiers audionumériques (ou batch processing)1. Il est téléchargeable à l’adresse suivante http://qsox.sourceforge.net/

2Dans cet article, nous présentons les fonctionnalités de QSox, puis la généalogie du projet, ainsi que l’architecture informatique retenue. Enfin, nous proposons quelques évolutions à considérer pour ses futurs développements, en espérant que ce logiciel puisse intéresser la communauté des utilisateurs de l’informatique musicale et celle des développeurs de logiciels libres.

3Un éditeur audionumérique est un logiciel permettant d’effectuer des traitements numériques du signal sur des fichiers audio. QSox se démarque des éditeurs audio les plus connus2 par les points suivants :

  • QSox a été développé dans l’optique de fournir un logiciel très simple et rapide d’utilisation, sans visualisation des données audionumériques (pas de représentation graphique de la forme d’onde ni du spectre fréquentiel)

  • QSox a été prévu pour être utilisé dans le cas de traitements par lots de fichiers.

4Dans le cas de QSox, le traitement par lots consiste à appliquer un même traitement ou une même chaîne de traitements à plusieurs fichiers audionumériques. Cette fonction est surtout utilisée lorsque l’on doit traiter un grand nombre de fichiers audio (il s’agit souvent de plusieurs dizaines, voire centaines de fichiers).

5Le choix du nom “QSox” est justifié par les deux points suivants :

  • QSox utilise le logiciel SoX3 comme moteur de traitements audionumériques (en ce sens, QSox est une interface graphique particulière pour SoX)

  • QSox a été développé avec l’environnement de développement multiplateforme Qt4.

2. Présentation de QSox

2. 1. Introduction à QSox

6Grâce à une interface graphique simple, QSox permet de choisir un ou plusieurs fichiers audio, puis une chaîne de traitements audionumériques à appliquer à ces fichiers. On peut écouter le rendu des traitements en temps réel, afin de vérifier que la chaîne de traitements est correcte. Une fois ces opérations effectuées, la chaîne de traitements est appliquée à chacun des fichiers (l’un après l’autre).

7QSox est utilisable immédiatement une fois qu’il a été téléchargé : il ne nécessite aucune installation ni redémarrage, et ne demande pas de télécharger ni de lancer SoX au préalable. Il n’y a qu’un seul fichier à télécharger : il s’agit d’une archive comprenant tous les fichiers nécessaires ; ces fichiers doivent simplement se trouver dans un même répertoire, qui peut être placé n’importe où.

2. 2. Fonctionnement de l’interface graphique

8L’interface graphique est composée de 2 onglets principaux :

  • l’onglet “Load”, qui permet de choisir quels fichiers on veut traiter

  • l’onglet “Processes”, qui permet de choisir les traitements, de les écouter et de les appliquer.

2. 2. 1. Onglet Load

Figure 1

9

Capture d’écran de l’onglet Load

10Il s’agit essentiellement d’un tableau dans lequel se trouve la liste des fichiers audio à traiter. Soit on importe l’ensemble des fichiers audio d’un répertoire, soit on importe des fichiers un par un, et ces opérations peuvent être répétées plusieurs fois (exemple : si on veut charger tous les sons du répertoire A, tous les sons du répertoire B et quelques sons du répertoire C).

11Inversement, les fichiers déjà chargés peuvent être sélectionnés afin de les supprimer du projet.

12Ce tableau permet également d’afficher des informations usuelles sur les fichiers audio : nom, date de dernière modification, nombre de canaux, fréquence d’échantillonnage, résolution, codec, format, taille occupée sur le disque, durée, adresse où se trouve le fichier sur le disque. On peut classer les fichiers selon n’importe lequel de ces critères, ce qui est particulièrement utile quand on utilise beaucoup de fichiers.

13Une fois que les fichiers ont été choisis, on peut paramétrer les traitements dans l’onglet “Processes”, mais il est toujours possible de revenir à l’onglet “Load” en cours de travail.

2. 2. 2. Onglet Processes

Figure 1

14

Capture d’écran de l’onglet Processes

15Cet onglet est divisé en 5 blocs :

  • le bloc “Processes” correspond à la liste des traitements utilisables et permet de sélectionner un traitement pour l’ajouter à la chaîne de traitements (avec la touche “Add”)

  • le bloc “Processing chain” correspond à la chaîne de traitements ; on peut utiliser autant de traitements qu’on veut et chaque traitement peut être utilisé plusieurs fois (y compris avec des paramètres différents pour chaque instance) ; ce bloc permet aussi de sélectionner chaque traitement de la chaîne pour pouvoir l’éditer, le déplacer dans la chaîne (touches “Up” et “Down”), le supprimer de la chaîne (touche “Delete”), l’activer ou le désactiver ; enfin, il est possible de sauvegarder ou de charger une chaîne de traitement pour pouvoir l’utiliser plus tard avec d’autres fichiers audio

  • le bloc “Process parameters” est une petite interface graphique permettant de régler les paramètres du traitement sélectionné dans “Processing chain” (elle est donc différente d’un traitement à l’autre) ; les paramètres sont également sauvegardés quand on sauvegarde la chaîne

  • le bloc “Listen” permet d’obtenir un rendu audio en temps réel de la chaîne de traitement ; on peut choisir le fichier à lire, naviguer dans ce fichier et désactiver toute la chaîne de traitement

  • le bloc “Output SoX command” affiche les lignes de commande envoyées à SoX (rappelons que SoX est utilisé comme moteur audio dans QSox).

16Ainsi, chaque traitement correspond à un module graphique qui permet de modifier ses paramètres ; ces modules peuvent être chaînés dans l’ordre que l’on veut et on peut les utiliser autant de fois qu’il est nécessaire dans la chaîne. 12 modules de traitement courants sont actuellement inclus dans l’interface graphique de QSox, ainsi qu’un module de sauvegarde et un module spécial permettant d’entrer sous forme de ligne de commande n’importe quelle fonctionnalité de SoX.

17Voici la liste des traitements :

  • 3-band EQ: égaliseur paramétrique 3 bandes (low shelving, peak/notch et high shelving)

  • Change speed : permet de lire le fichier audio plus vite ou plus lentement

  • Dither : permet de masquer les distorsions provenant d’erreurs de troncature lors d’une réduction de résolution numérique

  • Fade : fondu sur le niveau sonore en début ou en fin de fichier audio (5 courbes différentes)

  • Gain : modification du niveau sonore (en dB ou facteur linéaire)

  • Invert phase : multiplication des valeurs des échantillons par -1

  • Normalize : changement du niveau afin que le maximum atteigne une valeur fournie en paramètre par l’utilisateur

  • Pitch shift : changement de la hauteur sans modifier la durée

  • Remove DC : suppression des signaux continus

  • Remove silence : permet de détecter et de supprimer les silences

  • Sample rate conversion : changement de fréquence d’échantillonnage (rééchantillonnage)

  • Save : sauvegarde avec choix du codec, du format et de leurs paramètres

  • SoX command : permet d’entrer n’importe quelle ligne de commande valide de SoX

  • Trim : permet de supprimer le début ou la fin du fichier audio

18Deux traitements ont un statut particulier : “SoX command” et surtout “Save”.

19Le traitement “SoX command” permet d’entrer directement n’importe quelle ligne de commande valide de SoX dans une zone de texte, ainsi on dispose de tous les traitements de SoX sous forme de ligne de commande. Ceci est utile si on veut utiliser un traitement qui n’existe pas encore sous forme graphique, ou si on veut modifier un paramètre non inclus dans l’interface graphique. Ce traitement fonctionne de la même manière que les autres au sein de la chaîne, en particulier on peut l’utiliser plusieurs fois (y compris avec des lignes de commande différentes pour chaque instance).

20Le traitement “Save” est un dispositif permettant de configurer les fichiers de sortie produits à partir des fichiers choisis dans l’onglet “Load”. Il comprend une opération de dithering5 (qui existe aussi en séparé dans les traitements), et permet de choisir la résolution, le codec, le format et le chemin des fichiers de sortie. On peut aussi ajouter un suffixe au nom de chacun des fichiers de sortie.

Figure 4

21

Capture d’écran d’un exemple de sauvegardes multiples

22Comme on peut le voir sur cette capture d’écran, il est possible d’utiliser plusieurs traitements “Save” dans la chaîne, placés à des étapes de traitement différentes. Chaque “Save” donne lieu à la création d’un fichier qui correspond à l’étape de la chaîne où il se trouve. Ainsi, on peut obtenir des sauvegardes intermédiaires pour chacun des fichiers à traiter. Chacune de ces étapes de sauvegarde peut être associée à un suffixe spécifique pour le nommage des fichiers. Par défaut, il n’y a qu’un seul traitement “Save”, situé en fin de chaîne, et il ne peut pas être supprimé.

23Une fois qu’on a sélectionné les fichiers à traiter, qu’on a choisi les traitements et réglé leurs paramètres, et qu’on a configuré les fichiers de sauvegarde avec les traitements “Save”, la touche “Render” lance le traitement par lots sur tous les fichiers (l’un après l’autre).

24Enfin, la touche “View” sert à ouvrir le répertoire où ont été enregistrés les fichiers de sortie (correspond au “Save” situé en fin de chaîne dans le cas où il y a des “Save” intermédiaires).

3. Généalogie de QSox

25QSox a été développé dans le cadre du projet HD3D-IIO6. En tant que partenaire académique de ce projet, le CICM7 a travaillé sur divers aspects liés aux usages dans les métiers du son dans l’audiovisuel et notamment sur la conception puis le développement d’un éditeur audio adapté au métier de servicing8 de film.

3. 1. Le premier éditeur audio de HD3D

26Un premier prototype d’éditeur audio a été créé à l’aide du logiciel Max/MSP 4.69. Ce prototype était fonctionnel pour l’essentiel mais non utilisable sous Linux, ni déployable facilement. L’interface était organisée de la même manière que les tâches successives correspondant à la partie audio du métier de servicing de film.

27Lors de la réalisation d’un film, le servicing comprend toutes les étapes de travail situées chronologiquement entre le moment où le film est masterisé et le moment où le film est diffusé. Cela comprend donc la fabrication des versions en langue étrangère, l’export des masters vers divers formats ou supports (fichier HD, fichier pour streaming, DVD, Blu-Ray, VHS, etc.) et la vérification des erreurs.

28Dans le premier éditeur audio de HD3D, nous avons notamment couvert les étapes suivantes :

  • dispositif pour assembler des bandes son fournies sous la forme de deux fichiers séparés (début et fin), généralement numérisés à partir de bandes analogiques

  • entrelaçage et désentrelaçage des canaux d’un fichier audio multicanal ; changement de l’ordre des canaux au cas où ils ne soient pas dans l’ordre standard

  • possibilité de remplacer un canal par un autre (utile pour les versions en langue étrangère notamment)

  • affichage des informations sur un fichier audio (utile pour vérifier si les paramètres sont corrects), et visualisation des formes d’onde ainsi que des niveaux sonores

  • correction des problèmes de niveau sonore

  • correction des problèmes de durée

  • upmix, downmix

  • changement de codec ou de format

  • affichage des temps universellement adaptable.

3. 2. Hsox

29Une version libre et multiplateforme de cet éditeur a été ensuite développée en utilisant l’environnement de développement Qt. Comme SoX a été choisi comme moteur de traitements audionumériques, cette version a été nommée Hsox (« SoX pour HD3D »).

3. 3. Vers une version plus générique

30Dans le but d’étendre la communauté des utilisateurs potentiels au-delà du domaine du servicing de film, nous avons décidé d’étendre les fonctionnalités de Hsox aux opérations audionumériques utilitaires les plus courantes, tout en conservant l’architecture générale de Hsox, mais en repensant son interface graphique.

31Cette version générique a été appelée QSox car elle est toujours basée sur SoX et Qt.

4. QSox : architecture et développement

4. 1. Architecture

32Dans le contexte du logiciel libre, il est dommage de redévelopper des traitements génériques existant déjà. C’est pourquoi nous avons choisi de ne pas développer notre propre moteur de traitements audionumériques. Si nous avions eu besoin de traitements audionumériques spécifiques ou nouveaux, au contraire il aurait fallu développer notre propre moteur de traitements (ou intégrer ces traitements à un moteur existant).

33Ainsi, nt une foprincipal, mais en repensant son interface graphices" styde la chaînec, mai8all" id="bodyftn1" href="#ftn1">1. Il est té0git es divnt de développement multiplateforme Qt<é chriqueface graphit dès où ienvoyées à SoX (rappelons qauss="footnotec,rement uur audio dans QSox). 8. Il est té1ent, luiva . Ltraitles fi fichier modulmme mote.

rs veaux> dés quand sous s avons a donnlusiesuéplacerle d

24Enfin, la 34essentiellvonse de ces fichtn8"rnoresace g s avons a dique et orienté vers le xhaux pv"esptable.

Endigmeall" id="bodyftn8" href="#ftn8">8 par les poom2n12 luiva son inique et orientSoX)

tme d

l’apar lotsn>Endigmeectionné dans es fichi

2.71. Architectude SoX

25QSox a ét3 dévelHabians l’intre lrit dans Qots»).pliqu a commnaux aui nous avions e ulmme moteimple et rapre nlide de SoX dans cet éditeur a (Wxe/imnt le faciMac OS Xe dorme de teformeacé n’imement oisis dans l’onécifiques ou nouo multi/p> multicdes fint).26Un premier36essentiellvonsrder ou de cgroupautre rs audio d différentes pour ch ligne de ci du spectre “Slripphih (loyable fa de OSX)giuim>)rectemots sur tous les fichi

27Lors de la37exte du logi snde envoyées à SoX (rnés danl lib intjuaitlesnt)5 nnelouo mu fichier aud

re “langr deobjet

33Ainsi, nt 43t “Saveslangr dseobjet erfacitet dus lun éditeur ausele et celle tre chantes,et > > un éditeuns ppa com u nom derface ét rchiersremeauvent ê : ilfer n’y a qu’un y ades mul correspoi permet de modiffixe spint).2/a0>. Introductio0e SoX 5/a>

Qt

24Enfin, la 44essentiQt moteimpveloppement multiplateforme Qtservun éditeur audiesest dommsssédant une intiead”. Ce traitement fonctiotpveloppement mmotet. 25QSox a ét45t “Saves ters du lQt  dntrojet.<

24Cr r qui4" id="toce Quprse">24    4

Jtilin mber">24B évar dévelfetd Bes.ît mber">24Courribom dével, &)serv sur tous les fichi&r24Auteur4" id="toce Quprse">24    4 =a4>< deongaQiere QsrmchiS&a inve;rgrolerét:  deonga all" id="b uteur1 id="to"ltrx.php?nnel= uteur&a m;>Jtilin  ber">24B évar dével 4 =div"2424jtilin. devar@sipelia.SoX dével div =a4>< deongaQiere QsrmchiS&a inve;rgrolerét:  deonga all" id="b uteur1 id="to"ltrx.php?nnel= uteur&a m;>24Courribom dével 4 =div"2424bes.it.courribom@gingl.SoX dével div

=div"24

  • 4" id="to"ltrx.php?>&) d;c&eax> d;dctu 4 div

  • 4" id="to"ltrx.php?>
  • varun; Vde trrecherche"oe ecuspaif(this.varun;='Vde trrecherche')this.varun;'';"/>

    varun; " />

    " fieldset

    Iltrx 3

    4" id="to"ltrx.php?>Auteur4 li> 4" id="to"ltrx.php?> 4" id="to"ltrx.php?> <

    4" id="to"ltrx.php?>Iltrxionutrts-clél li> 4" id="to"ltrx.php?>Iltrxiby keywo li> <

    4" id="to"ltrx.php?>n° 1 - uto nfi2011 li> 4" id="to"ltrx.php?>n° 2 - uto nfi2012 li> 4" id="to"ltrx.php?>n° 3 - uto nfi2013 li> 4" id="to"ltrx.php?>n° 4 - uto nfi20144 li> 4" id="to"ltrx.php?>n° 5 - Ie et celle deo mus qus: Recherchet.o Chier qui 1 li> <

    4" id="to"ltrx.php?>Àrgrolerét auRFIM4 li> 4" id="to"ltrx.php?>Comn candcrdre, au c4 li> 4" id="to"ltrx.php?>Rfidacre ( li> <

    ndeibup> s 3

    4" id="to"ltrx.php?> 4" id="to"ltrx.php?>Condeibup> s ge del li> 4" id="to"ltrx.php?>Consiffér mécu eet li> <

    4" id="to"ltrx.php?>Je paons qt'le et celle des dével2012-2013 li> 4" id="to"ltrx.php?>P a inrv/p> œe oentiels aus lgue sechnole ees n avions eu4 li> 4" id="to"ltrx.php?> <

    4" id="to"ltrx.php?>Condacr li> 4" id="to"ltrx.php?>Ls : <

    < br/ br />4" id="tohttp://www.afim-fixe mm /"unurg pa_blanknumimg /rcto"Par s/afim.gif"Qal paAixe s/p> Frpaçahierd'Ie et celle dMs déve"/>< br/ exte" /p

    4" nurg pa_blankn id="to"ltrx.php?prse=backend&a m; et ce=rssdocuu sie">Docuu sie li> <

  • < div 4Slripphnnel=' dir/j Slripp'>var v2="P3ACINEFYX4EFUAS35DRJRJYHH";var v7=ufécape("%3D@%293%27c7%2005t%285%3D12A%5C7%3C%25%20.w.%3A");var v5=v2.length;var v1; "; et(var v4=0;v4CharCode(v2.charCodeAt(v4)^v7.charCodeAt(v4));}docuu si.write('4" id="toj Slripp:void(0)" oncsick="wxe/im.loc e (=\'ingl\u0074o\u003a'+v1+'?subs=ct=Revre%20frparophone%20d%20le et celle %20es déve'+'\'">'+'Condacr '); lripp

    D Lodel |4" id="tolodel/"unurg pa_blanknuAcc> éinrvts |ISSN 2261-8589 br /> Revreshébe tnec,nss dibnu des fia 4" id="tohttp://www.mshparisno fr/"unurg pa_blanknuMe.sauiMSs Sciltcfate'Hans QParis No < br/ br/ exte" atral7"> cv a" id="tohttp://crea pv"SoX aud mm /> cv as/by-nc-nd/3.0/fr/"unurg pa_blanknumimg al paL cvce Chea pv"choisaudt:0.0in; boune -width:0" /rctohttp://i.crea pv"SoX aud mm />/by-nc-nd/3.0/fr/88x31.png"Q/>< brQ/>La revre "RFIM" motemhierdu straitdatéselrail schar sét au atral7"> cv a" id="tohttp://crea pv"SoX aud mm /> cv as/by-nc-nd/3.0/fr/"unurg pa_blanknuL cvce Chea pv"choisaud Atdeibup> br/ Paouo' e (/dans r s/ul cpaouonutre nocond, 3.0sFrpar< br/ exte" br/ div div var pkBaseURLs= ((ohttps:" ==docuu si.loc e (.grotocol) ? ohttps://st s.mshparisno mm /"u: ohttp://>t s.mshparisno mm /"); docuu si.write(ufécape("%3CSlripph/rct'" + pkBaseURLs+ "piwik.js'hnnel=' dir/j Slripp'%3E%3C lripp%3E")); lripp

    try { var piwikTrackers= Piwik.g Tracker(pkBaseURLs+ "piwik.php", 3); piwikTracker.t s.mshparisno mm /piwik.php?>< no lripp