Blame scripts/mpg123info

Packit c32a2d
#!/bin/bash
Packit c32a2d
Packit c32a2d
if test $# -eq 0; then
Packit c32a2d
  echo "Give me some MPEG 1.0/2.0/2.5 layer 1/2/3 audio file name(s) and I give you meta info about it in an easily-parseable format:
Packit c32a2d
Packit c32a2d
name=value
Packit c32a2d
Packit c32a2d
for simple value association and
Packit c32a2d
Packit c32a2d
name.=value
Packit c32a2d
Packit c32a2d
to add another line to existing value (multiline comments)."
Packit c32a2d
fi
Packit c32a2d
Packit c32a2d
for i in "$@"
Packit c32a2d
do
Packit c32a2d
  echo lp "$i"
Packit c32a2d
  echo tag
Packit c32a2d
  echo scan
Packit c32a2d
  echo format
Packit c32a2d
  echo sample
Packit c32a2d
done | 
Packit c32a2d
mpg123 -t -R |
Packit c32a2d
perl -e '
Packit c32a2d
while(<STDIN>)
Packit c32a2d
{
Packit c32a2d
if(/\@T \{/)
Packit c32a2d
{
Packit c32a2d
  print "# meta info for: ".(shift @ARGV)."\n";
Packit c32a2d
  $field = undef;
Packit c32a2d
  %count = ();
Packit c32a2d
  %linecount = ();
Packit c32a2d
}
Packit c32a2d
elsif(/\@T ID3:(.*)$/)
Packit c32a2d
{
Packit c32a2d
  $field = undef;
Packit c32a2d
  print "ID3v1.title=".substr($1, 0, 30)."\n";
Packit c32a2d
  print "ID3v1.artist=".substr($1, 30, 30)."\n";
Packit c32a2d
  print "ID3v1.album=".substr($1, 60, 30)."\n";
Packit c32a2d
  print "ID3v1.year=".substr($1, 90, 4)."\n";
Packit c32a2d
  print "ID3v1.comment=".substr($1, 94, 30)."\n";
Packit c32a2d
  print "ID3v1.genre=".substr($1, 124)."\n";
Packit c32a2d
}
Packit c32a2d
elsif(/\@T ID3\.([^:]+):(.*)$/)
Packit c32a2d
{
Packit c32a2d
  $field = undef;
Packit c32a2d
  print "ID3.$1=$2\n";
Packit c32a2d
}
Packit c32a2d
elsif(/\@T (ID3v2\.\S{4})(|\s+lang\(([^\(\)]*)\)\s+desc\(([^\(\)]*)\)):/)
Packit c32a2d
{
Packit c32a2d
  $class = $1;
Packit c32a2d
  $field = ++$count{$class} > 1 ? "$class$count{$class}" : $class;
Packit c32a2d
  print "$field.lang=$3\n" if(defined $3);
Packit c32a2d
  print "$field.desc=$4\n" if(defined $4);
Packit c32a2d
}
Packit c32a2d
elsif(/\@T =(.*)$/)
Packit c32a2d
{
Packit c32a2d
  next unless defined $field;
Packit c32a2d
  print "$field".(++$linecount{$field} > 1 ? ".=" : "=").$1."\n";
Packit c32a2d
}
Packit c32a2d
elsif(/\@FORMAT\s+(\d+)\s+(\d+)/)
Packit c32a2d
{
Packit c32a2d
  print "format.rate=$1\n";
Packit c32a2d
  print "format.channels=$2\n";
Packit c32a2d
}
Packit c32a2d
elsif(/\@SAMPLE\s+(\d+)\s+(\d+)/)
Packit c32a2d
{
Packit c32a2d
  print "samples=$2\n";
Packit c32a2d
}
Packit c32a2d
}
Packit c32a2d
' "$@"