Matt Garman <matthew.garman(a)gmail.com> wrote:
I started the thread "How is the bass mixed?
Per-channel frequency
analysis? Histogram?" a few weeks ago. One suggestion that came up a
few times was to simply downmix the bass to mono before sending it
out.
How would I go about this? Currently, this system doesn't have any
audio. What I intend to do is send audio out over USB to a DAC.
Ideally, I'd like to do on-the-fly remixing of only "bass frequencies"
to mono. Ideally the frequency should be configurable, but I think
about 150Hz or below is a good start.
Instead of mpd, you could try my dtas-player component of dtas
(duct-tape audio suite)[1]. dtas-player is nearly as much a *nix shell
as a music player. It is written in Ruby, but runs arbitrary shell
commands of your choosing (sox by default).
I suggest starting with a shell script using sox like below:
(My sox knowledge is rusty, so the following may not be 100% correct:)
------------------------ /path/to/sum-mono.sh ------------------------
#!/bin/sh
set -e
: note: TRIMFX, RGFX, INFILE, and SOXFMT vars come from dtas-player
COMMON="sox \"$INFILE\" -p $TRIMFX"
MONO="remix 1,2 1,2"
: stacking two filters should give a Linkwitz-Reily crossover at 150Hz
XO=${XO-150}
lo="$COMMON lowpass $XO lowpass $XO $MONO"
hi="$COMMON highpass $XO highpass $XO"
exec sox --combine=mix -v1 "|$lo" -v1 "|$hi" $SOXFMT - $RGFX
----------------------------------------------------------------------
Then, after dtas-player is started in a different terminal:
$ dtas-ctl source ed sox command=$HOME/bin/sum-mono.sh
$ dtas-ctl play
At the core, dtas-player is really like running the following in a shell:
source-command | sink-command
Except it's possible to replace source-command without restarting
sink-command (and vice-versa) while preserving the same pipe.
To restore default behavior:
$ dtas-ctl source ed sox command=
[1] -
http://dtas.80x24.org/ - a bunch of scripts by me, a GUI-phobe :)
Hopefully I'll have more time for this project soon.
Disclaimer: I was also an mpd developer and even project leader for a
short while, but decided to go off on my craziness. Anyways I find it
much more enjoyable to just glue sox/ecasound/whatever commands together
with pipes than deal with maintaining a music player in C (or C++).