#!/usr/bin/perl -w use Audio::Mixer; use Term::ReadKey; use Term::Size; #sudo apt-get install libaudio-mixer-perl libterm-readkey-perl libterm-size-perl Audio::Mixer::init_mixer(); END { Audio::Mixer::close_mixer(); ReadMode 0; print "\n"; } sub vol { my @v = (Audio::Mixer::get_cval('vol'), Audio::Mixer::get_cval('pcm')); my $n = 0; $n += $_ for @v; $n/4; } sub incvol { my $i = shift; my $v = vol(); Audio::Mixer::set_cval('vol', $i + $v); Audio::Mixer::set_cval('pcm', $i + $v); } sub dispvol { my $w = Term::Size::chars; my $barwidth = $w - 11; $|++; printf " [%-${barwidth}s] (%i%%) ", '#' x int($barwidth*vol()/100), vol; } ReadMode 4; my $prefix; dispvol; while (defined($_ = ReadKey)) { if (m/\d/) { $prefix .= $_; } elsif (m/[hjkl]/) { $prefix ||= 2; m/[hj]/ && ($prefix *= -1); incvol $prefix; undef $prefix; } else { exit } dispvol; }