package Audio::Mixer;
#
# Library to query / set various sound mixer parameters.
# See POD documentation below for more info.
#
# Copyright (c) 2000 Sergey Gribov <sergey@sergey.com>
# This is free software with ABSOLUTELY NO WARRANTY.
# You can redistribute and modify it freely, but please leave
# this message attached to this file.
#
# Subject to terms of GNU General Public License (www.gnu.org)
#
# Last update: $Date: 2002/04/30 00:48:21 $ by $Author: sergey $
# Revision: $Revision: 1.4 $
use strict;
use Carp;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD);
require Exporter;
require DynaLoader;
require AutoLoader;
@ISA = qw(Exporter DynaLoader);
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
@EXPORT = qw();
@EXPORT_OK = qw(
MIXER
);
$VERSION = '0.7';
sub AUTOLOAD {
# This AUTOLOAD is used to 'autoload' constants from the constant()
# XS function. If a constant is not found then control is passed
# to the AUTOLOAD in AutoLoader.
my $constname;
($constname = $AUTOLOAD) =~ s/.*:://;
croak "& not defined" if $constname eq 'constant';
my $val = constant($constname, @_ ? $_[0] : 0);
if ($! != 0) {
if ($! =~ /Invalid/) {
$AutoLoader::AUTOLOAD = $AUTOLOAD;
goto &AutoLoader::AUTOLOAD;
}
else {
croak "Your vendor has not defined Audio::Mixer macro $constname";
}
}
no strict 'refs';
*$AUTOLOAD = sub () { $val };
goto &$AUTOLOAD;
}
bootstrap Audio::Mixer $VERSION;
# Preloaded methods go here.
# Autoload methods go after =cut, and are processed by the autosplit program.
sub get_cval {
my $channel = shift;
my ($val, $lcval, $rcval);
$val = get_param_val($channel);
$lcval = $val & 0xff;
$rcval = $val & 0x10000 ? ($val & 0xff00) >> 8 : $lcval;
return wantarray ? ($lcval, $rcval) : $val;
}
sub set_cval {
my ($channel, $lcval, $rcval) = @_;
$lcval = 0 unless $lcval;
$rcval = $lcval unless $rcval;
return set_param_val($channel, $lcval, $rcval);
}
sub get_mixer_params {
return(split(/ /, get_params_list()));
}
1;
__END__
# Below is the stub of documentation for your module. You better edit it!
=head1 NAME
Audio::Mixer - Perl extension for Sound Mixer control
=head1 SYNOPSIS
use Audio::Mixer;
$volume = Audio::Mixer::get_cval('vol');
if (Audio::Mixer::set_cval('vol', 50, 40)) {
die("Can't set volume...");
}
=head1 DESCRIPTION
Library to query / set various sound mixer parameters.
This is just a very simple Perl interface which allows to
set various sound mixer parameters. The most important
probably 'vol' (volume). The list of all mixer parameters
can be obtained using get_mixer_params() function.
All values (lcval, rcval) are numbers in 0-100 range.
=head1 FUNCTIONS
get_cval(cntrl) - Get parameter value
Parameters:
cntrl - name of parameter
Returns:
in array context: (lcval, rcval), where:
lcval - left channel value
rcval - right channel value
in scalar context returns value of get_param_val() (see below)
set_cval(cntrl, lcval, rcval) - Set parameter value
Parameters:
cntrl - name of parameter
lcval - left channel value
rcval - right channel value (optional, if not supplied
will be equal to lcval)
Returns: 0 if Ok, -1 if failed
set_source(cntrl) - set record source
Parameters:
cntrl - name of channel to record from
Returns: 0 if Ok, -1 if failed
get_source(cntrl) - get record source
Returns:
name of channel to record from
set_mixer_dev(fname) - Set mixer device name (optional),
/dev/mixer is used by default
fname - device name
Returns: 0 if Ok
init_mixer() - Initialize mixer (open it)
set_cval() / get_cval() opens / closes the mixer each
time they called unless init_mixer() called before.
In case if init_mixer() called before all other
functions will use already opened device instead of
opening it each time.
close_mixer() - Close device.
Should be called only if init_mixer() was used.
get_mixer_params() - Get list of mixer parameters
Returns: list of parameters names.
LOW LEVEL FUNCTIONS:
get_param_val(cntrl) - Get parameter value
Parameter:
cntrl - name of parameter
Returns:
integer value, which will be constructed as follows:
lower byte (x & 0xff) - value of the left channel
(or whole value)
next byte (x & 0xff00) - value of the right channel
third byte (x & 0xff0000) - flags (if x & 0x10000 then
2 channels exist)
or -1 in case of failure.
set_param_val(cntrl, lcval, rcval) - Set parameter value.
Here all parameters are mandatory (in contrast to set_cval()).
Parameters:
cntrl - name of parameter
lcval - left channel value
rcval - right channel value
Returns: 0 if Ok, -1 if failed
=head1 AUTHOR
Sergey Gribov, sergey@sergey.com
=head1 LICENSE
Copyright (c) 2001 Sergey Gribov. All rights
reserved. This program is free software; you can
redistribute it and/or modify it under the same terms as
Perl itself.
=head1 SEE ALSO
perl(1).
=cut