Graver un CD audio random en ligne de commande

hello j’aimerai faire un petit script pour graver un CD audio en mode random a patir de ma collection de 5000 MP3 situé dans le repertoire /media/music par exemple ( lui meme contient des sous repertoires ).

mes connaissances sont tres limitées en script mais bon d’abord il faudrait faire un find je pense et selectionner des pistes de maniere aleatoire sachant que la capture totale doit s arreter a environ 60 Mo ( ou plutot 70 min de musiques)

find /media/music/*.mp3 -size 6000 -exec mpg321…{}\

ensuite pour convertir des mp3 il faut utiliser mpg321 pour les mettre en CDR:

donc la commande basique serait :

mpg321 ma_chanson.mp3 --cdr ma_chanson.cdr

enfin pour graver il faudrait prendre tous les *.cdr et faire du genre :

wodim -v -dev=/dev/cdrw -dao -audio track1.cdr track2.cdr track3.cdr

voila je n’ai que des brides car comme je vous ai dis je n’y connais pas grand chose;

regarde un peu les fonctions awk et for

et regarde aussi là ça pourrais t’aider :wink: forum.debian-fr.org/viewtopic.php?t=3548

hello et merci pour ton lien

Neossur generation debian m’a aussi filé cela:
giminik.developpez.com/articles/ … -commande/

J’ai pas mal cherché dans les man… de mpg321 MPG123 lame et madplay et le seul truc qui me freine c’est comment lui dire de chopper un fichier random dans mes directory et sous directory?

La fonctionc awk m’est bien obscure j’avoue .

apres le reste ne devrait pas poser de soucis:

conversion:

for i in *.mp3; do
lame --verbose --decode “$i” “${i/%.mp3/.wav}”;
done

Normaliser:
normalize --mix *.wav

gravure:
cdrecord -v -eject dev=1,0,0 speed=24 -pad -audio *.wav

Donc j’y suis presque il me manque un petit cop de pouce .

regarde la http://www.developpez.net/forums/showthread.php?t=22140

j’ai posté deux fois pardon

Merci à toi je progresse mais je suis loin du bout du tunnel je pense

me donne 5900 (nombre de resultats je pense)

dès que je fais la meme chose avec

3 resultats (donc ne lit pas les sous dossiers)

Ensuite le script de ton exemple j’essaye de m’en inspirer mais je bloque sur un point . ou dois je rajoutter ma ligne de conversion?

après do ?

voila ce que j’ai pour l’instant mais cela ne marche pas unexecpted done:

[code]#!/bin/bash

line=$(($RANDOM%ls -R --file-type /media/data/sounds/ | wc -l))
line=$((line + 1))

ls -R /media/data/sounds/ | nl | while read a b
do
lame --verbose --decode --output /media/data/sounds/burn/[ “$a” = “$line” ] && { /media/data/sounds/"$b"; break; }"$i" ${i/%.mp3/.wav}

done

exit 0[/code]

Je m’explique en fait j’aimerai qu’il m’en fasse un deja pour commencer (extrait dans /media/data/sounds/burn) , apres je repeterai x fois le meme morceaux de script afin que mon dossier /media/data/sounds/burn atteigne 700 Mo . Puis je normaliserai le tout, pour finalement graver et supprimer le contenu du dossier Wav.

En vous remerciant pour vos nombreuses aides. Merci

voila le premier script apres un peu de googling celui ci prend un fichier aleatoirement et le copie dans /media/data/sounds/burn

[code]#!/bin/bash

configuration

RANDOM_FILE="${MEDIA}/media/data/sounds/"
DEBUG=0

if [ $DEBUG == 1 ]
then
echo Starting in: "${RANDOM_FILE}"
fi

while [ -d $RANDOM_FILE ]
do
FILES_FOUND=ls -1 "${RANDOM_FILE}" | wc -l
RANDOM_NUMBER=$(( ${RANDOM} % ${FILES_FOUND} +1 ))

    RANDOM_FILE=${RANDOM_FILE}/`ls -1  "${RANDOM_FILE}" | head -n ${RANDOM_NUMBER} | tail -n 1`
    if [ $DEBUG == 1 ]
    then
            if [ -d $RANDOM_FILE ] 
            then
                    echo Descending in dir $RANDOM_FILE
            else	
		echo I/ve selected file $RANDOM_FILE 
	fi
fi	

done
if [ $DEBUG == 1 ]
then
echo Definitive file "${RANDOM_FILE}"
fi
sudo cp “${RANDOM_FILE}” /media/data/sounds/burn

if [ $DEBUG == 1 ]
then
echo Starting in: "${RANDOM_FILE}"
fi

while [ -d $RANDOM_FILE ]
do
FILES_FOUND=ls -1 "${RANDOM_FILE}" | wc -l
RANDOM_NUMBER=$(( ${RANDOM} % ${FILES_FOUND} +1 ))

    RANDOM_FILE=${RANDOM_FILE}/`ls -1  "${RANDOM_FILE}" | head -n ${RANDOM_NUMBER} | tail -n 1`
    if [ $DEBUG == 1 ]
    then
            if [ -d $RANDOM_FILE ] 
            then
                    echo Descending in dir $RANDOM_FILE
            else	
		echo I/ve selected file $RANDOM_FILE 
	fi
fi	

done
if [ $DEBUG == 1 ]
then
echo Definitive file "${RANDOM_FILE}"
fi
sudo cp “${RANDOM_FILE}” /media/data/sounds/burn[/code]

Maintenant je dois repeter ce script . dois je appeler un autre scripts qui execute ce script , ou puis-je le faire directement repeter dans le script.

Repeter 25 fois comme 25 pistes.

un petit up car c’est dommage je suis assez pres du but , si quelqu’un pouvait me donner un coup de pouce pour repeter ce script jusqu’à ce que le dossier burn atteigne 700 Mo. Cela serait sympa .

Merci par avance.

Tiens j’ai fait ça vite fait ce matin au boulot :slightly_smiling:

Il y a surement des optimisations et bugs à corriger car c’est la premiere fois que je fais un script en Bash mais il fonctionne.

#!/bin/bash

rep="/home/flamby/Musiques"
rep_copie="/home/flamby/Encodage"
duree_max=74

# converti duree_max en seconde
let "duree_max = $duree_max * 60"

# stock liste des fichiers mp3 dans un tableau
find $rep -type f | grep .mp3 | ( while read LINE
do
	tabfic[$i]=$LINE
	i=$(($i+1))
done

# calcul le nombre de fichier dans le tableau
nb_fichier=${#tabfic[@]}
i="0"

while [ "$sorti" != "fin" ] && [ "$i" -lt "$nb_fichier" ]
do
	# Genere un nombre aleatoire
	nombre=$(($RANDOM % $nb_fichier))
	nombre=$(($RANDOM % $nb_fichier))

	if [ -n "${tabfic[$nombre]}" ]
	then
		# Recup duree chanson
		# /!\ installer le paquet : mp3info
		mp3info -x "${tabfic[$nombre]}" > tmp 2>&1
      mm=`cat tmp | grep Length | cut -d ":" -f2`
		vrac=`cat tmp | grep Length | cut -d ":" -f3`
		ss=${vrac#0*}
		let "duree_fichier = $mm * 60"
		let "duree_fichier = $duree_fichier + $ss"	

		# calcul duree total avec nouvo fichier
		let "tmp = $duree_total + $duree_fichier"
	
		# si duree_total < duree_max
		if [ $tmp -lt $duree_max ]
		then
			duree_total=$tmp
			# on copie le fichier dans le rep
			cp "${tabfic[$nombre]}" $rep_copie 
			# on supprime le fichier du tableau
			#unset [$nombre]
			tabfic[$nombre]=""
			i=$(($i+1))
		else
			# on sort de la boucle. duree max atteint
			sorti="fin"
		fi
	fi
done

# supprime fichier tmp utilise pour calcul duree
rm tmp
)

# rajouter l'encodage, puis la normalisation et enfin la gravure

exit 0

PS : N’oubli pas d’installer le paquet : mp3info

Un grand merci a toi flamby . Desole j ai pas pu repondre avant , beaucoup de boulot .

J 'ai testé le script il marche impeccable apres j’ai rajouté la convertion cela marche aussi .

Par contre apres j 'essaye de rajouter :

cd /media/data/sounds/burn
for i in *.wav do
normalize-audio --mix *.wav
done

ce la marche pas pourtant le paquet nomalize audio est bien installé .

Pareil pour la gravure .

Le pire est que si je prends la ligne de commande dans un terminal elle fonctionne.

Pour la normalisation la commande du dessous suffit :

cd /media/data/sounds/burn
normalize-audio --mix *.wav

Après pour la gravure, c’est étrange car ta commande est bonne.
Donne moi le résultat de cette commande :

cdrecord --scanbus | grep [a-zA-Z]

scsibus1000:
1000,2,0 100002) ‘MATSHITA’ 'DVD-RAM UJ-815A ’ ‘D100’ Removable CD-ROM

la gravure merde pourtant mon graveur est bien sous /dev/hdc

cdrecord -v -eject dev=/dev/hdc speed=12 -pad -audio *.wav

e j’ai le message d’erreur suivant

TOC Type: 0 = CD-DA scsidev: '/dev/hdc' devname: '/dev/hdc' scsibus: -2 target: -2 lun: -2 Linux sg driver version: 3.5.27 Wodim version: 1.1.6 SCSI buffer size: 64512 Device type : Removable CD-ROM Version : 0 Response Format: 2 Capabilities : Vendor_info : 'MATSHITA' Identification : 'DVD-RAM UJ-815A ' Revision : 'D100' Device seems to be: Generic mmc2 DVD-R/DVD-RW. Current: 0x0009 (CD-R) Profile: 0x0012 (DVD-RAM) Profile: 0x0013 (DVD-RW restricted overwrite) Profile: 0x0014 (DVD-RW sequential recording) Profile: 0x0011 (DVD-R sequential recording) Profile: 0x0010 (DVD-ROM) Profile: 0x000A (CD-RW) Profile: 0x0009 (CD-R) (current) Profile: 0x0008 (CD-ROM) Profile: 0x0002 (Removable disk) Using generic SCSI-3/mmc CD-R/CD-RW driver (mmc_cdr). Driver flags : MMC-3 SWABAUDIO BURNFREE Supported modes: TAO PACKET SAO Drive buf size : 1343488 = 1312 KB Beginning DMA speed test. Set CDR_NODMATEST environment variable if device communication breaks or freezes immediately after that. FIFO size : 12582912 = 12288 KB wodim: Inappropriate audio coding in 'Heptagone (remix).wav'.

Hello Flamby et les autres mais surtout lui.

Donc le script marche impeccable à une seule nuance prête. Dans la seléction de recherche il faudrait selectionner que les mp3 qui ont une qualité d’échantillonage gravable.

J’ai remarqué que si il choppe des Mp3 de faible qualité ( par exemple 16 kbps) il refuse de graver.

A partir de quelle qualitéest ce possible de graver un audio?

Je vais essayer de l’intégrer dans la recherche ou flamby si tu as une idée n’hésites pas tu es le bienvenue.

En tout cas un grand merci à toi !!!

le script:

[code]#!/bin/bash

rep="/media/data/sounds"
rep_copie="/media/data/sounds/burn"
duree_max=72

converti duree_max en seconde

let “duree_max = $duree_max * 60”

stock liste des fichiers mp3 dans un tableau

find $rep -type f | grep .mp3 | ( while read LINE
do
tabfic[$i]=$LINE
i=$(($i+1))
done

calcul le nombre de fichier dans le tableau

nb_fichier=${#tabfic[@]}
i=“0”

while [ “$sorti” != “fin” ] && [ “$i” -lt “$nb_fichier” ]
do
# Genere un nombre aleatoire
nombre=$(($RANDOM % $nb_fichier))
nombre=$(($RANDOM % $nb_fichier))

if [ -n "${tabfic[$nombre]}" ] 
then 
   # Recup duree chanson 
   # /!\ installer le paquet : mp3info 
   mp3info -x "${tabfic[$nombre]}" > tmp 2>&1 
   mm=`cat tmp | grep Length | cut -d ":" -f2` 
   vrac=`cat tmp | grep Length | cut -d ":" -f3` 
   ss=${vrac#0*} 
   let "duree_fichier = $mm * 60" 
   let "duree_fichier = $duree_fichier + $ss"    

   # calcul duree total avec nouvo fichier 
   let "tmp = $duree_total + $duree_fichier" 
 
   # si duree_total < duree_max 
   if [ $tmp -lt $duree_max ] 
   then 
      duree_total=$tmp 
      # on copie le fichier dans le rep 
      cp "${tabfic[$nombre]}" $rep_copie 
      # on supprime le fichier du tableau 
      #unset [$nombre] 
      tabfic[$nombre]="" 
      i=$(($i+1)) 
   else 
      # on sort de la boucle. duree max atteint 
      sorti="fin" 
   fi 
fi 

done

supprime fichier tmp utilise pour calcul duree

rm tmp
)

rajouter l’encodage, puis la normalisation et enfin la gravure

cd /media/data/sounds/burn
for i in *.mp3; do
lame --verbose --decode “$i” “${i/%.mp3/.wav}”;
done
cd /media/data/sounds/burn
wodim -v -eject dev=/dev/hdc -tao -pad -audio *.wav
exit 0
[/code]