[LAD] Basic Audio Mixing Subroutines

Niels Mayer nielsmayer at gmail.com
Sat Aug 14 06:42:24 UTC 2010


Part of software mixing control is consistent I/O to the hardware
being mixed. So one aspect of such software is access to soundcards
and MIDI devices  -- setup. configured, and labelled on a per-system
basis... For example, jack & qjackctl or qtractor might give you
integrated access to patchbays and setup/configurations on a
per-project basis, they won't setup your soundcards sampling
rate/clock-source/multi-card-sync, or make sure all the system
device-access permissions and priorities are correct, ensure the
presence of optionally loaded modules like snd-hrtimer, and keeping
all that working across revisions, hardware changes, and OS upgrades.

Along these lines, I've been thinking that there needs to be something
that works alongside ALSA/Pulseaudio/Jack and the variety of
soundcards and interfaces people end up using on each different
system. A sort of combined "audio wizard" and custom config/interface
generator (giving the alsamixers you want, with the kinds of controls
you want laid out in the panels you want, all by "drag and drop" and
direct manipulation of GUI elements).

For example, in "[alsa-devel] Alsamixer-Qt4 0.4.0 released", I mentioned:

In [alsa-devel] Alsamixer-Qt4 0.4.0 released I mentioned
PS: digression -- has anybody used Vala to create a "mixer
construction kit" out of nicely wrapped ALSA constructs and
expeditiously-leveraged existing C/C++ code? ( i was thinking any
serious hacking on envy24control/mudita24 deserves at least this
centuries' programming languages&desktop support --
http://www.linuxaudio.org/mailarchive/lad/2010/8/11/172721 ).... IMHO
this approach could be leveraged into something more useful for ALSA
-- an ALSA "wizard" that could extract a high-level description of
hardware, apply a rule-base of test/solutions to solving traditional
and ongoing audio-setup or upgrading problems, and help visually
construct a custom system control panel interface to all the audio and
media devices on a particular person's system. It should also do the
dishes. :-)
...........

I came across http://opensource.wolfsonmicro.com/content/alsa-scenario-manager
which seems like it would provide much needed underlying functionality
in accessing devices and configurations needed to setup particular use
cases....
//////////////
ALSA Scenario Manager

Audio Scenario or Use Case Manager

The ALSA scenario manager is a LGPL library designed to allow high
level control of audio scenarios or use cases in sound device
hardware. It is intended to be used by applications to change the
hardware audio scenario of a device in a generic and portable manner.
e.g. a dialer application may want to set a "GSM phone call" scenario
or a media player may want to set a "playback via headphones"
scenario.

This library is not meant to replace gstreamer, PulseAudio or a sound
server, but is meant to work in tandem with such audio software.

Features

Simple API and standard scenario types for changing device hardware scenario.
Scenarios are stored in standard ALSA alsactl file format and can be
very quickly generated using alsamixer.
Ability for applications to identify controls relevant to the current scenario.
//////////////////

http://www.slimlogic.co.uk/?p=40
////////////////
The ALSA scenario manager provides the following features.

Consistent and simple C API. The library provides simple and
consistent methods to change scenario or use case and thus make
applications more portable across different devices.
Ability to change any ALSA audio control type. This includes signal
gain and signal routing (through mixers and muxes).
Gain and mixer aliasing. Different scenarios may use different
hardware gain controls (e.g. some hardware has different hardware gain
controls for headphone and speaker volumes) . The library can alias
controls so that the correct volume control is updated no matter what
use case is in operation.
//////////////////

Niels
http://nielsmayer.com



More information about the Linux-audio-dev mailing list