Thursday, February 25, 2016

Augmented Headphone Listening On Linux For The Emacspeak Audio Desktop

Augmented Headphone Listening On Linux For The Emacspeak Audio Desktop

1 Executive Summary

A combination of ALSA, Ladspa and OpenAL can provide an enhanced
headphone listening experience on Linux — this article summarizes
various tools and techniques for leveraging these affordances on the
Emacspeak Audio Desktop.

2 Glossary

Advanced Linux Sound Architecture. This is my prefered means of controlling audio, and I entirely avoid Pulseaudio on all my machines.
Linux Audio Developer's Simple Plugin API. Enables the injection of Digital Signal Processing (DSP) when playing media. It is a layer that sits above ALSA. Ladspa filters can be used by user-space applications like MPlayer and SoX when playing media. They can also be used within the user's ASoundRC to define virtual audio devices that inject DSP plugins into the media stream.
OpenAL is an API for enabling cross-platform 3D audio. User-space applications like MPlayer can use OpenAL as the audio output driver — note that OpenAL on Linux writes to ALSA under the covers.

3 Playing Media Using MPlayer

  1. With Ladspa and its associated plugins installed — at the minimum
    I would recommend installing tap-plugins, module
    emacspeak-m-player provides a number of affordances for
    interactively applying Ladspa filters. See commands
    emacspeak-m-player-apply-reverb-preset_(bound to _P in M-Player)
    and command emacspeak-m-player-add-filter (bound to f in
  2. Command emacspeak-m-player-apply-reverb-preset lets you pick
    among a total of 42 reverb presets defined by Ladspa module tap_reverb.
  3. Command emacspeak-m-player-add-filter lets you add some of the
    more commonly used Ladspa effects with smart minibuffer
    prompts. Use tab completion to discover some of the predefined
    filters — these are just convenience shortcuts — and you can
    add any filters you use commonly to this list.
  4. Note that mplayer also has its own
    HRTF filter, but that filter requires that the stream being played is
    a 48K stream.
  5. Command emacspeak-m-player-using-openal bound by default to
    Hyper ; launches mplayer with OpenAL as the audio output
    driver — adding the following line

to your _~/.alsoftrc~ file will apply a suitable HRTF filter for
augmented headphone listening.


4 Defining Virtual Audio Devices For Use With Soundscapes

I use soundscapes to provide a pleasant auditory background as I work
— see earlier blog article that describes Soundscapes On The
Emacspeak Audio Desktop
. Defining virtual ALSA devices that inject
Ladspa plugins into the output processing chain is an elegant means
for enhancing the auditory experience provided by these
soundscapes. In this instance, I apply one of the predefined reverb
effects (Ambiance) from Ladspa module tap-plugins and pass the
results through a BS2B (Bauer Stereo To Binaural) filter — see file
scapes/ladspa-asoundrc in the emacspeak Github Repo. Notice that that
file defines a number of virtual audio devices and can serve as a
template for injecting any installed Ladspa plugins — you can first
experiment with filters using Emacspeak's Laudible module to find
settings that work for you before applying them via a virtual device
defined in your asoundrc file. Finally, you can customize option
soundscape-manager-options to add –device <devicename> to have
the soundscapes use the desired virtual device.

5 Summary

Laptops today have plenty of processing power and some really nice
audio hardware. Linux has a powerful audio processing stack in ALSA,
Ladspa and OpenAL. Connecting the dots can be fun and provide an
enhanced auditory environment.

Date: <2016-02-25 Thu>

Author: raman

Created: 2016-02-25 Thu 17:47