#!/pro/bin/perl

# auto-mute.pl [ <default-volume>:30 ]
use strict;
use warnings;

use Getopt::Long;
my $opt_x = 0;	# Don't start xmms
GetOptions (
    "x|m|r"	=> \$opt_x,
    ) or die "usage: auto-mute.pl [-x] [<default_volume>]\n";

use Audio::Mixer;
use LWP::Simple;
use Time::HiRes qw( usleep );

system "clear";
binmode STDOUT, ":utf8";

my $def = (@ARGV, 30)[0];	# Default volume in %
my $fad =  4;			# Fader time

my %vol = map { m/^\s*(\d+)\s+(.*)/; lc $2 => int ($1 * $def / 30) } <DATA>;

sub volume ($)			# This fades in/out to the new volume
{
    my $v = shift;

    my $c = (Audio::Mixer::get_cval ("pcm"))[0];
    $c == $v and return $v;

    my $x = ($v - $c) / (10 * $fad);	# .10 s steps
    Audio::Mixer::set_cval ("vol", 100, 100);
    while (($x > 0 ? $v - $c : $c - $v) > 0) {
	Audio::Mixer::set_cval ("pcm", $c, $c);
	usleep (100_000);
	$c += $x;
	}

    my $m = $v ? 100 : 0;
    Audio::Mixer::set_cval ("pcm", $v, $v);
    Audio::Mixer::set_cval ("vol", $m, $m);
    $v;
    } # volume

$opt_x or system "xmms radioparadise.pls &";

my $p = "";
while (1) {
    my $page =
	get ("http://www.radioparadise.com/modules/mini/mini_playlist.php?");
    $page or next;
    $page =~ s/\s+/ /gs;
    my @p = ($page =~ m{(<a.*?)</a>}g);
    "@p" eq $p and next;
    $p[0] =~ m/>\s*(.*?)\s+-\s+(.*)/ or next;	# fetch error
    my @d = localtime;
    $p = "@p";
    printf "%02d:%02d:%02d %2d %-28s - %s\n", @d[2,1,0],
	#volume ($vol{lc $1} // $def), $1, $2;
	volume (defined $vol{lc $1} ? $vol{lc $1} : $def), $1, $2;
    } continue {
	sleep 5;
	}
__END__
 0 Alarm
 0 Andy Stochansky
 0 Beatles
 0 Bono
 0 Bono & Adam Clayton
 0 Bono/Craig Armstrong
 0 Chemical Brothers
 0 Coldplay
 0 Howie Day
 0 Janah
 0 Muse
 0 Paloalto
 0 Paul & Linda McCartney
 0 Paul McCartney
 0 Radiohead
 0 Ryan Adams
 0 R.E.M. Michael Stipe & Bono
 0 Remy Zero
 0 Simple Minds
 0 Starsailor
 0 U2
10 George Harrison
10 John Lennon
10 Peter Murphy
10 Stevie Wonder
20 Beck
50 Andreas Vollenweider
50 Jethro Tull
50 Mark Knopfler
50 Neil Young
65 Asia
65 Camel
65 Chris Rea
65 Dire Straits
65 Kate Bush
65 Loreena McKennitt
65 Mary Black
65 Peter Gabriel
65 Philip Glass
65 Pink Floyd
65 Roger Waters
65 Roger Waters/Sinead O'Connor
65 Rush
65 Sinead O'Connor
65 Supertramp
65 UK
65 Vienna Teng
