Dtas - duct tape audio suite for *nix

From the README:

Free Software command-line tools for audio playback, mastering, and
whatever else related to audio. dtas follows the worse-is-better
philosophy and acts as duct tape to combine existing command-line tools
for flexibility and ease-of-development. dtas is currently implemented
in Ruby (and some embedded shell), but may use other languages in the

Primary executables available are:

  • dtas-player - gapless music player (or pipeline/process manager :P)
  • dtas-cueedit - embedded cuesheet editor (FLAC-only for now)

The centerpiece is dtas-player, a gapless music player designed to aid
in writing scripts for sox/ecasound use. Unlike monolithic music
players, dtas-player is close to a *nix shell in functionality, allowing
for the execution of arbitrary commands as sources, filters, and sinks
for audio. dtas-player supports:

  • any DSP effects offered by SoX, ecasound, LADSPA, LV2, etc…
  • multiple outputs for playback (including dumping audio to
    files or piping to arbitrary commands)
  • ReplayGain (including fallback gain and peak normalization)

dtas-player is a *nix pipeline and process manager. It may be used
spawn and pipe to abitrary Unix commands, not just audio-related
commands. It can interactively restart/replace the source (audio
decoder) component of a pipeline while keeping the sink (playback
endpoint) running.

Users of dtas-player will also be interested in the following scripts:

  • dtas-ctl - “raw” command-line scripting interface for dtas-player
  • dtas-enq - enqueue files/commands for dtas-player
  • dtas-msinkctl - enable/disable multiple sinks with one command
  • dtas-console - rudimentary curses interface for dtas-player
  • dtas-sinkedit - edit sinks (playback targets) for dtas-player
  • dtas-sourceedit - edit source (decoder process parameters) for
  • dtas-xdelay - alternative sink for dtas-player

All scripts have some documentation in the Documentation/ directory or
manpages distributed with the gem. dtas exposes no public APIs outside
of command-line and YAML text. dtas is aimed at users familiar with the
*nix command-line and editing text files. Familiarity with the Ruby
programming language is absolutely NOT required.


  • MPRIS/MPRIS 2.0 bridge for partial dtas-player control
  • tracklist support in dtas-player (maybe?)
  • whatever command-line tools come to mind…
  • native ffmpeg/avconv/gst support in dtas-player
  • better error handling, many bugfixes, etc…
  • better documentation

== Source code

git clone git://80x24.org/dtas

Please use git-format-patch(1) and git-send-email(1) distributed with
the git(7) suite for generating and sending patches. Please format
pull requests with the git-request-pull(1) script (also distributed
with git(7)) and send them via email.

See http://www.git-scm.com/ for more information on git.

== Contact

Feedback (results, bug reports, patches, pull-requests) via plain-text
email is very much appreciated.

Please send plain-text email to Eric W. [email protected],
HTML will not be read. dtas is for GUI-phobes, by GUI-phobes.
Public mailing list coming soon.

== License

GPLv3 or later


2b97c10f07b3012ea6ac9d60fd6a9d5b221015e8 dtas-0.0.0.gem
0e91448bfcb1f0ed916ef91fba12f9fe551e7fab dtas-0.0.0.tar.gz
8a83f0560f00ece70ff3b8ab92db66f968805e40 dtas-linux-1.0.0.gem
dee176de14a8d10d208e9967406ff8b2ec31db6e dtas-mpris-0.0.0.gem

Btw, I’ve written an alternate introduction for users already familiar
with sox on the sox-users mailing list:

http://mid.gmane.org/[email protected]

I’m not sure if that intro is appropriate for folks not familiar
with sox, however.

Also, I forget to note this use AF_UNIX + SOCK_SEQPACKET, so it’s
probably only going to work on Linux and FreeBSD 9+. Falling back
to SOCK_DGRAM will probably be (fully) implemented in the future.

I used to put duct tape on old broken cassette cases, but it still
wasn’t a good idea

Tamara T. [email protected] wrote:

I used to put duct tape on old broken cassette cases, but it still
wasn’t a good idea…

Heh, the idea for dtas-player is really obvious/simple[1].
I’m surprised nothing quite like it exists.

Perhaps the only explanation is it’s really a horrible idea and
I’ve yet to realize it :x

[1] - OK, obvious and simple after over a decade of searching,
but still, really obvious now. I’m just kicking myself for
not implementing this sooner.

On Aug 26, 2013, at 5:06 AM, Eric W. [email protected] wrote:

[1] - OK, obvious and simple after over a decade of searching,
but still, really obvious now. I’m just kicking myself for
not implementing this sooner.

Oh, hey, not dissing your player it’s just the duct tape idea is
p.funny to me.

Major changes!

This release refactors dtas-player internals and adds lightly-tested
avconv (from libav) and ffmpeg support. It should also be much easier
for us to add direct support for other non-SoX decoders in the future.

The “source ed” and “source cat” protocol commands now both require a
SOURCENAME argument, one of “sox”, “av” (avconv), or “ff” (ffmpeg).
“source ed” also supports a new “tryorder” integer parameter to control
the order in which sox, av, and ff are tried.

dtas-console now displays ReplayGain status and allows controlling
ReplayGain mode, fallback_gain, and preamp values via hotkeys.

There are also many corner-case bugfixes and small minor features, see
“git log” for details.

To install this lightly tested pre-release:

gem install dtas -v 0.1.I

Most notable is the addition of the dtas-player_sink_examples(7)
manpage. Also minor bugfixes and documentation updates.

Note: I’m considering a major revamp of the protocol now that
things function reasonably well (see dtas-player_protocol(7)).