Konwersja plików muzycznych


Przy tworzeniu własnych płyt audio potrzebne są programy do wypalania i do konewrsji plików muzycznych. Do wypalania stosuję z powodzeniem program xcdroast, ale nie udało mi się znaleźć programu, który przeprowadza konwersję wielu formatów muzycznych. Stworzyłem więc skrypt powłoki współpracujący z programem dialog. Do poprawnej pracy są potrzebne n/z programy z ustawionym bitem UID:

Oprócz tego bit UID musi miec także program mount i eject. Skrypt, który nazwałem konwersja umieściłem w swoim katalogu domowym w Bin. Pliki do konwersji są pobierane z cdromu lub z /home/andrzej/, co będzie widać na poniższych zrzutach. Przy konwersji CDaudio - wav lub CDaudio - ogg, do zaznaczenia numerów utworów i ich odsłuchu korzystam z programu KsCD. Utworzone pliki znajdują się w luźnych plikach katalogu domowego. Inaczej wygląda konwersja w drugą stronę. W tym przypadku pliki ogg, mp3 należy przekopiować do lużnych plików katalogu domowego i dopiero wtedy należy uruchomić skrypt. Aby ułatwić uruchamianie w edytorze menu tworzymy nową pozycję i jako uruchomienie wpisujemy /home/Andrzej/Bin/konwersja i zaznaczamy uruchomienie z terminala. Program pracuje dobrze i jest w pełni funkcjonalny.












Skrypt można pobrać stąd, a jego zawartość jest zamieszczona poniżej. Ze względu na czytelność strony długie linie skryptu są złamane, co zaznaczyłem napisem łam.

#!/bin/sh
#set -x

reader="/dev/cdrom"
number="0,0,0" 
tempfile="/tmp/.tempfile"
driver="generic-mmc"
buffers="128"
umount_call="umount"

cdparanoia_test="cdparanoia -d $reader -Q"
cdparanoia_read="cdparanoia -d $reader -B"

for program in cdparanoia
do
    if [ "`which $program 2> /dev/null`" = "" ]; then
	echo Brak \"$program\" program.
	echo
	echo Press [Enter].
	read
	exit
    fi
done
backtitle="Skrypt Andrzeja Sperczyńskiego z 14 maja 2003 r oparty w części na cdwrite"
a=0
b=0
c=0
$umount_call $cdrw 2> /dev/null

while [ "$a" = "0" ]; do
    dialog --backtitle "$backtitle" \
    --title "Konwersje AUDIO" \
    --menu "Wybierz pozycje" 0 0 0 \
    Konwertuj_CDa-Ogg "" \
    Konwertuj_CDa-Wav "" \
    Konwertuj_Wav-Ogg "" \
    Konwertuj_Ogg-Wav "" \
    Konwertuj_Wav-Mp3 "" \
    Konwertuj_Mp3-Wav "" \
    Koniec "" 2> $tempfile
    a=$?
    b=`cat $tempfile`
    case $b in 
    Konwertuj_CDa-Ogg)
        mount /dev/cdrom
	    echo Proszę czekać..
            $cdparanoia_test 2> $tempfile
	    tracks=`cat $tempfile | grep -B 1 "TOTAL" | grep "\. " | cut -d "." -f 1`
	    if [ "$tracks" != "" ]; then
        	declare -i n=1
        	> $tempfile
        	echo dialog --backtitle \"\$backtitle\" \\ >> $tempfile
        	echo --title \"Track list\" \\ >> $tempfile
        	echo --checklist \"Select tracks\" 0 0 0 \\ >> $tempfile
        	while [ $n -lt $tracks ]
        	do
            	    echo $n \" \" off \\ >> $tempfile
            	    n=$n+1
        	done
        	echo $n \" \" off 2\> $tempfile >> $tempfile
        	chmod u+x $tempfile
        	$tempfile
        	chmod u-x $tempfile
        	echo "`cat $tempfile | sed 's/\"//g'`" > $tempfile
        	declare -i n=1
        	track=`cat $tempfile | cut -d " " -f$n`
        	clear
		while [ "$track" != "" ]; do
            	    trackfile=01.wav
            	    for prefix in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 (łam)
					15 16 17 18 19 20 21 22 23 24 25 26 (łam)
					27 28 29 30 31 32 33 34 35 36 37 38 (łam)
					39 40 41 42 43 44 45 46 47 48 49 50
            	    do
                	if [ -f "$trackfile" ]; then
                    	    trackfile=$prefix.wav
                	fi
		    done
            	    echo Executing: $cdparanoia_read $track $trackfile
            	    $cdparanoia_read $track $trackfile
		    mv track??.$trackfile $trackfile
            	    n=$n+1
            	    track=`cat $tempfile | cut -d " " -f$n`
				
        	done
		eject
	    else
		echo To nie jest płyta AUDIO \"$reader\" drive.
		echo
		echo Press [Enter].
		read
    		eject
	    fi
	    oggenc -q 5 *.wav
	    rm -f *.wav
    ;;
	Konwertuj_CDa-Wav)
    	    mount /dev/cdrom
	    echo Proszę czekać..
            $cdparanoia_test 2> $tempfile
	    tracks=`cat $tempfile | grep -B 1 "TOTAL" | grep "\. " | cut -d "." -f 1`
	    if [ "$tracks" != "" ]; then
        	declare -i n=1
        	> $tempfile
        	echo dialog --backtitle \"\$backtitle\" \\ >> $tempfile
        	echo --title \"Track list\" \\ >> $tempfile
        	echo --checklist \"Select tracks\" 0 0 0 \\ >> $tempfile
        	while [ $n -lt $tracks ]
        	do
            	    echo $n \" \" off \\ >> $tempfile
            	    n=$n+1
        	done
        	echo $n \" \" off 2\> $tempfile >> $tempfile
        	chmod u+x $tempfile
        	$tempfile
        	chmod u-x $tempfile
        	echo "`cat $tempfile | sed 's/\"//g'`" > $tempfile
        	declare -i n=1
        	track=`cat $tempfile | cut -d " " -f$n`
        	clear
		while [ "$track" != "" ]; do
            	    trackfile=01.wav
            	    for prefix in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 (łam)
					15 16 17 18 19 20 21 22 23 24 25 26 (łam)
					27 28 29 30 31 32 33 34 35 36 37 38 (łam)
					39 40 41 42 43 44 45 46 47 48 49 50
            	    do
                	if [ -f "$trackfile" ]; then
                    	    trackfile=$prefix.wav
                	fi
            	    done
            	    echo Executing: $cdparanoia_read $track $trackfile
            	    $cdparanoia_read $track $trackfile
            	    mv track??.$trackfile $trackfile
            	    n=$n+1
            	    track=`cat $tempfile | cut -d " " -f$n`
        	done
    		eject
	    else
		echo To nie jest płyta AUDIO \"$reader\" drive.
		echo
		echo Press [Enter].
		read
    		eject
	    fi
        ;;
    Konwertuj_Wav-Ogg)
	clear
	oggenc -q 5 *wav
    ;;
    Konwertuj_Ogg-Wav)
	clear
	oggdec *ogg
    ;;    
    Konwertuj_Wav-Mp3)
	clear
	bladeenc *wav
    ;;
    Konwertuj_Mp3-Wav)
	clear
	find *.mp3 > mp3wav_tmp
	for c in `cat mp3wav_tmp`
	do
        mpg123 -w $c.wav $c
	done
	rm -f mp3wav_tmp
    ;;
    Koniec) a=1
    ;;
    esac
done

rm -f $tempfile
  

do góry