Tiens, j’ai fait ça à l’arrache, mais ça pourrait donner une idée :
[code]#!/bin/bash
#nécessite dmenu, genisoimage wodim, éventuellement oggdec, sox, lame, flac pour les conversions
SB="#AFAFAF"
SF="#000000"
NB="#0C0C0C"
NF="#D4D4D4"
TERM=“urxvt -e”
liste_ () {
LISTE=ls -1 -a -F --sort=extension | dmenu -fn 'fixed' -nb $NB -nf $NF -sb $SB -sf $SF -l 17 -p "$PWD" -i
echo “$LISTE”
}
action_ () {
case $1 in
*/ | … )
ACTION=$(echo “Le Graver
Changer de répertoire” | dmenu -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -p “Que faire?” -i)
case $ACTION in
"Le Graver" )
echo "$PWD/$1 " >> /tmp/liste_a_graver
;;
“Changer de répertoire” )
cd $1
;;
esac
;;
* )
echo "$PWD/$1 " >> /tmp/liste_a_graver
;;
esac
}
edite_ () {
ACTION=$(echo "$(cat /tmp/liste_a_graver)
Ajouter des fichiers
Fini!" | dmenu -l 6 -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF)
while [ “$ACTION” != “Fini!” ]; do
case $ACTION in
"Ajouter des fichiers" ) ajoute_ ;;
“Fini!” ) break ;;
* )
grep -q “^$ACTION” /tmp/liste_a_graver
if [ $? = 0 ]; then
grep -v “^$ACTION” /tmp/liste_a_graver > /tmp/liste_a_graver_tmp
mv /tmp/liste_a_graver_tmp /tmp/liste_a_graver
fi
;;
esac
ACTION=$(echo "$(cat /tmp/liste_a_graver)
Ajouter des fichiers
Fini!" | dmenu -l 6 -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF)
done
}
ajoute_ () {
v_=$IFS
IFS=’
'
INDEX="$(liste_)"
#tant que on donne de quoi manger à action, elle tourne
while [ “$INDEX” != “” ]; do
action_ $INDEX
INDEX="$(liste_)"
done
IFS=$v_
}
grave_donnees_ () {
ajoute_
#on édite la liste qui est à graver :
edite_
NOMVOLUME=$(echo " " | dmenu -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -p “Nom du volume?” -i)
if [ -n “$(cat /tmp/liste_a_graver)” ]; then
###on lance la gravure
$TERM genisoimage -R -r -J --hide-rr-moved -V "$NOMVOLUME" -o /tmp/$NOMVOLUME.iso $(cat /tmp/liste_a_graver)
$TERM wodim -v dev=/dev/scd0 -data /tmp/$NOMVOLUME.iso
fi
}
grave_audio_ () {
##on copie les pistes à graver dans un dossier temporaire
#, puis on les convertit.
v_=$IFS
IFS=’
'
mkdir -p /tmp/gravure_audio_tmp
INDEX="$(ls -d *.mp3 *.wav *.flac *.ogg */ … --sort=extension | dmenu -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -l 17 -p “$PWD” -i)“
while [ “$INDEX” != “” ]; do
case $INDEX in
*/ | … )
cd $INDEX
;;
*.mp3 | *.wav | *.flac | *.ogg )
cp $INDEX /tmp/gravure_audio_tmp
;;
esac
INDEX=”$(ls -d *.mp3 *.wav *.flac *.ogg */ … --sort=extension | dmenu -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -l 17 -p “$PWD” -i)"
done
IFS=$v_
#on édite la liste qui est à graver :
#edite_
#on procède à la conversion
[ -d /tmp/gravure_audio_tmp ]
if [ $? = 0 ]; then
cd /tmp/gravure_audio_tmp
echo "va être gravé : "
ls
sleep 3
for i in *.[Mm][Pp]3; do mv “$i” echo $i | tr '[A-Z]' '[a-z]'
; done
for i in *.MP3; do mv “$i” “basename "$i" .MP3
.mp3”; done
echo "conversion des mp3 en wav"
for i in *.mp3; do
lame --verbose --decode “$i” “${i/%.mp3/.wav}”;
done
echo "conversion des ogg en wav"
oggdec *.ogg
echo "conversion des flac en wav"
flac --decode *.flac
echo "normalisation"
normalize-audio --mix *.wav
for i in *.wav ; do
echo "Traitement de ${i}"
sox “$i” "${i/%.wav/.cdr}"
done
echo “c’est parti pour la gravure!”
$TERM wodim -v -dev=/dev/scd0 -pad -dao -audio *.cdr
fi
}
efface_disque_ () {
EFFACEMENT=$(echo “Rapide
Complet” |dmenu -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -p “Effacement …?” -i)
case $EFFACEMENT in
Rapide ) $TERM wodim blank=fast ;;
Complet ) $TERM wodim blank=all ;;
esac
}
GRAVURE=$(echo “Disque de données
Disque audio
Effacer le disque” | dmenu -fn ‘fixed’ -nb $NB -nf $NF -sb $SB -sf $SF -p “Quel type de gravure voulez-vous réaliser?” -i)
case $GRAVURE in
"Disque de données" ) grave_donnees_ ;;
“Disque audio” ) grave_audio_ ;;
“Effacer le disque” ) efface_disque_ ;;
esac
rm /tmp/$NOMVOLUME.iso
rm -r /tmp/gravure_audio_tmp
exit
[/code]
Je pourrais faire une version console, pour éviter d’avoir à installer dmenu si tu le souhaites. ça, au moins, ce serait léger
.