#!/usr/bin/perl -w # Read .inf files from current directory, produce a leader of a cddb file # on STDOUT (processable with `fdquery --i file' from Net::FreeDB2) use strict; my @inf; for my $file (<*.inf>) { local *F; open F, $file or die; my @lines = ; close F or die; chomp @lines; my %line; for my $line (@lines) { next if $line =~ /^\s*#/; die unless $line =~ /^\s*(\S+)\s*=\s*(.*?)\s*$/; $line{lc $1} = $2; } die unless exists $line{tracknumber}; $inf[$line{tracknumber}] = \%line; } for my $n (1..$#inf) { die "Missing track number $n" unless defined $inf[$n]; } print < 0) { $ret += ($n % 10); $n /= 10; } return $ret; } sub compute_discid { my @frames = @_; my $tracks = $#frames + 1; my $n = 0; my @start_secs; my $i; for ($i = 0; $i < $tracks; $i++) { $start_secs[$i] = int ($frames[$i] / 75); } for ($i = 0; $i < $tracks-1; $i++) { $n = $n + cddb_sum ($start_secs[$i]); } my $t = $start_secs[$tracks-1] - $start_secs[0]; my $id = ((($n % 0xFF) << 24) | ($t << 8) | $tracks-1); return sprintf ("%08x", $id); }