#!/bin/bash # # # audio convert 0.1 # # a program to convert wav, ogg, mp3, mpc, flac, ape or wma files into wav, # ogg, mp3, mpc, flac or ape files. with an easy to use interface it's # actually possible to fill in the tags for a few formats, and choose the # quality of compression. # # copyright (C) 2005 linfasoft # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 # USA # # dependencies # bash # zenity # awk # mplayer -- if you want to decode wma files # lame # vorbis tools # id3tag # musepack-tools # flac # mac # # based on # wom_audioconverter, by yekcim , http://yeknan.free.fr. # version="0.1.1" ################################################# # TRADUCTIONS ###### Default = English ##### title="audio convert "$version"" pleasesel="please select at least one file." noselec=""$title" convert audio files. "$pleasesel"" choix="extension of output file:" warning="warning" proceed="already exists. overwrite?" recur=""$title" can't convert directory. "$pleasesel"" conversion="converting file:" ask_artist="enter the artist name:" ask_album="enter the album name:" ask_song="enter the song name:" ask_track="enter the track number:" ask_quality="select the desired quality:" confirmation="do you want to convert" decoding="decoding file:" case $LANG in ######## Français ######## fr* ) title="WOM audioconverter "$version"" pleasesel="Merci de selectionner au moins un fichier." noselec=""$title" permet de convertir des fichiers audio. "$pleasesel"" choix="Format du fichier de sortie :" warning="Attention" proceed="existe deja. Ecraser ?" recur=""$title" ne permet pas la conversion de dossiers. "$pleasesel"" conversion="Conversion du fichier :";; it* ) title="audio convert "$version"" pleasesel="per favore, scegli almeno un file." noselec=""$title" converte i file audio. "$pleasesel"" choix="formato di conversione:" warning="attenzione" proceed="esiste! sovrascrivo?" recur=""$title" non pu� convertire directory. "$pleasesel"" conversion="sto convertendo il file:" ask_artist="immetti il nome dell'artista:" ask_album="immetti il nome dell'album:" ask_song="immetti il nome della canzone:" ask_track="immetti il numero della traccia:" ask_quality="scegli la qualit� del file:" confirmation="vuoi convertire" decoding="sto decodificando il file:" esac ################################################# # FONCTIONS get_field_names () { artist_name=`zenity --entry --title="$title" --text="$ask_artist"` album_name=`zenity --entry --title="$title" --text="$ask_album"` song_name=`zenity --entry --title="$title" --text="$ask_song"` track_number=`zenity --entry --title="$title" --text="$ask_track"` } get_ogg_quality () { zenity --title="$title" --list --radiolist --column="" --column="$ask_quality" -- "-2" FALSE "-1" FALSE "0" FALSE "1" FALSE "2" FALSE "3" FALSE "4" FALSE "5" FALSE "6" TRUE "7" FALSE "8" FALSE "9" FALSE "10" } get_mp3_quality () { zenity --title="$title" --list --radiolist --column="" --column="$ask_quality" FALSE "medium" FALSE "standard" TRUE "extreme" FALSE "insane" } get_mpc_quality () { zenity --title="$title" --list --radiolist --column="" --column="$ask_quality" FALSE "thumb" FALSE "radio" TRUE "standard" FALSE "xtreme" } get_flac_quality () { zenity --title="$title" --list --radiolist --column="" --column="$ask_quality" FALSE "0" FALSE "1" FALSE "2" FALSE "3" FALSE "4" FALSE "5" FALSE "6" FALSE "7" TRUE "8" } get_mac_quality () { zenity --title="$title" --list --radiolist --column="" --column="$ask_quality" FALSE "1000" FALSE "2000" TRUE "3000" FALSE "4000" FALSE "5000" } mp3_encode () { lame -m auto --preset $quality "$2" "$3" 2>&1 | awk -vRS='\r' '(NR>3){gsub(/[()%|]/," ");print $2; fflush();}' | zenity --progress --title="$title" --text="$conversion $1" --auto-close } ogg_encode () { oggenc "$2" -a "$artist_name" -l "$album_name" -t "$song_name" -N "$track_number" -q $quality -o "$3" 2>&1 | awk -vRS='\r' '(NR>1){gsub(/%/," ");print $2; fflush();}' | zenity --progress --title="$title" --text="$conversion $1" --auto-close } mpc_encode () { mppenc --$quality "$2" "$3" 2>&1 | awk -vRS='\r' '!/^$/{if (NR>5) print $1; fflush();}' | zenity --progress --title="$title" --text="$conversion $1" --auto-close } flac_encode () { flac --compression-level-$quality "$2" -o "$3" 2>&1 | awk -vRS='\r' -F':' '!/wrote/{gsub(/ /,"");if(NR>1)print $2; fflush();}' | awk -F'%' '{print $1; fflush();}' | zenity --progress --title="$title" --text="$conversion $1" --auto-close } mac_encode () { mac "$2" "$3" -c$quality 2>&1 | awk -vRS='\r' '(NR>1){gsub(/%/," ");print $2; fflush();}' | zenity --progress --title="$title" --text="$conversion $1" --auto-close } mp3_decode () { temp_file=`echo "$1" | sed 's/\.\w*$/'.wav'/'` lame --decode "$1" "$temp_file" 2>&1 | awk -vRS='\r' -F'[ /]+' '(NR>2){if((100*$2/$3)<=100)print 100*$2/$3; fflush();}' | zenity --progress --title="$title" --text="$2 $1" --auto-close } ogg_decode () { temp_file=`echo "$1" | sed 's/\.\w*$/'.wav'/'` oggdec "$1" -o "$temp_file" 2>&1 | awk -vRS='\r' '(NR>1){gsub(/%/," ");print $2; fflush();}' | zenity --progress --title="$title" --text="$2 $1" --auto-close } mpc_decode () { temp_file=`echo "$1" | sed 's/\.\w*$/'.wav'/'` mppdec "$1" "$temp_file" 2>&1 | awk -vRS='\r' -F'[ (]+' '!/s/{gsub(/(%)/," ");if(NR>5)print $5; fflush();}' | zenity --progress --title="$title" --text="$2 $1" --auto-close } flac_decode () { temp_file=`echo "$1" | sed 's/\.\w*$/'.wav'/'` flac -d "$1" -o "$temp_file" 2>&1 | awk -vRS='\r' -F':' '!/done/{gsub(/ /,"");gsub(/% complete/,"");if(NR>1)print $2; fflush();}' | zenity --progress --title="$title" --text="$2 $1" --auto-close } mac_decode () { temp_file=`echo "$1" | sed 's/\.\w*$/'.wav'/'` mac "$1" "$temp_file" -d 2>&1 | awk -vRS='\r' '(NR>1){gsub(/%/," ");print $2; fflush();}' | zenity --progress --title="$title" --text="$2 $1" --auto-close } wma_decode () { temp_file=`echo "$1" | sed 's/\.\w*$/'.wav'/'` mplayer -ao pcm:file="$temp_file" "$1" 2>&1 | awk -vRS='\r' '(NR>1){gsub(/%/," ");print 100-$5; fflush();}' | zenity --progress --title="$title" --text="$2 $1" --auto-close } caf () # fonction "convert audio file" { ### Format in_file = mp3 ### if [ "`file -b "$1" | grep 'MP3'`" != "" ] || [ "`echo $1 | grep -i '\.mp3$'`" != "" ] then if [ "$3" = "ogg" ] then # mp3-2-ogg get_field_names "$1" quality="$(get_ogg_quality)" mp3_decode "$1" "$decoding" ogg_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "mpc" ] then # mp3-2-mpc quality="$(get_mpc_quality)" mp3_decode "$1" "$decoding" mpc_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "flac" ] then # mp3-2-flac quality="$(get_flac_quality)" mp3_decode "$1" "$decoding" flac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "ape" ] then # mp3-2-ape quality="$(get_mac_quality)" mp3_decode "$1" "$decoding" mac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "wav" ] then # mp3-2-wav mp3_decode "$1" "$conversion" fi break fi ### Format in_file = ogg ### if [ "`file -b "$1" | grep 'Vorbis'`" != "" ] || [ "`echo $1 | grep -i '\.ogg$'`" != "" ] then if [ "$3" = "mp3" ] then # ogg-2-mp3 get_field_names "$1" quality="$(get_mp3_quality)" ogg_decode "$1" "$decoding" mp3_encode "$1" "$temp_file" "$2" rm -f "$temp_file" id3tag -a"$artist_name" -A"$album_name" -s"$song_name" -t"$track_number" "$2" break fi if [ "$3" = "mpc" ] then # ogg-2-mpc quality="$(get_mpc_quality)" ogg_decode "$1" "$decoding" mpc_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "flac" ] then # ogg-2-flac quality="$(get_flac_quality)" ogg_decode "$1" "$decoding" flac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "ape" ] then # ogg-2-ape quality="$(get_mac_quality)" ogg_decode "$1" "$decoding" mac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "wav" ] then # ogg-2-wav ogg_decode "$1" "$conversion" fi break fi ### Format in_file = mpc ### if [ "`file -b "$1" | grep 'data'`" != "" ] && [ "`echo $1 | grep -i '\.mpc$'`" != "" ] then if [ "$3" = "mp3" ] then # mpc-2-mp3 get_field_names "$1" quality="$(get_mp3_quality)" mpc_decode "$1" "$decoding" mp3_encode "$1" "$temp_file" "$2" rm -f "$temp_file" id3tag -a"$artist_name" -A"$album_name" -s"$song_name" -t"$track_number" "$2" break fi if [ "$3" = "ogg" ] then # mpc-2-ogg get_field_names "$1" quality="$(get_ogg_quality)" mpc_decode "$1" "$decoding" ogg_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "flac" ] then # mpc-2-flac quality="$(get_flac_quality)" mpc_decode "$1" "$decoding" flac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "ape" ] then # mpc-2-ape quality="$(get_mac_quality)" mpc_decode "$1" "$decoding" mac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "wav" ] then # mpc-2-wav mpc_decode "$1" "$conversion" break fi break fi ### Format in_file = flac ### if [ "`file -b "$1" | grep 'FLAC'`" != "" ] || [ "`echo $1 | grep -i '\.flac$'`" != "" ] then if [ "$3" = "mp3" ] then # flac-2-mp3 get_field_names "$1" quality="$(get_mp3_quality)" flac_decode "$1" "$decoding" mp3_encode "$1" "$temp_file" "$2" rm -f "$temp_file" id3tag -a"$artist_name" -A"$album_name" -s"$song_name" -t"$track_number" "$2" break fi if [ "$3" = "ogg" ] then # flac-2-ogg get_field_names "$1" quality="$(get_ogg_quality)" flac_decode "$1" "$decoding" ogg_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "mpc" ] then # flac-2-mpc quality="$(get_mpc_quality)" flac_decode "$1" "$decoding" mpc_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "ape" ] then # flac-2-ape quality="$(get_mac_quality)" flac_decode "$1" "$decoding" mac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "wav" ] then # flac-2-wav flac_decode "$1" "$conversion" break fi break fi ### Format in_file = ape ### if [ "`file -b "$1" | grep 'data'`" != "" ] && [ "`echo $1 | grep -i '\.ape$'`" != "" ] then if [ "$3" = "mp3" ] then # ape-2-mp3 get_field_names "$1" quality="$(get_mp3_quality)" mac_decode "$1" "$decoding" mp3_encode "$1" "$temp_file" "$2" rm -f "$temp_file" id3tag -a"$artist_name" -A"$album_name" -s"$song_name" -t"$track_number" "$2" break fi if [ "$3" = "ogg" ] then # ape-2-ogg get_field_names "$1" quality="$(get_ogg_quality)" mac_decode "$1" "$decoding" ogg_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "mpc" ] then # ape-2-mpc quality="$(get_mpc_quality)" mac_decode "$1" "$decoding" mpc_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "flac" ] then #ape-2-flac quality="$(get_flac_quality)" mac_decode "$1" "$decoding" flac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "wav" ] then #ape-2-wav mac_decode "$1" "$conversion" break fi break fi ### Format in_file = wav ### if [ "`file -b "$1" | grep 'WAVE'`" != "" ] || [ "`echo $1 | grep -i '\.wav$'`" != "" ] then if [ "$3" = "mp3" ] then # wav-2-mp3 get_field_names "$1" quality="$(get_mp3_quality)" mp3_encode "$1" "$1" "$2" id3tag -a"$artist_name" -A"$album_name" -s"$song_name" -t"$track_number" "$2" break fi if [ "$3" = "ogg" ] then # wav-2-ogg get_field_names "$1" quality="$(get_ogg_quality)" ogg_encode "$1" "$1" "$2" break fi if [ "$3" = "mpc" ] then # wav-2-mpc quality="$(get_mpc_quality)" mpc_encode "$1" "$1" "$2" break fi if [ "$3" = "flac" ] then # wav-2-flac quality="$(get_flac_quality)" flac_encode "$1" "$1" "$2" break fi if [ "$3" = "ape" ] then # wav-2-ape quality="$(get_mac_quality)" mac_encode "$1" "$1" "$2" break fi break fi ### Format in_file = wma ### if [ "`file -b "$1" | grep 'Microsoft'`" != "" ] || [ "`echo $1 | grep -i '\.wma$'`" != "" ] then if [ "$3" = "mp3" ] then # wma-2-mp3 get_field_names "$1" quality="$(get_mp3_quality)" wma_decode "$1" "$decoding" mp3_encode "$1" "$temp_file" "$2" rm -f "$temp_file" id3tag -a"$artist_name" -A"$album_name" -s"$song_name" -t"$track_number" "$2" break fi if [ "$3" = "wav" ] then # wma-2-wav wma_decode "$1" "$conversion" break fi if [ "$3" = "ogg" ] then # wma-2-ogg get_field_names "$1" quality="$(get_ogg_quality)" wma_decode "$1" "$decoding" ogg_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "mpc" ] then # wma-2-mpc quality="$(get_mpc_quality)" wma_decode "$1" "$decoding" mpc_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "flac" ] then # wma-2-flac quality="$(get_flac_quality)" wma_decode "$1" "$decoding" flac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi if [ "$3" = "ape" ] then # wma-2-ape quality="$(get_mac_quality)" wma_decode "$1" "$decoding" mac_encode "$1" "$temp_file" "$2" rm -f "$temp_file" break fi break fi } ################################################# # PROGRAMME #### Pas de fichiers sélectionné ### if [ $# -eq 0 ]; then zenity --error --title="$warning" --text="$noselec" exit 1 fi ######## Check dépendance pour oggenc ou lame ####### depformat="" if which lame 2>/dev/null then if [ `echo $1 | cut -d . -f 2` != mp3 ] then depformat="mp3" fi fi if which oggenc 2>/dev/null then if [ `echo $1 | cut -d . -f 2` != ogg ] then depformat="$depformat ogg" fi fi if which mppenc 2>/dev/null then if [ `echo $1 | cut -d . -f 2` != mpc ] then depformat="$depformat mpc" fi fi if which flac 2>/dev/null then if [ `echo $1 | cut -d . -f 2` != flac ] then depformat="$depformat flac" fi fi if which mac 2>/dev/null then if [ `echo $1 | cut -d . -f 2` != ape ] then depformat="$depformat ape" fi fi if [ `echo $1 | cut -d . -f 2` != wav ] then depformat="$depformat wav" fi ######## Fenêtre principale ######## while [ ! "$formatout" ] # Réafficher la fenêtre tant que l'utilisateur n'a pas fait de choix do formatout=`zenity --title "$title" --list --column="Format" $depformat --text "$choix"` ###### Choix -> Sortie boucle ###### if [ $? != 0 ]; then exit 1 fi [ $? -ne 0 ] && exit 2 # Annulation done ########## Conversion ############ #let "nbfiles = $#" #compteur=0; file_number=$# (while [ $# -gt 0 ]; do for i in $formatout; do in_file=$1 out_file=`echo "$in_file" | sed 's/\.\w*$/'.$formatout'/'` #echo "# $conversion $in_file" i=`echo $i | sed 's/"//g'` while `true`; do ########## Le fichier de sortie existe déj�| , l'écraser ? ########## if [ "`ls "$out_file" | grep -v "^ls"`" != "" ] then if !(`gdialog --title "$warning" --yesno "$out_file $proceed" 200 100`) then break fi fi if [ "$file_number" -gt 1 ] && [ "$formatout" != "wav" ] then answer=`zenity --question --text="$confirmation $in_file in $out_file?"` fi caf "$in_file" "$out_file" "$formatout" # Lancer la conversion break shift done ######### Progression ######## # let "compteur += 1" # let "progress = compteur*100/nbfiles" # echo $progress done shift done )