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 M-Player).
  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