Using Ecasound with ALSA Loopback Devices

This article explains how Ecasound supports ALSA loopback devices (snd-aloop) for inter-application audio routing in Linux environments. It covers the technical feasibility, the setup process for the kernel loopback module, and the exact Ecasound syntax required to capture and route audio streams directly between independent software applications without requiring heavier sound servers like JACK or PipeWire.

Ecasound provides native support for any standard ALSA PCM device, which includes virtual loopback devices created by the Linux kernel module snd-aloop. Because Ecasound treats ALSA devices uniformly through its -i:alsa and -o:alsa operators, you can seamlessly send audio from another application into Ecasound, apply real-time signal processing, and direct it to physical hardware or another software destination.

Enabling the ALSA Loopback Driver

Before routing audio through Ecasound, the ALSA loopback kernel module must be loaded. Run the following command:

sudo modprobe snd-aloop

This creates a virtual sound card—typically labeled Loopback—consisting of two paired subdevices (Device 0 and Device 1). Any audio written to one side of the pair is instantly available for reading on the opposite side. You can verify its device index by checking /proc/asound/cards or using aplay -l.

Ecasound Routing Syntax

To capture audio routed into the loopback from an external application, point Ecasound to the corresponding side of the virtual device. For example, if an audio player outputs directly to hw:Loopback,0,0, Ecasound reads the stream using hw:Loopback,1,0:

ecasound -i:alsa,hw:Loopback,1,0 -o:alsa,default

In this setup:

Alternatively, Ecasound can serve as a feeder into an external program by writing to the loopback interface:

ecasound -i:somefile.wav -o:alsa,hw:Loopback,0,0

The target application would then configure its recording or input device to listen to hw:Loopback,1,0.

Best Practices for Smooth Playback

When using snd-aloop with Ecasound, format matching is critical to avoid buffer overruns or underruns:

  1. Format and Rate Alignment: Ensure the producing application, Ecasound, and the receiving application agree on sample rate, bit depth, and channel count (e.g., -f:s16_le,2,44100).
  2. Use the Plug Layer for Mismatched Formats: If applications use differing formats, specify plughw:Loopback,... instead of hw:Loopback,.... The ALSA plug layer automatically resamples and converts channel layouts on the fly.
  3. Buffer Sizing: Adjust Ecasound's internal buffer using the -b flag (such as -b:512 or -b:1024) to achieve low latency while preventing dropouts during routing.