La gravure des CD audio en ligne de commande sous Linux

Ce tutoriel, qui regroupe diverses informations glanées par-ci et par-là, me sert avant tout d'aide-mémoire. Mais comme je suis bon et généreux, je le laisse à votre disposition. Qu'allez-vous y apprendre ? Vous allez voir comment extraire les pistes d'un CD audio dans les formats musicaux les plus courants supportés sous Linux (WAVE, MP3, OGG et FLAC), comment effectuer des conversions entre ces différents formats, pourquoi normaliser les fichiers musicaux ou encore comment graver un CD audio. Bien qu'il existe des outils en mode graphique permettant d'exécuter automatiquement toutes ces tâches, il peut être intéressant de savoir faire tout cela en ligne de commande, via SSH ou par l'intermédiaire d'un script. Bien sûr, je ne vous incite pas à copier illégalement des œuvres protégées par des droits d'auteurs. L'œuvre à copier doit avoir été obtenue légalement : vous avez acheté les morceaux sur Internet, vous possédez le CD original, les morceaux sont libres de droits, ou vous en êtes tout simplement l'auteur.

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Prérequis

Vous devez disposer d'un graveur de CD ou de DVD si vous souhaitez mettre votre musique sur un support de type CD-ROM. Votre distribution Linux doit aussi disposer d'outils permettant de réaliser les diverses opérations nécessaires à l'extraction, l'encodage, la normalisation, la lecture et la gravure. Voici lesquels :

  • cdparanoia pour l'extraction depuis un CD audio ;
  • mpg123 pour la lecture et le décodage des MP3 ;
  • madplay pour la lecture et le décodage des MP3 ;
  • lame pour l'encodage et le décodage des MP3 ;
  • vorbis-tools pour l'encodage, le décodage et la lecture des OGG ;
  • flac pour l'encodage et le décodage des FLAC ;
  • flac123 pour la lecture des FLAC ;
  • normalize pour la normalisation des fichiers WAVE ;
  • cdrdao pour la gravure de CD en mode Disk At Once ;
  • cdrtools pour la gravure des CD.

lame est capable de convertir un fichier MP3 en un fichier WAVE et inversement, mais il ne s'agit pas d'un lecteur. C'est pourquoi il est nécessaire, si vous souhaitez lire les MP3 en ligne de commande, d'installer mpg123 ou madplay. Ces deux derniers sont capables de décoder un MP3 en WAVE, mais pas l'inverse. La suite vorbis-tools contient plusieurs programmes, tels qu'ogg123, oggdec, oggenc et ogginfo. La normalisation permet de remettre les différents fichiers WAVE au même niveau sonore (volume) afin de ne pas avoir à augmenter ou diminuer le volume lors de l'écoute du morceau suivant.

II. Extraire la musique depuis un CD audio

Quel que soit le format dans lequel vous souhaitez extraire les pistes du CD audio que vous possédez, il va vous falloir utiliser la commande cdparanoia. Les pistes sont extraites au format WAVE. Si vous préférez les formats MP3, OGG ou FLAC, il vous faudra en plus utiliser un encodeur. En effet, les encodeurs qui sont à notre disposition ne savent pas faire de l'extraction depuis un CD audio. Pour combler cette lacune, nous effectuons l'extraction en WAVE avec cdparanoia puis nous encodons le fichier WAVE dans le format désiré sans perte de qualité audio. Nous aurions pu utiliser les tubes pour rediriger la sortie de cdparanoia vers l'entrée de l'encodeur et ainsi éviter de créer des fichiers temporaires, mais voici le problème qui s'est posé : cdparanoia ne nous permet pas de connaître le nombre de pistes présentes sur un CD audio. Seul le mode batch permet d'extraire toutes les pistes dans des fichiers, mais il ne permet pas de rediriger sur stdout… Donc pour effectuer l'extraction du CD complet, j'utilise un compteur pour extraire la piste 1 puis 2 puis 3… jusqu'à ce qu'il n'y ait plus de piste. On sait qu'il n'y a plus de piste lorsque le code de retour de cdparanoia est différent de zéro. Ce code est obtenu grâce à la variable $?. Si nous avions utilisé les tubes, le code de retour aurait alors été celui du dernier programme appelé, donc celui qui est présent à l'extrémité droite du tube. Or, certains des encodeurs testés ne renvoient pas de code d'erreur différent de zéro s'ils ne reçoivent rien sur leur entrée stdin. Nous verrons plus tard la technique d'extraction dans les formats MP3, OGG et FLAC. Elle n'est pas forcément la meilleure manière de procéder, mais elle a le mérite de fonctionner.

II-A. Au format WAVE

Si une copie de votre CD audio préféré n'est pas déjà présente sur votre disque dur, vous pouvez extraire chaque piste dans le format WAVE. Une fois que le CD audio est inséré dans le lecteur, il suffit de lancer la commande suivante :

 
Sélectionnez
cdparanoia --batch --output-wav

Cette commande suppose que /dev/cdrom pointe sur le lecteur dans lequel est inséré le CD audio. Vous pouvez vérifier si cdparanoia détecte bien le CD grâce à la commande cdparanoia -svQ. La liste des pistes doit s'afficher. Si rien ne s'affiche, il est fort probable que cdparanoia ne trouve pas votre lecteur. Il suffit alors de lui indiquer où il se trouve grâce à l'option --force-cdrom-device /dev/cdrom1 en supposant que /dev/cdrom1 est le périphérique de type bloc représentant le lecteur correspondant.

 
Sélectionnez
cdparanoia --batch --output-wav --force-cdrom-device /dev/cdrom1

La totalité des pistes du CD sont extraites dans le dossier courant et les fichiers sont nommés track01.cdda.wav, track02.cdda.wav… Notez que vous pouvez écouter les fichiers WAVE grâce à la commande play suivie de la liste des fichiers à lire : play *.wav. Pour arrêter la lecture, il suffit de faire CTRL-C.

II-B. Au format MP3

Comme nous l'avons vu plus haut, le traitement batch ne permet pas de rediriger sur la sortie standard. J'ai donc mis en place ce petit script qui extrait un fichier WAVE temporaire et qui le convertit ensuite. Le script tente d'extraire la piste numéro 1, et s'il n'y a pas d'erreur, tente d'extraire la piste numéro 2 et ainsi de suite.

 
Sélectionnez
#!/bin/bash

# périphérique représentant le lecteur CD
# convient la plupart du temps
CD_DEV=/dev/cdrom;

# résultat de la dernière commande cdparanoia
# initialisée à zéro pour pouvoir entrer dans le while
RESULT=0;

# numéro de la piste à encoder une fois dans le while
TRACK_NUM=1;

# longueur du numéro de piste : ici 3 chiffres : 001, 002...
# 4 chiffres : 0001, 0002
NUMBER_LENGHT=3;

# tant que l'on n'a pas trouvé la dernière piste, on continue.
while [ $RESULT -eq 0 ]; do

    NUMBER=`printf "%.${NUMBER_LENGHT}d" $TRACK_NUM`;

    # appel de la commande d'extraction
    cdparanoia --force-cdrom-device $CD_DEV --output-wav "$TRACK_NUM" "track$NUMBER.wav";

    # récupération du résultat de la dernière commande
    RESULT=$?;
    
    # on suppose que le CD n'est pas rayé et que le disque dur n'est pas plein.
    # s'il y a erreur, c'est que le numéro de piste n'existe pas.
    if [ $RESULT -eq 0 ]; then
    
        # conversion du WAVE en MP3
        lame --verbose -h -b 320 "track$NUMBER.wav" "track$NUMBER.mp3";
    
    fi

    # effacement du fichier WAVE temporaire
    rm -f "track$NUMBER.wav";
    
    # incrémentation du numéro de piste
    TRACK_NUM=$(($TRACK_NUM + 1));

done

Vous pouvez télécharger le script cd2mp3.sh. Il suffit de mettre les droits en exécution avec la commande chmod +x puis de l'utiliser comme ceci : ./cd2mp3.sh. L'idéal étant de créer un répertoire binaire contenant tous les scripts qui vous sont utiles, de mettre ce répertoire dans la variable $PATH afin de pouvoir utiliser ces scripts depuis n'importe quel autre répertoire.

Vous pouvez lire vos fichiers MP3 grâce à l'une des deux commandes  mpg123 *.mp3 ou madplay *.mp3.

II-C. Au format OGG

Le traitement est le même pour les fichiers OGG que pour les MP3.

 
Sélectionnez
#!/bin/bash

# périphérique représentant le lecteur CD
# convient la plupart du temps
CD_DEV=/dev/cdrom;

# résultat de la dernière commande cdparanoia
# initialisée à zéro pour pouvoir entrer dans le while
RESULT=0;

# numéro de la piste à encoder une fois dans le while
TRACK_NUM=1;

# longueur du numéro de piste : ici 3 chiffres : 001, 002...
# 4 chiffres : 0001, 0002
NUMBER_LENGHT=3;

# tant que l'on n'a pas trouvé la dernière piste, on continue.
while [ $RESULT -eq 0 ]; do

    NUMBER=`printf "%.${NUMBER_LENGHT}d" $TRACK_NUM`;

    # appel de la commande d'extraction
    cdparanoia --force-cdrom-device $CD_DEV --output-wav "$TRACK_NUM" "track$NUMBER.wav";

    # récupération du résultat de la dernière commande
    RESULT=$?;
    
    # on suppose que le CD n'est pas rayé et que le disque dur n'est pas plein.
    # s'il y a erreur, c'est que le numéro de piste n'existe pas.
    if [ $RESULT -eq 0 ]; then
    
        # conversion du WAVE en OGG
        oggenc -b 320 "track$NUMBER.wav";
    
    fi

    # effacement du fichier WAVE temporaire
    rm -f "track$NUMBER.wav";
    
    # incrémentation du numéro de piste
    TRACK_NUM=$(($TRACK_NUM + 1));

done

Vous pouvez télécharger le script cd2ogg.sh. Il suffit de mettre les droits en exécution avec la commande chmod +x puis de l'utiliser comme ceci : ./cd2ogg.sh.

Vous pouvez lire vos fichiers OGG grâce à la commande  ogg123 *.ogg.

II-D. Au format FLAC

Le traitement est le même pour les fichiers FLAC que pour les OGG et les MP3.

 
Sélectionnez
#!/bin/bash

# périphérique représentant le lecteur CD
# convient la plupart du temps
CD_DEV=/dev/cdrom;

# résultat de la dernière commande cdparanoia
# initialisée à zéro pour pouvoir entrer dans le while
RESULT=0;

# numéro de la piste à encoder une fois dans le while
TRACK_NUM=1;

# longueur du numéro de piste : ici 3 chiffres : 001, 002...
# 4 chiffres : 0001, 0002
NUMBER_LENGHT=3;

# tant que l'on n'a pas trouvé la dernière piste, on continue.
while [ $RESULT -eq 0 ]; do

    NUMBER=`printf "%.${NUMBER_LENGHT}d" $TRACK_NUM`;

    # appel de la commande d'extraction
    cdparanoia --force-cdrom-device $CD_DEV --output-wav "$TRACK_NUM" "track$NUMBER.wav";

    # récupération du résultat de la dernière commande
    RESULT=$?;
    
    # on suppose que le CD n'est pas rayé et que le disque dur n'est pas plein.
    # s'il y a erreur, c'est que le numéro de piste n'existe pas.
    if [ $RESULT -eq 0 ]; then
    
        # conversion du WAVE en FLAC
        flac --best "track$NUMBER.wav";
    
    fi

    # effacement du fichier WAVE temporaire
    rm -f "track$NUMBER.wav";
    
    # incrémentation du numéro de piste
    TRACK_NUM=$(($TRACK_NUM + 1));

done

Vous pouvez télécharger le script cd2flac.sh. Il suffit de mettre les droits en exécution avec la commande chmod +x puis de l'utiliser comme ceci : ./cd2flac.sh.

Vous pouvez lire vos fichiers FLAC grâce à la commande  flac123 *.flac.

III. Effectuer des conversions entre différents formats

La conversion implique que vous possédiez déjà un jeu de fichiers musicaux dans l'un des quatre formats vus précédemment. Généralement, les noms de fichiers audio contiennent le nom de l'artiste suivi du titre de la piste. Ces noms de fichiers ne sont pas forcément homogènes : certains sont en majuscules, d'autres en minuscules, certains comportent des espaces, d'autres des soulignés ou encore des accents. Avant d'effectuer toute conversion, nous allons uniformiser les noms de fichiers en supprimant les espaces et les caractères spéciaux. Les lettres majuscules seront transformées en minuscules, y compris pour l'extension. Ceci permettra d'éviter tout type d'erreur lors de l'éventuelle gravure des fichiers.

 
Sélectionnez
#!/bin/bash

# test du nombre d'arguments
if [ $# -le 0 ]; then
    echo "usage `basename $0` <fichier(s)>" >&2;
fi

# pour chaque argument
for i in "$@"; do 

    # nettoyage du nom
    n=`echo $i | \
      tr -- "-'\"&#{([])}@=<>" "               " | \
      tr "ÀÁÂÃÄàáâãäÇçÈÉÊËèéêëÌÍÎÏìíîïÒÓÔÖòóôöÙÚÛÜùúûü" "aaaaaaaaaacceeeeeeeeiiiiiiiioooooooouuuuuuuu" | \
      tr [:upper:] [:lower:] | \
      tr " " "_" | \
      tr -s "__"`;

    # changement de nom
    mv -v -- "$i" "$n";

done

Vous pouvez télécharger le script filecleaner.sh. Il suffit de mettre les droits en exécution avec la commande chmod +x puis de l'utiliser comme ceci : ./filecleaner.sh *.[mM][pP]3 *.[oO][gG][gG] *.[wW][aA][wW] *.[fF][lL][aA][cC].

III-A. Depuis le format WAVE

Vous disposez des fichiers au format WAVE.

III-A-1. Vers le format MP3

lame ne sait traiter qu'un seul fichier à la fois, c'est pour cela que l'on utilise une boucle for. mpg123 et madplay ne savent pas encoder en MP3, par contre, ils savent le décoder, donc on ne peut pas les utiliser ici.

 
Sélectionnez
for i in *.wav; do
  lame --verbose -h -b 320 "$i" "${i/%.wav/.mp3}";
done

III-A-2. Vers le format OGG

oggenc, lui, sait traiter tout un lot de fichiers, donc il n'est pas nécessaire d'utiliser une boucle for. De plus, il renomme correctement les fichiers avec l'extension .ogg, donc pas besoin d'avoir recours au remplacement de l'extension.

 
Sélectionnez
oggenc -b 320 *.wav

III-A-3. Vers le format FLAC

Tout comme oggenc, flac est capable de traiter un lot de fichiers, et change correctement l'extension.

 
Sélectionnez
flac --best *.wav

III-B. Depuis le format MP3

Vous disposez des fichiers au format MP3.

III-B-1. Vers le format WAVE

La conversion en WAVE peut se faire de plusieurs manières. Ainsi, il est possible de procéder à la conversion grâce à mpg123, madplay ou encore lame. Ce sera à vous de décider en fonction de ce qui est installé sur votre système, ou de vos préférences si vous disposez de ces trois outils.

En utilisant mpg123.

 
Sélectionnez
for i in *.mp3; do
  mpg123 --verbose --wav "${i/%.mp3/.wav}" "$i";
done

En utilisant maplay.

 
Sélectionnez
for i in *.mp3; do
  madplay --verbose --output wave:"${i/%.mp3/.wav}" "$i";
done

En utilisant lame. Il semble que ce soit celui qui donne le meilleur rendu.

 
Sélectionnez
for i in *.mp3; do
  lame --verbose --decode "$i" "${i/%.mp3/.wav}";
done

III-B-2. Vers le format OGG

Comme pour la conversion en WAVE, la conversion en OGG peut se faire de plusieurs manières avec mpg123, madplay ou lame.

En utilisant mpg123.

 
Sélectionnez
for i in *.mp3; do
  mpg123 --verbose --wav - "$i" | oggenc -b 320 -o "${i/%.mp3/.ogg}" - ;
done

En utilisant maplay.

 
Sélectionnez
for i in *.mp3; do
  madplay --verbose --output wave:- "$i" | oggenc -b 320 -o "${i/%.mp3/.ogg}" - ;
done

En utilisant lame. Il semble que ce soit celui qui donne le meilleur rendu.

 
Sélectionnez
for i in *.mp3; do
  lame --verbose --decode "$i" - | oggenc -b 320 -o "${i/%.mp3/.ogg}" - ;
done

III-B-3. Vers le format FLAC

flac semble éprouver quelques difficultés avec les données provenant de l'entrée standard stdin (utilisation des tubes). Il est donc préférable de passer par des fichiers WAVE intermédiaires pour garantir le bon encodage des fichiers FLAC. Je suis peut-être passé à côté de l'option magique… Si vous trouviez une solution propre sans erreur, utilisant les tubes, je vous serais reconnaissant de bien vouloir la partager avec moi.

En utilisant mpg123.

 
Sélectionnez
for i in *.mp3; do
  
  # nom du fichier cible WAVE
  n="${i/%.mp3/.wav}";
  
  # utilisation d'un fichier WAVE intermédiaire
  mpg123 --verbose --wav "$n" "$i" &&
  
  # conversion en FLAC si le fichier WAVE a bien été créé
  flac --best "$n";
  
  # suppression du fichier WAVE temporaire
  rm -f "$n";
  
done

En utilisant maplay.

 
Sélectionnez
for i in *.mp3; do
  
  # nom du fichier cible WAVE
  n="${i/%.mp3/.wav}";
  
  # utilisation d'un fichier WAVE intermédiaire
  madplay --verbose --output wave:"$n" "$i" &&
  
  # conversion en FLAC si le fichier WAVE a bien été créé
  flac --best "$n";
  
  # suppression du fichier WAVE temporaire
  rm -f "$n";
  
done

En utilisant lame. Il semble que ce soit celui qui donne le meilleur rendu.

 
Sélectionnez
for i in *.mp3; do
  
  # nom du fichier cible WAVE
  n="${i/%.mp3/.wav}";
  
  # utilisation d'un fichier WAVE intermédiaire
  lame --verbose --decode "$i" "$n" &&
  
  # conversion en FLAC si le fichier WAVE a bien été créé
  flac --best "$n";
  
  # suppression du fichier WAVE temporaire
  rm -f "$n";
  
done

III-C. Depuis le format OGG

Vous disposez des fichiers au format OGG.

III-C-1. Vers le format WAVE

oggdec est capable de convertir des fichiers OGG en WAVE, tout en changeant leur extension.

 
Sélectionnez
oggdec *.ogg

III-C-2. Vers le format MP3

Ici, on utilise une boucle for pour que lame n'interprète pas l'entrée stdin comme représentant un seul morceau musical.

 
Sélectionnez
for i in *.ogg; do
  oggdec -o - "$i" | lame --verbose -b 320 -h - "${i/%.ogg/.mp3}";
done

III-C-3. Vers le format FLAC

Comme pour la conversion de MP3 vers FLAC, le même problème nous contraint à utiliser un fichier WAVE intermédiaire.

 
Sélectionnez
for i in *.ogg; do
  
  # nom du fichier cible WAVE
  n="${i/%.ogg/.wav}";
  
  # utilisation d'un fichier WAVE intermédiaire
  oggdec -o "$n" "$i" &&
  
  # conversion en FLAC si le fichier WAVE a bien été créé
  flac --best "$n";
  
  # suppression du fichier WAVE temporaire
  rm -f "$n";
  
done

III-D. Depuis le format FLAC

Vous disposez des fichiers au format FLAC.

III-D-1. Vers le format WAVE

flac est capable de décoder un lot de fichiers, tout en changeant correctement leur extension.

 
Sélectionnez
flac --decode *.flac

III-D-2. Vers le format MP3

Ici, on utilise une boucle for pour que lame n'interprète pas l'entrée stdin comme représentant un seul morceau musical.

 
Sélectionnez
for i in *.flac; do
  flac --decode "$i" -c | lame --verbose -b 320 -h - "${i/%.flac/.mp3}";
done

III-D-3. Vers le format OGG

Ici, on utilise une boucle for pour que oggenc n'interprète pas l'entrée stdin comme représentant un seul morceau musical.

 
Sélectionnez
for i in *.flac; do
  flac --decode "$i" -c | oggenc -b 320 -o "${i/%.flac/.ogg}" - ;
done

IV. Gravure d'un CD audio

IV-A. Normalisation audio

Nous avons vu comment effectuer des conversions entre différents fichiers musicaux, car cela peut être utile parfois. Pour la gravure d'un CD audio, nous ne travaillons qu'avec le format WAVE. Récupérez donc vos fichiers au format WAVE, comme nous l'avons vu précédemment. Il va falloir homogénéiser le volume sonore des fichiers à mettre sur CD. Cela s'appelle la normalisation audio. Le principe est simple : le programme que nous allons utiliser va calculer la moyenne du niveau sonore de toutes les pistes passées en argument, puis il va ajuster le volume de chaque piste pour qu'elles soient toutes au même niveau. En réalité ça doit être un peu plus compliqué que cela, mais c'est le principe général. Isolez les fichiers à graver dans un nouveau dossier afin que la moyenne ne soit pas faussée par la présence d'autres fichiers. Lancez ensuite la commande suivante :

 
Sélectionnez
normalize --mix *.wav

Notez que cette opération est facultative, mais elle est vivement conseillée. La qualité sonore n'en est pas diminuée.

IV-B. Émulation SCSI

Pour la gravure des pistes sur CD, nous utiliserons cdrecord ou cdrdao. Le premier permet de graver piste par piste, tandis que le second permet de graver en mode Disque Entier. Il s'agit de deux utilitaires en ligne de commande comme tous ceux que nous avons vus jusqu'à maintenant. Ils ne savent gérer que des périphériques SCSI, mais heureusement, Linux dispose d'options dans le noyau permettant d'effectuer ce que l'on appelle l'émulation SCSI afin de faire passer un périphérique IDE comme étant SCSI. Vous devez donc connaître quel est le bus SCSI utilisé par votre graveur de CD. Avant d'aller plus loin, il est nécessaire que l'émulation SCSI soit activée dans votre noyau Linux, c'est généralement le cas, sauf peut être si vous l'avez recompilé. Voici les options qui doivent être activées :

 
Sélectionnez
Device Drivers
- ATA/ATAPI/MFM/RLL support (y)
 - SCSI emulation support (y)
- SCSI device support (y)
 - SCSI disk support (y)
 - SCSI CDROM support (y)
 - SCSI generic support (y)

Vous pouvez les compiler en tant que module. Celui qui nous intéresse est nommé ide-scsi. Personnellement, je les ai intégrés directement au noyau, car l'émulation SCSI est requise par mes disques durs Serial-ATA, dans le cas contraire la machine ne démarre plus. J'utilise deux graveurs /dev/hda et /dev/hdc. Au démarrage de Linux, il faut indiquer au noyau que ces deux périphériques doivent utiliser l'émulation SCSI : il suffit de modifier le fichier /boot/grub/grub.conf si vous utilisez GRUB, ou le fichier /etc/lilo.conf si vous utilisez LILO. Si vous les avez compilés en tant que module, il vous faudra charger le module ide-scsi avant de pouvoir utiliser cdrecord ou cdrdao. Il est conseillé de le charger automatiquement au démarrage de Linux. La méthode varie suivant les distributions, donc à vous de vous documenter à ce sujet.

Il faut ensuite indiquer au noyau quels sont les périphériques à émuler en SCSI. Il suffit de donner un paramètre au noyau lors du démarrage. Dans le fichier de configuration de Grub, j'ai ajouté ceci à la suite de la commande de lancement du noyau : hda=ide-scsi hdc=ide-scsi. Pour Lilo, il s'agit de append= "hda=ide-scsi hdc=ide-scsi", il faut ensuite taper la commande lilo dans un terminal en root. Pour vous, les lettres peuvent différer en fonction du placement de vos périphériques sur les nappes IDE. Bien évidemment, un redémarrage est requis si vous avez recompilé le noyau ou changé les paramètres du chargeur de démarrage. Notons qu'une fois le redémarrage effectué, mes deux périphériques sont maintenant désignés par /dev/sr0 et /dev/sr1.

IV-C. Gravure piste par piste

Si vous lisez cette section, c'est que votre matériel est correctement configuré avec l'émulation SCSI. La méthode de gravure utilisée permet de graver piste par piste. Cette méthode ajoute un blanc de deux secondes entre chaque piste. L'avantage de cette méthode, c'est qu'il est possible de réaliser un CD en plusieurs fois : vous gravez trois pistes aujourd'hui, quatre demain, et lorsque tous vos morceaux préférés sont sur le CD, il ne reste plus qu'à le clôturer pour qu'il soit lisible sur n'importe quel platine CD. L'inconvénient de cette méthode est le blanc de deux secondes qui n'est pas du tout pratique s'il s'agit d'une compilation où toutes les pistes s'enchaînent en fondu. Pour fonctionner, cdrecord doit connaître les valeurs du bus SCSI. Pour voir la liste des bus disponibles, il suffit de lancer la commande cdrecord --scanbus | grep [a-zA-Z].

 
Sélectionnez
Linux sg driver version: 3.5.33
Cdrecord-Clone 2.01.01a06 (i686-pc-linux-gnu) Copyright (C) 1995-2006 Joerg Schilling
Using libscg version 'schily-0.8'.
scsibus0:
        0,0,0     0) 'PIONEER ' 'DVD-RW  DVR-108 ' '1.06' Removable CD-ROM
scsibus1:
        1,0,0   100) 'PLEXTOR ' 'CD-R   PREMIUM  ' '1.02' Removable CD-ROM
scsibus2:
        2,0,0   200) 'Generic ' 'STORAGE DEVICE  ' '9317' Removable Disk
scsibus3:
        3,0,0   300) 'ATA     ' 'ST3120026AS     ' '3.18' Disk
scsibus4:
        4,0,0   400) 'ATA     ' 'ST3120026AS     ' '3.18' Disk

Vous l'aurez deviné, il s'agit des valeurs en gras qui vont nous intéresser. Les deux premiers périphériques sont respectivement le graveur DVD et le graveur CD. Ce sont les triplets 0,0,0 ou 1,0,0 que cdrecord attendra en paramètre pour savoir sur quel périphérique il devra écrire.

Jetons un œil aux fichiers que nous allons graver aujourd'hui. Il n'y a que quatre pistes, et je ne compte pas en ajouter d'autres par la suite donc il convient de clôturer le CD par la même occasion, c'est ce que fait cdrecord par défaut. En fait si on désire créer un CD en plusieurs étapes, il faut indiquer à cdrecord de ne pas clôturer la session. Nous verrons cela un peu plus tard.

 
Sélectionnez
giminik@omega ~/Desktop/tmp $ ls -lh
total 160M
-rw-r--r-- 1 giminik users  11M jui  8 14:52 track01.wav
-rw-r--r-- 1 giminik users  55M jui  8 14:53 track02.wav
-rw-r--r-- 1 giminik users  54M jui  8 14:53 track03.wav
-rw-r--r-- 1 giminik users  38M jui  8 14:53 track04.wav

Lançons maintenant la gravure. Le -v affiche la progression de la gravure. Le CD sera éjecté lorsque la gravure sera terminée. Nous indiquons quel périphérique utiliser avec le paramètre dev associé au triplet SCSI. La vitesse est de 24x (24 * 150 ko/s). Il s'agit d'un CD audio. L'option -pad est très importante, car elle corrige chaque fichier qui doit être d'une taille multiple de 2 352 octets. Tous les fichiers WAVE présents dans le répertoire courant seront gravés à condition que le temps total n'excède pas la capacité du CD vierge.

 
Sélectionnez
cdrecord -v -eject dev=1,0,0 speed=24 -pad -audio *.wav

Si vous désirez graver votre CD en plusieurs étapes, voici l'une des manières de faire. Notez que pour la dernière commande, nous n'utilisons pas l'option -nofix, ce qui engendre la fermeture du CD, il devient alors lisible dans les lecteurs CD de salon et par la même occasion, il n'est plus possible d'ajouter des données à la suite du CD.

 
Sélectionnez
cdrecord -v -nofix dev=1,0,0 speed=24 -pad -audio track01.wav track02.wav
cdrecord -v -nofix dev=1,0,0 speed=24 -pad -audio track03.wav
cdrecord -v -eject dev=1,0,0 speed=24 -pad -audio track04.wav

Voici une autre manière de faire. Admettons que vous ajoutiez des chansons sur un CD à la manière décrite ci-dessus, et que finalement, vous voulez clôturer le CD sans ajouter de piste, voici donc la démarche à suivre.

 
Sélectionnez
cdrecord -v -nofix dev=1,0,0 speed=24 -pad -audio track01.wav track02.wav
cdrecord -v -nofix dev=1,0,0 speed=24 -pad -audio track03.wav
cdrecord -v -nofix dev=1,0,0 speed=24 -pad -audio track04.wav
cdrecord -v -eject -fix dev=1,0,0

IV-D. Gravure en mode disque entier

Nous avons vu précédemment que la gravure piste par piste engendre un blanc de deux secondes entre chaque piste, car le laser effectue une pause entre chaque morceau. Pour éviter d'avoir ces blancs, nous utilisons la méthode de gravure en mode disque entier. Ce mode est à utiliser lors d'une compilation où tous les morceaux s'enchaînent. Avec ce mode de gravure, il est obligatoire de graver la totalité des fichiers en une seule fois. Le CD est clôturé et il n'est plus possible d'ajouter du contenu. Pour ce type de gravure, nous utilisons cdrdao. Avant de lancer la gravure, il est nécessaire de créer un fichier .toc (Table Of Contents, Table des matières). Ce fichier indique à cdrdao quels fichiers il devra graver. Tous les sites que j'ai pu voir à ce sujet parlent d'un script generate_toc.sh qui permettrait de réaliser ce fichier. J'ai bien cherché, je n'ai trouvé ce script nulle part. J'ai donc recréé un petit script qui s'occupe de la création dudit fichier.

Voici à quoi ressemble le fichier .toc. Comme vous pouvez le constater, il recense les fichiers à graver. Les zéros indiquent que la gravure s'effectuera depuis le début du fichier correspondant.

 
Sélectionnez
CD_DA

TRACK AUDIO
AUDIOFILE "track01.wav" 0

TRACK AUDIO
AUDIOFILE "track02.wav" 0

TRACK AUDIO
AUDIOFILE "track03.wav" 0

TRACK AUDIO
AUDIOFILE "track04.wav" 0

Voici le petit script qui me permet de générer cette table des matières.

 
Sélectionnez
#!/bin/bash

# test du nombre d'arguments
if [ $# -le 0 ]; then
    echo "usage `basename $0` <fichier(s) wave>" >&2;
    exit 1;
fi

echo "CD_DA"

# pour chaque argument
for i in "$@"; do

    echo "";
    echo "TRACK AUDIO";
    echo "AUDIOFILE \"$i\" 0";

done

Vous pouvez télécharger le script generer_tdm.sh. Il suffit de mettre les droits en exécution avec la commande chmod +x puis de l'utiliser comme ceci : ./generer_tdm.sh *.waw > cd.toc.

Comme pour cdrecord, cdrdao a besoin de connaître le triplet représentant le bus sur lequel est branché le périphérique émulé en SCSI. Vous trouverez sa valeur avec la commande cdrdao scanbus. Ce sont normalement les mêmes valeurs que celles qui sont renvoyées par cdrecord. Pour lancer la gravure du CD, il ne reste plus qu'à indiquer à cdrdao quel périphérique et quel fichier .toc utiliser.

 
Sélectionnez
cdrdao write --eject --device 1,0,0 cd.toc

Lorsque la gravure est terminée, le CD est éjecté (paramètre --eject).

Pour toute question, correction, supplément d'informations, envoyez-moi un message privé.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 Matthieu PETIOT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.