Music: May 2007 Archives
So I saw some Yojimbo scripts over at DF and I remembered I have a Yojimbo script I use quite a bit, to create a setlist in which I keep song lyrics and chords and so on.
The setup required is to change the $htmlfile variable for your location of the created setlist; create a "Music: Setlist" group in Yojimbo (which contains note items with titles for song names, tags for artist names, and the contents in the note [with an optional __BR__ text to force a column break, such as you can see in several of the songs).
And of course, you need Mac::Glue installed, and glues for Safari and Yojimbo created.
And you need a stylesheet, which you can get from the source in the finished file.
The setup required is to change the $htmlfile variable for your location of the created setlist; create a "Music: Setlist" group in Yojimbo (which contains note items with titles for song names, tags for artist names, and the contents in the note [with an optional __BR__ text to force a column break, such as you can see in several of the songs).
And of course, you need Mac::Glue installed, and glues for Safari and Yojimbo created.
And you need a stylesheet, which you can get from the source in the finished file.
#!/usr/bin/perl
use warnings;
use strict;
use File::Spec::Functions;
use Mac::Glue;
use URI::file;
our($header, $mid, $footer);
init();
my(%setlist);
my $artists = $setlist{ARTIST} = {};
my $songs = $setlist{SONG} = {};
my $yojimbo = new Mac::Glue 'Yojimbo';
my $browser = new Mac::Glue 'Safari';
my $set = $yojimbo->obj(collection => 'Music: Setlist');
my $count = my @items = $set->obj('items')->get;
for my $item (@items) {
my $song = $item->prop('name')->get;
my $text = $item->prop('contents')->get;
my($artist) = $item->prop(name => of => 'tag')->get;
$text =~ s/(\015\012|\015|\012)/\n/g;
my $key;
$key = $1 if $text =~ s/^(\[.+\])\s+//s;
(my $songlink = $song) =~ s/\W/_/g;
(my $artistlink = $artist) =~ s/\W/_/g;
push @{$artists->{$artist}}, $song;
$songs->{$song}{artist} = $artist;
$songs->{$song}{alink} = $artistlink;
$songs->{$song}{text} = $text;
$songs->{$song}{key} = $key if $key;
$songs->{$song}{link} = $songlink;
}
$count += scalar(keys %$artists) * 2;
##########################
my $htmlfile = catfile(
'/Users/pudge/MacOS/pudge/work/songs/music',
'setlist.html'
);
my $uri = URI::file->new($htmlfile);
open my $fh, '>', $htmlfile;
##########################
print $fh $header;
my $c = 0;
my $d = 1;
for my $artist (sort keys %$artists) {
my $artistr = $artists->{$artist};
print $fh qq[\t<li><a name="$songs->{$artistr->[0]}{alink}">$artist</a>] ;
print $fh qq[<ul class="setlist_inner">\n];
for my $song (sort @$artistr) {
my $songr = $songs->{$song};
print $fh qq[\t\t<li class="setlist_inner"><a href="#$songr->{link}">$song</a>];
print $fh " <i><small>$songr->{key}</small></i>" if $songr->{key};
print $fh "</li>\n";
$c++;
}
print $fh "\t</ul></li>\n";
$c += 2;
if ($c > $d*int($count/3)) {
print $fh qq[</ul></div>\n<div class="wrapper"><ul class="col">\n];
$d++;
$c--;
}
}
print $fh $mid;
for my $artist (sort keys %$artists) {
my $artistr = $artists->{$artist};
#print $fh "\t<h2>$artist</h2>\n";
for my $song (sort @$artistr) {
my $songr = $songs->{$song};
my $text = $songr->{text};
$text =~ s/</</g;
$text =~ s|__BR__\s+|</pre><pre>|gs;
print $fh qq[\t\t<h3><a name="$songr->{link}">$song</a>];
print $fh qq[ <i>$songr->{key}</i>] if $songr->{key};
print $fh qq[</h3>\n\t\t<a href="#top">Top</a>];
print $fh qq[ | <a href="#$songr->{alink}">$artist</a>];
print $fh qq[\n\n<pre>$text</pre>\n\n\n<hr>\n\n];
}
}
print $fh $footer;
##########################
close $fh;
$browser->activate;
$browser->open_location ($uri->as_string);
##########################
sub init {
$header = <<EOT;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Pudge Setlist</title>
<link href="../style.css" rel="stylesheet">
</head>
<body style="font-size: 11px">
<h1><a name="top">Pudge Setlist</a></h1>
<div class="wrapper"><ul class="col">
EOT
$mid = <<EOT;
</ul></div>
<div class="body">
EOT
$footer = <<EOT;
<pre>__END__</pre>
</div>
</body>
</htm l>
EOT
}
I posted a music video for my song "George Bush is Hitler." This version contains an all-new exclusive verse: "Bush is Bin Laden"!
Everybody knows George Bush is Hitler. And Big Brother. And Bin Laden. If only we had any freedoms left, we could complain about how bad he is! See https://pudge.net/tunes for more music.
I was in a band many moons ago called Disciple. I've put up some music and videos circa 1990.
Good times.
The band started in '87 (oh my ... that was 20 years ago). I did lead vocals and guitars, Hobbes did lead guitar and lead vocals. Robbie was on drums. Ian came on to play bass a little later, freeing me up to do guitar.
The videos and songs are all live, except for "Actions Speak Louder Than Words," which was recorded in the studio (without me!).
I am working on recording some of the songs again, with Hobbes and Ian, all over the Internet. Using GarageBand, probably.
Good times.
The band started in '87 (oh my ... that was 20 years ago). I did lead vocals and guitars, Hobbes did lead guitar and lead vocals. Robbie was on drums. Ian came on to play bass a little later, freeing me up to do guitar.
The videos and songs are all live, except for "Actions Speak Louder Than Words," which was recorded in the studio (without me!).
I am working on recording some of the songs again, with Hobbes and Ian, all over the Internet. Using GarageBand, probably.