Initial commit into git control
This commit is contained in:
commit
0b83df2165
18
INSTALL
Normal file
18
INSTALL
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
INSTALLATION
|
||||||
|
------------
|
||||||
|
|
||||||
|
To install these scripts, simply copy them into your $PATH somewhere. I recommend creating a local bin directory at ~/bin and adding it to your path. To do so, edit the file ~/.bashrc and add the line
|
||||||
|
|
||||||
|
export PATH=$PATH:~/bin
|
||||||
|
|
||||||
|
Install ALL of the scripts, since some of them depend on others.
|
||||||
|
|
||||||
|
cdripper requires the CDDB and CDDB_get perl modules.
|
||||||
|
|
||||||
|
You will also need the following programs:
|
||||||
|
cdparanoia
|
||||||
|
mplayer, mpg321, or mpg123
|
||||||
|
oggenc
|
||||||
|
cdrecord
|
||||||
|
vorbiscomment
|
||||||
|
metaflac (for flac support)
|
63
all2sane
Executable file
63
all2sane
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
# All of MP3 to Sane
|
||||||
|
# usage: all2sane <files>
|
||||||
|
#
|
||||||
|
# Renames the files to a sane format, then calls vcfromfilename
|
||||||
|
# to set the vorbis comments
|
||||||
|
#
|
||||||
|
# Requires vcfromfilename, fixname
|
||||||
|
#
|
||||||
|
# Changelog:
|
||||||
|
# 0.2: version now aligned with ds-audiotools
|
||||||
|
# 0.1.2: automated artist determination
|
||||||
|
# 0.1.1: added VERSION variable
|
||||||
|
# added call to fixname
|
||||||
|
# 0.1: initial implementation
|
||||||
|
|
||||||
|
$VERSION = "0.2";
|
||||||
|
$HELP_MSG = "All of MP3 to Sane v$VERSION\n\tusage: all2sane <files>\n";
|
||||||
|
|
||||||
|
$END_CHUNK = '_\d{3}_ogg_.*\.ogg$'; # match the unwanted end of the string
|
||||||
|
$DESIRED_END = '.ogg'; # replace the end chunk with this
|
||||||
|
$ALLOFMP3_FORMAT = '^\d{2}_?-_?.*' . $END_CHUNK;
|
||||||
|
|
||||||
|
if ($#ARGV < 0) { die $HELP_MSG; }
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
if (/^(--help)|(-h)$/) { die $HELP_MSG; }
|
||||||
|
}
|
||||||
|
|
||||||
|
$artist = `cd .. && pwd`;
|
||||||
|
$artist =~ s/^.*\///;
|
||||||
|
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
next unless /$ALLOFMP3_FORMAT/;
|
||||||
|
my $old_name = $_;
|
||||||
|
|
||||||
|
$_ = $artist . '-' . $_; # prepend artist
|
||||||
|
s/_-_/-/g; # clear up the _ problem
|
||||||
|
s/$END_CHUNK/$DESIRED_END/;
|
||||||
|
|
||||||
|
system('mv', $old_name, $_);
|
||||||
|
system('fixname', $_);
|
||||||
|
system('vcfromfilename', $_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Copyright (c) 2005 John Wiggins
|
||||||
|
#
|
||||||
|
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
65
burnmusic
Executable file
65
burnmusic
Executable file
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
# Music Burner
|
||||||
|
# usage: burnmusic <cdspeed> <device> <files>
|
||||||
|
#
|
||||||
|
# Burns the specified ogg, mp3, and wav files to a cd
|
||||||
|
# The track order is as passed on the commandline
|
||||||
|
#
|
||||||
|
# Requires oggdec, mpg321, cdrecord
|
||||||
|
#
|
||||||
|
# ChangeLog:
|
||||||
|
# 0.2: Aligned version with ds-audiotools
|
||||||
|
# 0.1.2: Added version variable
|
||||||
|
# 0.1.1: Added command-line wrapper, cleaned code
|
||||||
|
# 0.1: Initial code
|
||||||
|
|
||||||
|
$VERSION = "0.2"
|
||||||
|
$HELP_MSG = "# Music Burner v$VERSION\n\tusage: burnmusic <cdspeed> <device> <files>\n";
|
||||||
|
$temp_dir = '/tmp/burnmusic-' . `whoami`;
|
||||||
|
|
||||||
|
die $HELP_MSG if ($#ARGV < 2);
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
die $HELP_MSG if (/^(--help)|(-h)$/);
|
||||||
|
}
|
||||||
|
|
||||||
|
system("rm -rf $temp_dir 2>/dev/null");
|
||||||
|
system("mkdir $temp_dir");
|
||||||
|
|
||||||
|
# Parse required arguments
|
||||||
|
$cdspeed = shift(@ARGV);
|
||||||
|
die "Fatal: Invalid CD Speed.\n" if ($cdspeed =~ /\D/);
|
||||||
|
$device = shift(@ARGV);
|
||||||
|
|
||||||
|
#Parse and handle files
|
||||||
|
$track = '01';
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
if (/\.ogg$/) { system('oggdec', "-o $temp_dir/$track.wav", $_); }
|
||||||
|
elsif (/\.mp3$/) { system('mpg321', "-w $temp_dir/$track.wav", $_); }
|
||||||
|
elsif (/\.wav$/) { system('cp', $_, "$temp_dir/$track.wav"); }
|
||||||
|
else { print STDERR 'Invalid argument (non-fatal): ' . $_ . '\n'; }
|
||||||
|
$track++;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Burn and clean
|
||||||
|
system('cdrecord', '-v -pad -audio', "speed=$cdspeed", "dev=$device", "$temp_dir/*.wav");
|
||||||
|
system("rm -rf $temp_dir");
|
||||||
|
|
||||||
|
|
||||||
|
# Copyright (c) 2005 John Wiggins
|
||||||
|
#
|
||||||
|
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
284
cdripper
Executable file
284
cdripper
Executable file
|
@ -0,0 +1,284 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
# CD Ripper
|
||||||
|
# usage: cdripper [-o num] [--no-cddb] [-a] [-y] [target_directory]
|
||||||
|
#
|
||||||
|
# Rips the contents of an audio CD into Ogg Vorbis files
|
||||||
|
# Puts the files in target_directory/artist/album_name/
|
||||||
|
# (default target_directory is ./)
|
||||||
|
#
|
||||||
|
# Requires cdparanoia, oggenc, vcfromfilename
|
||||||
|
#
|
||||||
|
# Changelog:
|
||||||
|
# 0.2: Aligned version with ds-audiotools
|
||||||
|
# Implemented CDDB support (disabled with --no-cddb)
|
||||||
|
# Ability to preview and edit all text before it's used
|
||||||
|
# -y option to suppress all user input, taking defaults
|
||||||
|
# -a option to be asked about CDDB options
|
||||||
|
# 0.1.2: Removed the erroneous fixname, updated fixname to do what I need
|
||||||
|
# Now you can name things with natural characters, and it should be
|
||||||
|
# automatically fixed
|
||||||
|
# Added the -o option, functions as -o num, makes the first track
|
||||||
|
# num + 1
|
||||||
|
# 0.1.1: Added version variable
|
||||||
|
# 0.1: changed to perl (from bash)
|
||||||
|
# improved file naming mechanism
|
||||||
|
# added Vorbiscomment updating (using vcfromfilename script)
|
||||||
|
# added program to ds-audio package
|
||||||
|
# 0.0.4: fixed track #s above 10 not happening :P
|
||||||
|
# 0.0.3: fixed the bug with track #s
|
||||||
|
# 0.0.2: changed entire code to bash script (from C++)
|
||||||
|
# 0.0.1: basic code in place
|
||||||
|
|
||||||
|
use CDDB_get qw( get_cddb );
|
||||||
|
|
||||||
|
$VERSION = "0.2";
|
||||||
|
$HELP_MSG = "# CD Ripper v$VERSION\n\tusage: cdripper [--no-cddb] [-a] " .
|
||||||
|
"[-y] [-o num] [target_directory]\n\n" .
|
||||||
|
"Options:\n-a:\t\tAsk users about multiple CDDB options\n" .
|
||||||
|
"-o [num]:\tOffset track numbers by num. The first track will be num+1\n" .
|
||||||
|
"-y:\t\tDon't prompt for user confirmation of CDDB information\n\t\t(assume defaults are okay).\n" .
|
||||||
|
"--no-cddb:\tDon't use CDDB. Prompt the user for all information.\n";
|
||||||
|
|
||||||
|
$CDPARANOIA_FORMAT = 'track*.cdda';
|
||||||
|
$TRACK_ZERO = 'track00';
|
||||||
|
chomp($orig_dir = `pwd`);
|
||||||
|
chomp($temp_dir = '/tmp/ds-cdripper-' . `whoami`);
|
||||||
|
$target_directory = $orig_dir;
|
||||||
|
$offset = 0;
|
||||||
|
$useCDDB = 1;
|
||||||
|
$noInput = 0;
|
||||||
|
$askCDDB = 0;
|
||||||
|
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
if ($offsetOnNext)
|
||||||
|
{
|
||||||
|
$offset = $_;
|
||||||
|
$offsetOnNext = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (/^(--help)|(-h)$/) { print $HELP_MSG; exit; }
|
||||||
|
elsif (/^-o$/) { $offsetOnNext = 1; }
|
||||||
|
elsif (/^--no-cddb$/) { $useCDDB = 0; }
|
||||||
|
elsif (/^-f$/) { $noInput = 1; }
|
||||||
|
elsif (/^-a$/) { $askCDDB = 1; }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$target_directory = $_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create temp location
|
||||||
|
system("rm -rf $temp_dir 2> /dev/null");
|
||||||
|
mkdir($temp_dir);
|
||||||
|
chdir($temp_dir);
|
||||||
|
|
||||||
|
# Get the filenames to use later
|
||||||
|
handle_names();
|
||||||
|
|
||||||
|
# Rip, convert
|
||||||
|
system('cdparanoia -B');
|
||||||
|
system("oggenc $CDPARANOIA_FORMAT.wav");
|
||||||
|
$sanityTest = `ls -1 | wc -l`;
|
||||||
|
chomp $sanityTest;
|
||||||
|
die "No files were created. Aborting." unless ($sanityTest > 0);
|
||||||
|
|
||||||
|
# Fix filenames
|
||||||
|
init_old_tracks();
|
||||||
|
fix_files(@new_tracks);
|
||||||
|
|
||||||
|
# Move files to final location
|
||||||
|
$final_location = "$target_directory/$artist/$album";
|
||||||
|
mkdir($target_directory);
|
||||||
|
mkdir("$target_directory/$artist");
|
||||||
|
mkdir("$target_directory/$artist/$album");
|
||||||
|
system('mv', @new_tracks, $final_location);
|
||||||
|
chdir($final_location);
|
||||||
|
warn "Some files were not automatically named." if $unhandledFiles;
|
||||||
|
|
||||||
|
# Add vorbiscomment data
|
||||||
|
system('vcfromfilename', @new_tracks);
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
chdir($orig_dir);
|
||||||
|
system("rm -rf $temp_dir");
|
||||||
|
|
||||||
|
# Converts the filenames created by cdparanoia
|
||||||
|
# to my arbitrary file name standard, using CDDB or User Input
|
||||||
|
sub handle_names
|
||||||
|
{
|
||||||
|
init_current_track();
|
||||||
|
|
||||||
|
if ($useCDDB) { getinfo_cddb(); }
|
||||||
|
else { getinfo_user(); }
|
||||||
|
|
||||||
|
# final check for user
|
||||||
|
confirm_filenames() unless $noInput;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gets user input to create the @new_tracks array
|
||||||
|
sub getinfo_user
|
||||||
|
{
|
||||||
|
die "Trying to ask for user input with user input disabled. THIS SHOULD NOT HAPPEN." if $noInput;
|
||||||
|
|
||||||
|
print 'Artist: ';
|
||||||
|
chomp($artist = <STDIN>);
|
||||||
|
$artist = `fixname -o "$artist"`;
|
||||||
|
print 'Album: ';
|
||||||
|
chomp($album = <STDIN>);
|
||||||
|
$album = `fixname -o "$album"`;
|
||||||
|
|
||||||
|
my $numTracks = get_number_of_tracks();
|
||||||
|
for (my $i = 1; $i <= $numTracks; $i++)
|
||||||
|
{
|
||||||
|
print "Track $current_track: " ;
|
||||||
|
chomp (my $input = <STDIN>);
|
||||||
|
my $input = `fixname -o "$input"`;
|
||||||
|
|
||||||
|
my $track_name = $artist . '-' . $current_track . '-' . $input .
|
||||||
|
'.ogg';
|
||||||
|
|
||||||
|
push @new_tracks, $track_name;
|
||||||
|
$current_track++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Uses CDDB to populate the new_tracks array
|
||||||
|
sub getinfo_cddb
|
||||||
|
{
|
||||||
|
my %config;
|
||||||
|
$config{input} = 1 if $askCDDB;
|
||||||
|
|
||||||
|
my %cd=get_cddb(\%config);
|
||||||
|
if (! defined $cd{title})
|
||||||
|
{
|
||||||
|
die "No CDDB entry and user input disabled. Quitting." if $noInput;
|
||||||
|
warn "Couldn't find CDDB entry for disc. Switching to user input.\n";
|
||||||
|
getinfo_user();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$artist = `fixname -o "$cd{artist}"`;
|
||||||
|
$album = `fixname -o "$cd{title}"`;
|
||||||
|
|
||||||
|
foreach (@{$cd{track}})
|
||||||
|
{
|
||||||
|
my $track_name = $artist . '-' . $current_track . '-' .
|
||||||
|
`fixname -o "$_"` . '.ogg';
|
||||||
|
|
||||||
|
push @new_tracks, $track_name;
|
||||||
|
$current_track++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fixes the files listed in @old_tracks with the names given
|
||||||
|
# in @new_tracks
|
||||||
|
sub fix_files
|
||||||
|
{
|
||||||
|
my @newTracks = @new_tracks;
|
||||||
|
|
||||||
|
foreach (@old_tracks)
|
||||||
|
{
|
||||||
|
my $newName = shift @newTracks;
|
||||||
|
if ($newName) { system('mv', "$_", $newName); }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
push @new_tracks, $_;
|
||||||
|
$unhandledFiles = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Sets $current_track to the correct value
|
||||||
|
sub init_current_track
|
||||||
|
{
|
||||||
|
$current_track='01';
|
||||||
|
for ($i = 0; $i < $offset; $i++) { $current_track++; }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Populates the @old_tracks array
|
||||||
|
sub init_old_tracks
|
||||||
|
{
|
||||||
|
foreach (`ls $CDPARANOIA_FORMAT.ogg`)
|
||||||
|
{
|
||||||
|
chomp;
|
||||||
|
next if /$TRACK_ZERO/;
|
||||||
|
push @old_tracks, $_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create and open a file for final adjustments to filenames
|
||||||
|
sub confirm_filenames
|
||||||
|
{
|
||||||
|
my $savedComma = $,;
|
||||||
|
$, = "\n";
|
||||||
|
|
||||||
|
# Dump the file
|
||||||
|
open TMPFILE, "> $temp_dir/filenames";
|
||||||
|
print TMPFILE $artist . "\n";
|
||||||
|
print TMPFILE $album . "\n";
|
||||||
|
print TMPFILE @new_tracks;
|
||||||
|
print TMPFILE "\n";
|
||||||
|
close TMPFILE;
|
||||||
|
|
||||||
|
$, = $savedComma;
|
||||||
|
|
||||||
|
# Allow editing
|
||||||
|
my $editor = $ENV{'EDITOR'};
|
||||||
|
if ($editor) { system($editor, "$temp_dir/filenames"); }
|
||||||
|
elsif ( -x '/usr/bin/vi') { system('vi', "$temp_dir/filenames"); }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
warn "No \$EDITOR variable defined, and no default editor found. Filename editing disabled.\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Read the changes
|
||||||
|
@new_tracks = ();
|
||||||
|
open TMPFILE, "< $temp_dir/filenames";
|
||||||
|
|
||||||
|
chomp ($artist = <TMPFILE>);
|
||||||
|
chomp ($album = <TMPFILE>);
|
||||||
|
|
||||||
|
while (chomp($_ = <TMPFILE>))
|
||||||
|
{
|
||||||
|
push @new_tracks, $_;
|
||||||
|
}
|
||||||
|
close TMPFILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_number_of_tracks()
|
||||||
|
{
|
||||||
|
my @tracks;
|
||||||
|
|
||||||
|
# Get the track numbers
|
||||||
|
foreach (`cdparanoia -Q 2>&1`)
|
||||||
|
{
|
||||||
|
next unless /^\s{1,2}\d{1,2}/;
|
||||||
|
s/\..*$//; # Kill everything after the number
|
||||||
|
s/^\s*//; # Kill the leading whitespace
|
||||||
|
push @tracks, $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Return the last track number, and we should be golden
|
||||||
|
return pop @tracks;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copyright (c) 2004 - 2007 John Wiggins
|
||||||
|
#
|
||||||
|
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
40
dirclean
Executable file
40
dirclean
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
# Takes a directory tree and breaks it down, displaying in this format:
|
||||||
|
#
|
||||||
|
# first_dir:
|
||||||
|
# sub_dir1
|
||||||
|
# sub_dir2
|
||||||
|
# second_dir:
|
||||||
|
# sub_dir3
|
||||||
|
#
|
||||||
|
# This information is printed to stdout.
|
||||||
|
# Further, the script only goes two levels deep.
|
||||||
|
#
|
||||||
|
# ChangeLog:
|
||||||
|
# 0.2 - aligned version with ds-audiotools
|
||||||
|
# 0.1 - initial version
|
||||||
|
|
||||||
|
$VERSION = "0.2";
|
||||||
|
$HELP_MSG = "# dirclean v$VERSION\n\tusage: dirclean <directory>\n\t";
|
||||||
|
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
$target = $_ unless /(-[Hh])|(--help)/;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (`ls -1 $target`)
|
||||||
|
{
|
||||||
|
chomp;
|
||||||
|
$full_name = "$target/$_";
|
||||||
|
next unless (-d $full_name);
|
||||||
|
|
||||||
|
print " $_:\n";
|
||||||
|
foreach (`ls -1 $full_name`)
|
||||||
|
{
|
||||||
|
chomp;
|
||||||
|
my $full_name = "$full_name/$_";
|
||||||
|
next unless (-d $full_name);
|
||||||
|
print "\t$_\n";
|
||||||
|
}
|
||||||
|
}
|
75
fixname
Executable file
75
fixname
Executable file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
# File Name Fixer
|
||||||
|
# usage: fixname <files>
|
||||||
|
#
|
||||||
|
# Renames files to comply with darkside's arbitrary standard
|
||||||
|
#
|
||||||
|
# This is darkside's standard:
|
||||||
|
# 1) all letters are lowercase
|
||||||
|
# 2) Whitespace becomes underscore
|
||||||
|
# 3) Never more than one consecutive underscore
|
||||||
|
# 4) No underscores flanking dashes
|
||||||
|
# 4) Never more than one consecutive dash
|
||||||
|
#
|
||||||
|
# ChangeLog:
|
||||||
|
# 0.2: Made everything more robust - better at multiple spaces and special
|
||||||
|
# characters now. Also now renumbering along with ds-audiotools
|
||||||
|
# 0.1.4: Added -o option, which prints to stdout instead of renaming the file
|
||||||
|
# 0.1.3: Added version variable
|
||||||
|
# 0.1.2: Added help message
|
||||||
|
# 0.1.1: Made code compile and run, no known bugs
|
||||||
|
# 0.1: Switched code to perl with regular expressions
|
||||||
|
# 0.0.4: Minor bugs fixed, __ was becoming - instead of _
|
||||||
|
# 0.0.3: Minor bugs fixed, code improved
|
||||||
|
# 0.0.2: Takes command-line arguments instead of parsing entire directory
|
||||||
|
# 0.0.1: basic code in place
|
||||||
|
|
||||||
|
$VERSION = "0.2";
|
||||||
|
$HELP_MSG = "# Filename fixer v$VERSION\n\tusage: fixname <files>\n\t fixname -o \"name\"\n";
|
||||||
|
|
||||||
|
die $HELP_MSG if ($#ARGV < 0);
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
die $HELP_MSG if (/^(--help)|(-h)$/);
|
||||||
|
if (/^-o$/)
|
||||||
|
{
|
||||||
|
$toStdOut = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ARGV = grep(!/^-o$/, @ARGV) if ($toStdOut);
|
||||||
|
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
my $oldname = $_;
|
||||||
|
|
||||||
|
s/(.*)/lc($1)/e; # Lowercase it
|
||||||
|
s/[^\w\s\.-]//g; # Remove odd characters
|
||||||
|
|
||||||
|
s/\s/_/g; # Change whitespace to _
|
||||||
|
s/_+/_/g; # Squash multiple spaces
|
||||||
|
s/^_*//; # Remove leading space
|
||||||
|
s/_*$//; # Remove trailing space
|
||||||
|
s/_*(-|\.)_*/$1/g; # Remove space flanking a - or .
|
||||||
|
|
||||||
|
if ($toStdOut) { print; }
|
||||||
|
else { system('mv', $oldname, $_); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Copyright (c) 2004 - 2007 John Wiggins
|
||||||
|
#
|
||||||
|
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
100
mp32ogg
Executable file
100
mp32ogg
Executable file
|
@ -0,0 +1,100 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
# MP3 - Ogg converter
|
||||||
|
# usage: mp32ogg <files>
|
||||||
|
#
|
||||||
|
# Creates ogg files from the selected mp3 files
|
||||||
|
#
|
||||||
|
# Requires one of mpg321, mpg123 or mplayer, and oggenc
|
||||||
|
#
|
||||||
|
# Changelog:
|
||||||
|
# 0.2.1: Added new options to mplayer for mplayer's new features
|
||||||
|
# Added support for m4a if using mplayer
|
||||||
|
# 0.2: Aligned version with ds-audiotools
|
||||||
|
# 0.1.3: Added mplayer support, automatically select decoder
|
||||||
|
# Fixed option passing to system() calls to be as secure as possible
|
||||||
|
# 0.1.2: added support for passing flags
|
||||||
|
# Use a temp dir for storage of intermediate wav file
|
||||||
|
# Cleaned up some syntax
|
||||||
|
# Added version variable
|
||||||
|
# 0.1: converted to perl
|
||||||
|
# changed to use command-line args
|
||||||
|
# 0.0.1: Initial bash script
|
||||||
|
|
||||||
|
$VERSION = "0.2";
|
||||||
|
$HELP_MSG = "# MP3 - Ogg Converter v$VERSION\n\tusage: mp32ogg <files>";
|
||||||
|
$DEC_ERROR = "Couldn't find a decoder to use. Please install one of mplayer, mpg321, or mpg123";
|
||||||
|
$ENC_ERROR = "Couldn't find oggenc, which is necessary for encoding. Please install the package that provides oggenc (probably named 'oggenc' or 'vorbistools')";
|
||||||
|
|
||||||
|
chomp($tempdir = '/tmp/mp32ogg-' . `whoami`);
|
||||||
|
|
||||||
|
|
||||||
|
# Do we need help?
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
if (/^(--help)|(-h)$/) { die $HELP_MSG; }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Select the encoder and decoder
|
||||||
|
chomp($decoder = `which mplayer`);
|
||||||
|
$decoder_options = '-vc null -vo null -ao pcm:fast:file=';
|
||||||
|
|
||||||
|
if (! -x $decoder)
|
||||||
|
{
|
||||||
|
$decoder_options = '-w '; # The others both use this format
|
||||||
|
chomp($decoder = `which mpg321`);
|
||||||
|
}
|
||||||
|
chomp($decoder = `which mpg123`) if (! -x $decoder);
|
||||||
|
|
||||||
|
chomp($encoder = `which oggenc`);
|
||||||
|
|
||||||
|
# Dependency checks
|
||||||
|
die $DEC_ERROR if (! -x $decoder);
|
||||||
|
die $ENC_ERROR if (! -x $encoder);
|
||||||
|
|
||||||
|
# Set up the temp directory
|
||||||
|
system('rm', '-rf', $tempdir) if (-d $tempdir);
|
||||||
|
mkdir($tempdir);
|
||||||
|
|
||||||
|
foreach(@ARGV)
|
||||||
|
{
|
||||||
|
$filename = $_;
|
||||||
|
$short_name = $_;
|
||||||
|
if ($decoder =~ /mplayer/)
|
||||||
|
{
|
||||||
|
next unless (/\.(m4a|mp3)/);
|
||||||
|
$short_name =~ s/\.(mp3|m4a)$//;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next unless (/\.mp3$/);
|
||||||
|
$short_name =~ s/\.mp3$//;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Transcode the file
|
||||||
|
system("$decoder $filename $decoder_options$tempdir/$short_name.wav");
|
||||||
|
system($encoder, "$tempdir/$short_name.wav", '-o', "$short_name.ogg");
|
||||||
|
|
||||||
|
# Remove cruft
|
||||||
|
system('rm', "$tempdir/$short_name.wav");
|
||||||
|
system('rm', "$filename");
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove last of the cruft
|
||||||
|
system('rm', '-rf', $tempdir);
|
||||||
|
|
||||||
|
# Copyright (c) 2005 - 2008 John Wiggins
|
||||||
|
#
|
||||||
|
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
130
vcfromfilename
Executable file
130
vcfromfilename
Executable file
|
@ -0,0 +1,130 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
#
|
||||||
|
# Vorbiscomment from Filename
|
||||||
|
# usage: vcfromfilename [options] <files>
|
||||||
|
# options:
|
||||||
|
# -n: Only set the track number
|
||||||
|
#
|
||||||
|
# Adds Vorbiscomment data to ogg vorbis and flac files based on the filename.
|
||||||
|
# Files should be in darkside's arbitrary file name standard, which is:
|
||||||
|
# album/artist-tracknum-title.(ogg|flac)
|
||||||
|
#
|
||||||
|
# Requires vorbiscomment and metaflac
|
||||||
|
#
|
||||||
|
# Changelog:
|
||||||
|
# 0.2.2: added flac support
|
||||||
|
# 0.2.1: fixed version in help message
|
||||||
|
# fixed handling of dashes in artist name and title
|
||||||
|
# 0.2: aligned version with ds-audiotools
|
||||||
|
# 0.1.1: added version variable
|
||||||
|
# 0.1: initial implementation
|
||||||
|
|
||||||
|
$VERSION = "0.2.2";
|
||||||
|
$HELP_MSG = "Vorbiscomment from Filename $VERSION\n\tusage: vcfromfilename [options] <files>\n";
|
||||||
|
|
||||||
|
chomp($COMMENTFILENAME = '/tmp/vcfromfilename-' . `whoami`);
|
||||||
|
|
||||||
|
# Look for options
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
if (/^(-h)|(--help)$/) { die $HELP_MSG; }
|
||||||
|
if (/^-n$/) { $tracknumonly = true; s/.*//g; }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set the album name
|
||||||
|
$album = `pwd`; # We WANT the newline here
|
||||||
|
$album =~ s/^.*\///; # Remove everything up to the last /
|
||||||
|
$album = formatName($album, 'album=');
|
||||||
|
|
||||||
|
# Parse the file list, set vorbiscomments
|
||||||
|
foreach (@ARGV)
|
||||||
|
{
|
||||||
|
next if (/^$/);
|
||||||
|
# check filename format
|
||||||
|
next unless (/^\w+-\d{1,2}-(\w|-|\d)+\.(ogg|flac)$/);
|
||||||
|
|
||||||
|
$isflac = true if (/\.flac$/);
|
||||||
|
|
||||||
|
open COMMENTFILE, '>' . $COMMENTFILENAME;
|
||||||
|
|
||||||
|
# Remove old flac comments that match
|
||||||
|
if ($isflac)
|
||||||
|
{
|
||||||
|
system("metaflac --remove-tag=tracknumber $_");
|
||||||
|
if (!$tracknumonly)
|
||||||
|
{
|
||||||
|
system("metaflac --remove-tag=title --remove-tag=artist --remove-tag=album $_");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Preserve existing comments, except the ones we'll replace
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (`vorbiscomment -l $_`)
|
||||||
|
{
|
||||||
|
if ($tracknumonly) { print COMMENTFILE $_ unless (/^tracknumber/); }
|
||||||
|
else { print COMMENTFILE $_ unless (/^(title)|(artist)|(tracknumber)|(album)/); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create new comments from the filename
|
||||||
|
if (!$tracknumonly)
|
||||||
|
{
|
||||||
|
# Add the artist
|
||||||
|
my $artist = $_;
|
||||||
|
$artist =~ s/^(.*?)-\d{2}-.*/\1/; # grab everything to the track number
|
||||||
|
$artist = formatName($artist, 'artist=');
|
||||||
|
print COMMENTFILE $artist;
|
||||||
|
|
||||||
|
# Add the title
|
||||||
|
my $title = $_;
|
||||||
|
$title =~ s/.*-\d{2}-(.*)\.(ogg|flac)$/\1/; # grab everything after the track number
|
||||||
|
$title = formatName($title, 'title=');
|
||||||
|
print COMMENTFILE $title;
|
||||||
|
|
||||||
|
# And the album
|
||||||
|
print COMMENTFILE $album;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Now get the track number
|
||||||
|
my $tracknum = $_;
|
||||||
|
$tracknum =~ s/.*-(\d{2})-.*/\1/;
|
||||||
|
$tracknum =~ s/\b0*//; # removing leading zeros
|
||||||
|
$tracknum = formatName($tracknum, 'tracknumber=');
|
||||||
|
print COMMENTFILE $tracknum;
|
||||||
|
|
||||||
|
close COMMENTFILE;
|
||||||
|
|
||||||
|
if ($isflac) { system("metaflac --import-tags-from=$COMMENTFILENAME $_"); }
|
||||||
|
else { system("vorbiscomment -c $COMMENTFILENAME -w $_"); }
|
||||||
|
system('rm', $COMMENTFILENAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Formats the first argument, adds the second argument to it
|
||||||
|
sub formatName
|
||||||
|
{
|
||||||
|
my $name = shift;
|
||||||
|
my $prepend = shift;
|
||||||
|
chomp $name; # we add a newline ourselves
|
||||||
|
$name =~ s/_/ /g; # underscore - space
|
||||||
|
$name =~ s/^\s*//; # Remove leading space
|
||||||
|
$name =~ s/\s*$//; # Remove trailing space
|
||||||
|
$name =~ s/\b(\w)/uc($1)/eg; # Cap the words
|
||||||
|
$name = $prepend . $name . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Copyright (c) 2005 - 2008 John Wiggins
|
||||||
|
#
|
||||||
|
# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Reference in New Issue
Block a user