#!/usr/bin/perl -w use strict; #warning: recursive ogginfo: #find mp3/ -name '*.ogg' |xargs ogginfo >ogginfo-index #todo: get ordering from .m3u's. my $dir = "/home/bfields/mp3/"; my($f); my @albums = (); foreach $f (<$dir/*.m3u>) { #print "$f\n"; open(M3U, "<$f"); process_album(\*M3U); } sub process_album { my $m3u = shift(); my($g, $l); my $album; $album->{"tracks"} = []; while ($g = <$m3u>) { foreach $l (`ogginfo $dir/$g`) { process_track($album, $l); } } #printf("album: $album\n"); print_album($album); } sub process_track { my $album = shift(); my $l = shift(); if ($l =~ /^\s*([a-z]*)=(.*)$/) { if ($1 eq "title") { push(@{$album->{"tracks"}}, $2); } else { if (defined($album->{$1})) { if ($album->{$1} ne $2) { print(STDERR "ignoring $2"); } } $album->{$1} = $2; } } } sub print_album { my $album = shift(); my($track, $key); foreach $key (keys(%$album)) { if ($key ne "tracks") { print("$key = $album->{$key}\n"); } } foreach $track (@{$album->{"tracks"}}) { print("\t$track\n"); } }