#!/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 () { 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;