#!/bin/sh ################################################################# # Changelog: # * v0.1 - czw lip 14 22:31:03 CEST 2005 # * Konwersja miedzy wav, ogg, mp3, flac # # TODO: # * sprawdzenie listy argumentow # * verbose na zyczenie(!) # * kolorowe wyjscie? # * wszystkie komunikaty umiescic w zmiennych # ustawianych niezaleznie (LANG?) # * midi # * moduly # * line-in (+automatyczne ustawienie miksera) # * audio z avi/wmv/mpeg/mkv (za pomoca mplayer albo ffmpeg) # * inne PCM (aiff, au, raw) za pomoca sox # * kopiowanie tagow # * rozdzielenie funkcji i programu (a'la lib) (!) # * alternatywne kodery (ffmpeg) # * autodetekcja dostepnych funkcji na podstawie deps() # * porzadna detekcja typow (osobna funkcja?) # * pipes # ################################################################## ######################################## # Funkcje # ######################################## VERSION=0.1 function towav { TYPE=`file -b $1` TYPE=${TYPE%%' '*} FILENAME="$1" WAVNAME=${FILENAME%.*} # popraw koniec WAVNAME=${WAVNAME##*/}.wav # obetnij sciezke echo " -> Konwertuje na wav: " "$1" echo 0 $TYPE >> ~/x case $TYPE in "MP3"|"MPEG") mpg321 -w "$WAVNAME" "$FILENAME" >> ~/x ;; "Ogg") ogg123 -d wav -f "$WAVNAME" "$FILENAME" ;; "FLAC") flac -d "$FILENAME" ;; *) return 1 esac return "$?" } function tomp3 { # $1 - bitrate # $2 - mode # $3 - input wav file echo " -> mp3" lame --quiet -b $1 -m $2 "$3" ${3%.*}.mp3 return 0 } function tovorbis { # $1 - bitrate # $2 - mode # $3 - input wav file if [ "$2" == "mono" ]; then DOWNMIX="--downmix" fi echo " -> vorbis" oggenc --quiet -b $1 $DOWNMIX $3 -o ${3%.*}.ogg return 0 } function toflac { # $1 - input wav file echo " -> flac" flac --force --silent "$1" return 0 } function deps { LACK=0 for i in $@ do $i 2> /dev/null >> /dev/null if [ $? == 127 ]; then echo "Nie znaleziono $i, potrzebnego do dzialania." LACK=1 # czegos brakuje fi done if [ $LACK == "1" ]; then unset LACK echo echo "Niespelnione zaleznosci." echo "Sprawdz sciezki w PATH i/lub zainstaluj brakujace programy" echo exit 1 fi } ########################################################## # Program starts tutaj # ########################################################## # banner echo echo audio2audio $VERSION # na poczatku echo # sprawdz zaleznosci - deps() deps lame oggenc flac mpg321 ogg123 file # ustaw niezbedne zmienne IFS=" " PARAMS=( $@ ) # lista argumenow (pliki wejsciowe!) # zbierz parametry # $0 -b BITRATE -m MODE -f FORMAT input_files... while getopts b:m:f: c do case $c in b) BITRATE=$OPTARG ;; m) MODE=$OPTARG ;; f) FORMAT=$OPTARG ;; *) echo f_ck ;; esac done # cofnij indeks listy argumentow o 1 OPTIND=$(($OPTIND-1)) # PARAMS -> tablica argumentow # indeks iterowany po zakonczeniu bloku -> nastepny plik while [ "${PARAMS[$OPTIND]}" ] do INPUTFILE="${PARAMS[$OPTIND]}" # Skonwertuj na wav echo " * Plik: \"$INPUTFILE\"" echo -n " -> wav" towav "$INPUTFILE" 2> /dev/null >> /dev/null # towav() definiuje $WAVNAME if [ "$?" != "0" ]; then echo "Konwersja do wav nie udala się" fi # wywolaj konwerter wav->coś (argumenty w def funkcji) case $FORMAT in "vorbis") tovorbis $BITRATE $MODE "$WAVNAME" ;; "mp3") tomp3 $BITRATE $MODE "$WAVNAME" ;; "flac") toflac "$WAVNAME" ;; *) echo "Niewspierany format wyjsciowy: $FORMAT" ;; esac if [ -f "$WAVNAME" ]; then rm "$WAVNAME" fi OPTIND=$((OPTIND+1)) # natepny plik z listy done