Peter der Große
24-01-2004, 20:29
hi
ich hab mir in den letzten drei tagen, das buch einführung in perl reingezogen.
ist echt nicht schlecht, aber ich hab oft keine ahnung was ich da gerade mache?
Ja, mir wird selbst angst dabei!
darum, hab ich mir gedacht, frag mal hier im forum.
ich will, so zur übung, ein script schreiben, dass audio-cd's in mp3's umwandelt.
natürlich mit einer cddb abfrage, und automatischer playlisterstellung.
also das ist mein erstes perl-script, bitte bei der kritik berücksichtigen
#!/usr/bin/perl -w
#------------------------------------------------------------------------------
#Module
#------------------------------------------------------------------------------
#use Net::CDDB; # Kann das kack modul leider nicht finden ist aber laut apt-get istalliert
#-------------------------------------------------------------------------------
# Variablen
#-------------------------------------------------------------------------------
# Arbeitsverzeichniss des Script's
#
$scrdir="/mp3/script" ;
#-------------------------------------------------------------------------------
# Subroutinen
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Die eingelegte CD wird über CDDB abgefragt
#
sub getcddb {
if (system 'isdnctrl status ippp0 > /dev/null') {
print "Sie sind nicht mit dem Internet verbunden! Wählen Sie sich bitte ein.\n";
}
else {
if (system `dagrab -d /dev/cdrom -H www.freedb.org -P 888 -Ci > $scrdir/cddb.tmp`) {
# Macht man das so? eine tmp datei?
print "Die CDDB-Anfrage war erfolgreich!\n";
}
}
}
sub getcddbint {
# cddb abfrage mit perl modul
if (system 'isdnctrl status ippp0 > /dev/null') {
print "Sie sind nicht mit dem Internet verbunden! Wählen Sie sich bitte ein.\n";
}
else {
my $disc_data=`discid`;
chomp ($disc_data);
my ($cat,$disc_id,$artist,$title) = cddb_query($disc_data);
print "$cat\n";
print "$disc_id\n";
print "$artist\n";
print "$title\n";
my ($title,@tracks) = cddb_read("$cat $disc_id");
my $num_tracks = $#tracks + 1;
print "$title\n";
print "$num_tracks";
foreach (@tracks) {
$num++;
print "$num. $_\n";
}
}
#------------------------------------------------------------------------------
# Das Album und der Interpret werden gespeichert
#
sub cdinfo {
open CDDBTMP, "$scrdir/cddb.tmp"
or die "Huch! Wo ist denn die Datei hingekommen?\n";
while (<CDDBTMP>) {
if ( /(DISK: )\s(.*)\s\/\s(.*)/ ) {
$artist="$2";
$album="$3";
}
}
close CDDBTMP;
}
#------------------------------------------------------------------------------
# Die Titel werden in ein Array gespeichert
#
# sieht auch irgendwie seltsam aus, funktioniert aber!
sub titles {
open CDDBTMP, "$scrdir/cddb.tmp"
or die "Huch! Wo ist denn die Datei hingekommen?\n";
while (<CDDBTMP>) {
if ( /\s*(\d*)\s*\d*\s*\d*\s\w*\s*(\d*:\d*:\d*)\s*\d*\s* \d*\s*(.*)/ ) {
push @tracks, $1;
push @times, $2;
push @titles, $3;
# print "$1 - $2 - $3\n";
}
}
close CDDBTMP;
}
#------------------------------------------------------------------------------
# CD auf Festplatte rippen
#
sub cdrip {
print "Rippe CD\n";
if (system `dagrab -a &> /dev/null `) {
print "Rippen beendet\n";
}
else {
print "Rippen fehlgeschlagen\n";
}
}
#------------------------------------------------------------------------------
# Wav => MP3
#
sub wav2mp3 {
@wav = <$scrdir/*.wav>;
foreach (@wav) {
$titles1 = pop @titles;
$tracks1 = pop @tracks;
$opt="-b 192 -m s -h --tt $titles1 --tl $album --ta $artist -tn $tracks1";
# wo soll ich die variablen abspeichern?
print "$opt\n";
system "lame", "$opt", "$_";
}
}
#------------------------------------------------------------------------------
# Test Subroutine
#
sub testing {
#print "$artist\n";
#print "$album\n";
#foreach (@tracks) {
# print "$_\n";
# }
foreach (@wav) {
print "$_\n";
}
}
#------------------------------------------------------------------------------
# Aufrufen der Subroutinen
#------------------------------------------------------------------------------
#&getcddb;
&getdccbint;
#print "$?\n";
#&cdinfo;
#&titles;
#&wav2mp3;
#&testing;
also, wenn jemand so freundlich wäre und jetzt kritik an der syntax
und den anderen dingen nehmen würde, wäre dass schon mal toll!
benutzt man so subroutinen?
soll ich use strict benuzen?
ich hab das script auch gleich mal angehängt, vielleicht findet sich ja einer der
es ein bischen modifiziert.
sers
peter der große
ich hab mir in den letzten drei tagen, das buch einführung in perl reingezogen.
ist echt nicht schlecht, aber ich hab oft keine ahnung was ich da gerade mache?
Ja, mir wird selbst angst dabei!
darum, hab ich mir gedacht, frag mal hier im forum.
ich will, so zur übung, ein script schreiben, dass audio-cd's in mp3's umwandelt.
natürlich mit einer cddb abfrage, und automatischer playlisterstellung.
also das ist mein erstes perl-script, bitte bei der kritik berücksichtigen
#!/usr/bin/perl -w
#------------------------------------------------------------------------------
#Module
#------------------------------------------------------------------------------
#use Net::CDDB; # Kann das kack modul leider nicht finden ist aber laut apt-get istalliert
#-------------------------------------------------------------------------------
# Variablen
#-------------------------------------------------------------------------------
# Arbeitsverzeichniss des Script's
#
$scrdir="/mp3/script" ;
#-------------------------------------------------------------------------------
# Subroutinen
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Die eingelegte CD wird über CDDB abgefragt
#
sub getcddb {
if (system 'isdnctrl status ippp0 > /dev/null') {
print "Sie sind nicht mit dem Internet verbunden! Wählen Sie sich bitte ein.\n";
}
else {
if (system `dagrab -d /dev/cdrom -H www.freedb.org -P 888 -Ci > $scrdir/cddb.tmp`) {
# Macht man das so? eine tmp datei?
print "Die CDDB-Anfrage war erfolgreich!\n";
}
}
}
sub getcddbint {
# cddb abfrage mit perl modul
if (system 'isdnctrl status ippp0 > /dev/null') {
print "Sie sind nicht mit dem Internet verbunden! Wählen Sie sich bitte ein.\n";
}
else {
my $disc_data=`discid`;
chomp ($disc_data);
my ($cat,$disc_id,$artist,$title) = cddb_query($disc_data);
print "$cat\n";
print "$disc_id\n";
print "$artist\n";
print "$title\n";
my ($title,@tracks) = cddb_read("$cat $disc_id");
my $num_tracks = $#tracks + 1;
print "$title\n";
print "$num_tracks";
foreach (@tracks) {
$num++;
print "$num. $_\n";
}
}
#------------------------------------------------------------------------------
# Das Album und der Interpret werden gespeichert
#
sub cdinfo {
open CDDBTMP, "$scrdir/cddb.tmp"
or die "Huch! Wo ist denn die Datei hingekommen?\n";
while (<CDDBTMP>) {
if ( /(DISK: )\s(.*)\s\/\s(.*)/ ) {
$artist="$2";
$album="$3";
}
}
close CDDBTMP;
}
#------------------------------------------------------------------------------
# Die Titel werden in ein Array gespeichert
#
# sieht auch irgendwie seltsam aus, funktioniert aber!
sub titles {
open CDDBTMP, "$scrdir/cddb.tmp"
or die "Huch! Wo ist denn die Datei hingekommen?\n";
while (<CDDBTMP>) {
if ( /\s*(\d*)\s*\d*\s*\d*\s\w*\s*(\d*:\d*:\d*)\s*\d*\s* \d*\s*(.*)/ ) {
push @tracks, $1;
push @times, $2;
push @titles, $3;
# print "$1 - $2 - $3\n";
}
}
close CDDBTMP;
}
#------------------------------------------------------------------------------
# CD auf Festplatte rippen
#
sub cdrip {
print "Rippe CD\n";
if (system `dagrab -a &> /dev/null `) {
print "Rippen beendet\n";
}
else {
print "Rippen fehlgeschlagen\n";
}
}
#------------------------------------------------------------------------------
# Wav => MP3
#
sub wav2mp3 {
@wav = <$scrdir/*.wav>;
foreach (@wav) {
$titles1 = pop @titles;
$tracks1 = pop @tracks;
$opt="-b 192 -m s -h --tt $titles1 --tl $album --ta $artist -tn $tracks1";
# wo soll ich die variablen abspeichern?
print "$opt\n";
system "lame", "$opt", "$_";
}
}
#------------------------------------------------------------------------------
# Test Subroutine
#
sub testing {
#print "$artist\n";
#print "$album\n";
#foreach (@tracks) {
# print "$_\n";
# }
foreach (@wav) {
print "$_\n";
}
}
#------------------------------------------------------------------------------
# Aufrufen der Subroutinen
#------------------------------------------------------------------------------
#&getcddb;
&getdccbint;
#print "$?\n";
#&cdinfo;
#&titles;
#&wav2mp3;
#&testing;
also, wenn jemand so freundlich wäre und jetzt kritik an der syntax
und den anderen dingen nehmen würde, wäre dass schon mal toll!
benutzt man so subroutinen?
soll ich use strict benuzen?
ich hab das script auch gleich mal angehängt, vielleicht findet sich ja einer der
es ein bischen modifiziert.
sers
peter der große