File squeezeliteserver.pl of Package squeezelite
#!/usr/bin/perl
# quick script to grab Audio card information
# and generate a command line for squeezelite
use strict;
my $IP="127.0.0.1";
my $IP="10.0.1.20";
my $STREAM="8192";
my $OUTPUT="8192";
my $SQUEEZELITE="/usr/bin/squeezelite";
my $squeezename="squeezelite.info";
my $macaddr="macaddress";
my $squeezevar="/var/lib/squeezelite";
#my $squeezevar="/tmp/squeezelite";
my $DEBUG="0";
# null - Discard all samples (playback) or generate zero samples (capture)
# default - Default ALSA Output (currently PulseAudio Sound Server)
# sysdefault:CARD=Audiophilleocom - Naim DAC-V1. Audiophilleo.com, USB Audio - Default Audio Device
# front:CARD=Audiophilleocom,DEV=0 - Naim DAC-V1. Audiophilleo.com, USB Audio - Front speakers
# sysdefault:CARD=PCH - HDA Intel PCH, ALC3202 Analog - Default Audio Device
# front:CARD=PCH,DEV=0 - HDA Intel PCH, ALC3202 Analog - Front speakers
# default:CARD=Mojo
# front:CARD=Audiophilleocom,DEV=0
# front:CARD=U20F1,DEV=0
#squeezelite -o "sysdefault:CARD=Audiophilleocom" -m acd:ef:12:34:46 -N 2/name -s 127.0.0.1 -z
#squeezelite -o $AUDIOPERIPH -m $MACADDRESS -N $NAME/squeezelite.name -s $IP -b $stream>:$output> -z
#/usr/bin/squeezelite -b 4096 8704 -R -u vLE 28 -m 5a 86 7e 05 ff bd -c pcm,flac,mp3,ogg -r 44100 48000 88200 96000 176400 192000 352800 384000 -D 0 dop -d all info -f /run/spacd/c/2/l/0/squeezelite.log -N /mnt/hdd/system/spac/Naim DAC-V1. Audiophilleo.com/device0/squeezelite.name -M Daphile 17.09-b131629 -s 127.0.0.1 -o hw:2,0 -a 100 3 24_3 1 0 -p 45
# Need false mac addresse to identify devices
sub generate_random_mac {
my $mac;
for(my $i = 0; $i < 6; $i++) {
$mac = $mac.sprintf("%02x", int(rand(256))).":";
}
chop($mac);
return $mac;
}
sub clean_up {
my ($var) = @_;
$var =~ s/^\s*(.*?)\s*$/$1/;
return $var;
}
sub cat_ {
open(my $F, $_[0]) or return; my @l = <$F>; wantarray() ? @l : join '', @l;
}
sub main {
my @cmds;
my $pid = fork;
if (!defined $pid) {
die "Cannot fork: $!";
}
elsif ($pid == 0) {
my @data = `$SQUEEZELITE -l`;
my $mac;
my $cmd; my @cmds;
foreach (@data) {
my ($device, $name, $extra) = $_ =~ m/(.*)\s*-\s+(.*),.*-(.*)/i;
# only grab sysdefault system
$device =~ m/front:CARD=DAC/i or next;
$device = clean_up($device);
$name = clean_up($name);
# if ($DEBUG eq "1") {
# print "device: $device\n"; print "name: $name\n";
# print "extra: $extra\n";
# }
system("mkdir -p $squeezevar/$device");
open (NAMEDATA, ">$squeezevar/$device/$squeezename") or die "can't open $_\n";
print NAMEDATA $name;
close(NAMEDATA);
if (! -f "$squeezevar/$device/$macaddr") {
print "No previous MACADDR found, generate one\n";
$mac = generate_random_mac();
open (MACADDR, ">$squeezevar/$device/$macaddr") or die "can't open $_\n";
print MACADDR $mac;
close(MACADDR);
}
# grab previous macaddr
($mac) = cat_("$squeezevar/$device/$macaddr") =~ /(.*)/;
$cmd = "squeezelite -o '$device' -m $mac -N $squeezevar/$device/$squeezename -s $IP -b $STREAM:$OUTPUT -d all=info -R -u vLE -U 0 -D 0:dop";
#$cmd = "squeezelite -o '$device' -m $mac -N $squeezevar/$device/$squeezename -b $STREAM:$OUTPUT -d all=info";
push @cmds, $cmd;
next;
}
foreach my $cmd (@cmds) {
my $pid = fork();
if ($pid==0) { # child
exec($cmd);
die "Exec $cmd failed: $!\n";
} elsif (!defined $pid) {
warn "Fork $cmd failed: $!\n";
}
}
1 while wait() >= 0;
}
else {
print "MAIN Parent process, waiting for child terminating...\n";
waitpid $pid, 0;
}
}
main();