summaryrefslogtreecommitdiff
path: root/scripts/gdsoundcard.pm
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/gdsoundcard.pm')
-rwxr-xr-xscripts/gdsoundcard.pm149
1 files changed, 149 insertions, 0 deletions
diff --git a/scripts/gdsoundcard.pm b/scripts/gdsoundcard.pm
new file mode 100755
index 0000000..519181f
--- /dev/null
+++ b/scripts/gdsoundcard.pm
@@ -0,0 +1,149 @@
+##################################################
+#
+# GiantDisc mp3 Jukebox
+#
+# © 2003, Rolf Brugger
+#
+##################################################
+
+package gdsoundcard;
+
+#
+# soundcard drivers to control volume etc
+#
+#
+#
+
+#use lib '/usr/local/bin';
+use strict;
+
+############################################################
+### Constants & global variables
+
+
+
+############################################################
+
+sub sndc_init{
+### initialize
+
+# actually not used yet
+
+ my ($playertype, $playerhost, $sounddevice) = @_;
+
+ if ($playertype == 0){ # local oss soundcard
+ ;
+ }
+
+ elsif ($playertype == 20){ # exstreamer
+ ;
+ }
+ else{
+ print "Warning: unknown player type $playertype\n";
+ }
+}
+
+
+
+############################################################
+### Volume routines
+# 0 <= volume <= 100
+
+
+sub sndc_set_volume{
+### Set volume
+
+ my ($playertype, $playerhost, $sounddevice, $volume) = @_;
+
+ if ($playertype == 0){ # local oss soundcard
+ system "aumix -v$volume";
+ }
+
+ elsif ($playertype == 20){ # exstreamer
+ use integer;
+ my $cmd = "v=".($volume/5)."\n";
+ gdgentools::exstreamer_command($playerhost, $cmd);
+ }
+ else{
+ print "Warning: unknown player type $playertype\n";
+ }
+}
+
+
+sub sndc_get_volume{
+### Get volume
+# returns the currently set volume.
+
+ my ($playertype, $playerhost, $sounddevice) = @_;
+ my $volume = 0;
+
+ if ($playertype == 0){ # local oss soundcard
+ my ($shcommand) = @_;
+ my ($res, $resline, @reslines);
+ $res = `aumix -vq`;
+ @reslines = split /\n/, $res;
+ $resline = shift (@reslines);
+ if ($resline =~ m/\D*(\d+).*/){
+ $volume = $1;
+ }
+ else{print "Warning: Get volume - can't match aumix output\n";}
+ }
+
+ elsif ($playertype == 20){ # exstreamer
+ my $cmd = "v=\n"; # cmd get volume
+ my $res = gdgentools::exstreamer_command_res($playerhost, $cmd);
+ if ($res =~ m/\<.*\>(\d+)\<.*\>/){
+ $volume = ($1)*5;
+ }
+ else{
+ $volume = 50;
+ }
+ }
+ else{
+ print "Warning: unknown player type $playertype\n";
+ }
+ return $volume;
+}
+
+
+sub sndc_save_volume{
+### Save default volume
+
+ my ($playertype, $playerhost, $sounddevice, $volume) = @_;
+
+ if ($playertype == 0){ # local oss soundcard
+ system "aumix -S";
+ }
+ elsif ($playertype == 20){ # exstreamer
+ # the exstreamer always saves the volume setting in its flash rom
+ ;
+ }
+ else{
+ print "Warning: unknown player type $playertype\n";
+ }
+}
+
+############################################################
+
+sub sndc_inc_volume{
+### Increases volume by 5%
+ my ($playertype, $playerhost, $sounddevice) = @_;
+ my $volume = sndc_get_volume($playertype, $playerhost, $sounddevice);
+ $volume += 5;
+ if ($volume>100){$volume=100;}
+ sndc_set_volume($playertype, $playerhost, $sounddevice, $volume);
+}
+
+sub sndc_dec_volume{
+### decreases volume by 5%
+ my ($playertype, $playerhost, $sounddevice) = @_;
+ my $volume = sndc_get_volume($playertype, $playerhost, $sounddevice);
+ $volume -= 5;
+ if ($volume<0){$volume=0;}
+ sndc_set_volume($playertype, $playerhost, $sounddevice, $volume);
+}
+
+############################################################
+
+1;
+#