summaryrefslogtreecommitdiff
path: root/asound.pl
blob: 8de41b23680b4aa9eae7b4c80d637dd845c3878c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl
#
# Choose default sound card for ~/.asoundrc.
#

use strict;
use warnings;

use UI::Dialog::Console;

my $cards = {};

open (FILE, "<", "/proc/asound/cards") or die "Can't open file: $!\n";
while (<FILE>) {
    if (/^\s*(\d)+\s*\[(\w+)\s*\]:\s*.* - (.*)/) {
        $cards->{$2} = [$1, $3];
    }
}
close FILE;

die "No sound cards found.\n" unless scalar keys %$cards > 0;

my $dialog = UI::Dialog::Console->new(title => 'Default sound card chooser');
my @list = map { $_, $cards->{$_}->[1] } sort { $cards->{$a}->[0] <=> $cards->{$b}->[0] } keys %$cards;
my $card = $dialog->menu(text => 'Select the card:', list => \@list);
$dialog->clear();

unless ($dialog->state() eq 'OK') {
    print "Nothing selected.\n";
    exit 1;
}

print "Selected card '$cards->{$card}->[1]'.\n";

open (FILE, ">", $ENV{"HOME"} . "/.asoundrc") or die "Can't open file for writing: $!\n";
my $index = $cards->{$card}->[0];
print FILE "# Auto-generated file
defaults.ctl.card $index
defaults.pcm.card $index
defaults.timer.card $index\n";
close FILE;