# 0.21.0 / 2022-09-06 dtas 0.21.0 There's two minor fixes for dtas-splitfx, and one for dtas-player users using the rate=bypass optimization. 3 changes since v0.20.0 (2022-02-03): splitfx: fix error reporting of failed tracks splitfx: warn on improper encodings for titles player: drain sinks completely before changing sink rate # 0.20.0 / 2022-02-03 dtas 0.20.0 - ruby 3.1+ compatibility, splitfx improvements This release catches up with Psych (YAML) changes in Ruby 3.1+ Ruby 2.3+ is now the minimum version, though keep in mind the ruby-core team already dropped support for it long ago. Most of the features are focused on audio engineering capabilities of dtas-splitfx. dtas-splitfx gains the --filter switch, along with per-track environment variables and comments. These new features have made my workflow significantly better. dtas-archive supports explicit comments, and omits the default SoX comment. To better cope with temporary and modified files during editing, dtas-player metadata now checks ctime before reusing the cache, handy for frequently-modified files. "dtas-tl prune" is now supported to cull temporary files from the player tracklist. There's a few dtas-console improvements, too. 28 changes since v0.19.0 (2021-09-05): archive: support comments, default to none splitfx: use Etc.nprocessors for jobs if unspecified dtas-console: set X11 terminal title iff DISPLAY is set dtas-console: add 'i' toggle to show comments (metadata) splitfx: fix track_zpad with integer arg doc: drop ordered map from examples player: reduce syscalls when splicing to single target dtas-console: support Wayland terminal titles, too console: workaround safe warnings in outdated `curses' gem require Ruby 2.3+ get rid of DTAS.dedupe_str wrapper move dtas-graph into script/, support Perl for dtas.sh use YAML.unsafe_load in Psych 4.x (Ruby 3.1+) deduplicate and freeze pathnames + metadata player: remove omap conversion dtas: drop unnecessary "require 'yaml'" statements dtas-tl prune: cull missing files from tracklist dtas-tl: drop encoding hacks, use binary stdout+stderr use IO#wait_readable consistently get rid of DTAS::Nonblock wrapper for Ruby <= 2.0 unix_accepted: drop Ruby < 2.3 support code do not check IO#closed? before calling IO#close splitfx: support per-track environment variables splitfx: add --filter option to limit match to comments player: expire sox metadata cache on file st_ctime changes readahead: do not call -@ on non-String splitfx: disallow combining --trim and --filter splitfx: document changes ahead of 0.20.0 release # 0.19.0 / 2021-09-05 dtas 0.19.0 - odd pathname fixes Non-UTF-8-encoded pathnames now handled properly by dtas-mlib. Shell-unfriendly filenames are handled properly if they require ffmpeg (they were always handled properly when using sox). Some minor URL and doc updates, too, and there's a new "make symlink-install" target for users who lack permissions to install RubyGems. 6 changes since v0.18.1 (2021-02-13): mlib: pathnames may be blobs README: replace NNTP URL with NNTPS gemspec: allow building gem without setting VERSION build: add "symlink-install" target do not shell-quote filenames for environment doc: use Tor v3 .onion URLs # 0.18.1 / 2021-02-13 dtas 0.18.1 Mainly seek improvements to dtas-player. The fallback to use charlock-holmes for strangely-encoded files is fixed. 7 changes since 0.18.0 (2020-02-03): splitfx: reduce syscalls for writing comments file splitfx: support --err-suffix option player: fix +/- directional seeks while paused README: update and add more URLs for archives encoding: use CharlockHolmes properly on first run dtas-console: gracefully handle seek failures INSTALL: update dependencies for current Debian stable # 0.18.0 / 2020-02-03 dtas 0.18.0 fiddle is now supported for Linux users without a C compiler or Ruby headers installed to take advantage of inotify(7) functionality and efficiency improvements with splice(2) and eventfd(7). For non-RubyGems users, there's some setup.rb fixes thanks to James Rowe. Eric Wong (8): doc: fixup leftover ftp://lists.gnu.org links pipe: avoid loading sleepy_penguin provide fiddle-based eventfd implementation buffer: replace sleepy_penguin with fiddle watchable: use fiddle for inotify support doc: remove most recommendations for sleepy_penguin INSTALL: s/bogomips.org/yhbt.net/ doc: update copyrights for 2020 James Rowe (2): setup: update to use RbConfig setup: fix duplicate variable warning # 0.17.0 / 2019-11-14 dtas 0.17.0 dtas-player automatically pauses on sink death (e.g. when an external DAC is unplugged), thanks to Rene Maurer for the feature suggestion. zsh completions are also bundled in the examples/ directory thanks to James Rowe. There's also a couple of minor bugfixes and documentation updates. There's also kwarg warning fixes for Ruby 2.7.0dev. Future components will probably use a more stable glue language than Ruby, and we already have dtas-graph which is Perl5. Eric Wong (11): doc: remove inaccurate comment about "GNU-ism" doc: update homepage to point to cgit /about/ dtas-graph: show inode number in hex, too dtas-graph: add a short blurb about what it does dtas-console: remove unused variables dtas-console: pass kwargs as-is to String#encode buffer/splice: pass kwargs as-is to tee/splice player: automatically pause if last sink dies readahead: avoid Array#compact and Array#max on `false' doc: use new HTTPS address at lists.gnu.org TODO: add a note about using a more stable glue language James Rowe (2): doc: trivial typo fixes Add zsh completion support # 0.16.1 / 2019-01-02 dtas 0.16.1 Brown paper bag release to fix hanging at the end of a track/playlist when using a single audio output with Linux splice. # 0.16.0 / 2019-01-02 dtas 0.16.0 A bunch of minor fixes and cleanups accumulating for the past two years since the last release. It's tough to remember to make releases when I'm always running the latest version from git :x Most notably, "io_splice" is no longer used for dtas-linux users since "sleepy_penguin" includes all the functionality we use. This is to reduce memory overhead from extra DSOs(*) There's also some deprecation warning fixes for the still-undocumented "dtas-mlib" command. 12 changes since v0.15.0 (2017-04-07): pipeline: new module for running process pipelines console: ensure time calculations are done in UTC Rakefile: update path for uploads player: support guessing encodings for comments get rid of Windows-31J regexps mlib: compatibility with Sequel 5.x mlib: remove redundant tag massaging and encoding mlib: use flock to get around SQLite busy errors mlib: ignore files with nil times dtas/watchable: check SystemCallError mlib: fix unused variable warning use sleepy_penguin 3.5+ for splice and tee support (*) https://udrepper.livejournal.com/8790.html # 0.15.0 / 2017-04-07 dtas 0.15.0 There's a couple of minor bugfixes and features that's been sitting around for a while in git. Internally there's some garbage reductions so player processes might be a bit smaller. 21 changes since dtas 0.14.2 (2016-03-18): player: "cue prev" reliably hits previous cue breakpoint README: add link to gmane NNTP server player: extra "cue" seeking functionality archive: fix suffix replacement for stats dtas-readahead: cleanup open files on pause readahead: handle queued commands properly mlib: use transaction for removing stale entries splitfx: more consistently generate fade_in effects format.from_file: reduce soxi invocations introduce mcache class for caching audio metadata source/sox: integrate mcache support to reduce soxi calls test/test_rb_state: quiet deprecation warning http -> https, and relocate homepage to https://80x24.org/dtas/ player: freeze sink name to avoid needless dup source/sox: simplify conditional, slightly buffer/splice: remove MAX_SIZE constant rg_state: fix no-op gain detection source/sox: relax comment NAME restriction readahead: handle queued commands properly (again) readahead: fix running commands with non-files deduplicate strings using String#-@ (uminus) in Ruby 2.5+ # 0.14.2 / 2016-03-18 dtas 0.14.2 - several bugfixes This release contains several fixes needed to run dtas-player under Debian jessie systems where libav-tools no longer provides ffprobe. dtas-player should now fall back more smoothly to its splitfx YAML format if neither libav-tools nor ffmpeg are installed, as they are optional dependencies. Note: mp3gain is missing under Debian jessie, so you will not be able to use ReplayGain with MP3 files. This will be worked around in another release. Finally, this also fixes a bug in 0.12.0 for non-sleepy_penguin RubyGem users which relied on pipes for notification. 3 changes since 0.14.0: av_ff_common: fixes for libav-tools under Debian Jessie dtas-readahead: do not barf on missing ffprobe/avprobe sigevent/pipe: require file for DTAS::Nonblock properly Note: ignore the 0.14.1 tag, it was broken and missed INSTALL changes # 0.14.1 / 2016-03-18 dtas 0.14.1 - several bugfixes This release contains several fixes needed to run dtas-player under Debian jessie systems where libav-tools no longer provides ffprobe. dtas-player should now fall back more smoothly to its splitfx YAML format if neither libav-tools nor ffmpeg are installed, as they are optional dependencies. Note: mp3gain is missing under Debian jessie, so you will not be able to use ReplayGain with MP3 files. This will be worked around in another release. Finally, this also fixes a bug in 0.12.0 for non-sleepy_penguin RubyGem users which relied on pipes for notification. 3 changes since 0.14.0: av_ff_common: fixes for libav-tools under Debian Jessie dtas-readahead: do not barf on missing ffprobe/avprobe sigevent/pipe: require file for DTAS::Nonblock properly # 0.14.0 / 2016-01-31 dtas 0.14.0 - tracklist fixes and improvements The player tracklist now has a "consume" mode similar to what exists mpd. The advantage of using "tl consume" over the plain queue is the tracklist is more easily editable. You may enable or disable it in a running player using: dtas-tl consume This also fixes an output formatting bug in "dtas-tl cat" introduced in 0.13.1. Documentation is converted to Perl POD documentation format. It should be easier to build the documentation as pod2man is nearly universal nowadays, unlike pandoc. 14 changes since 0.13.1: doc: update-footer.rb: fix for frozen_string_literal doc: convert to perlpod(1) from Markdown doc: preserve times in website dtas-tl: fix "cat" output player: avoid allocation on sort String#split with a single-byte instead of regexp source/sox: explicitly freeze comment keys source/sox: try_to_fail_harder is a normal method mlib: support all formats of player mlib: support --force option build: install-gem forced to "--local" domain mlib: use more appropriate methods player: support "consume" mode for tracklist doc: update documentation for tl consume and shuffle Many more releases on the horizon! # 0.13.1 / 2016-01-17 dtas 0.13.1 - dtas-tl encoding bugfixes This release addresses encoding and escaping-related bugs affecting the use of "dtas-tl edit" (and to a lesser extent, "dtas-tl cat"). Filenames with characters requiring shell-escaping were not round-tripped correctly, causing movement/addition of such files (which may not be properly encoded to any encoding) to be handled incorrectly. There are also some mlib bug fixes, but the mlib API and CLI are currently unstable and undocumented... 4 changes since 0.13.0: dtas-tl: hopefully fix up encoding issues dtas-tl: shell-unescape cat output mlib: fix foreign-key ordering issues with delete dtas-mlib: avoid redundant '/' in dumped pathname # 0.13.0 / 2016-01-07 dtas 0.13.0 - -player-related fixes and improvements Not much since 0.12.0: * "dtas-tl aac" implemented for adding tracks after the current track in dtas-player(1). * dtas-player now implements software volume control to simultaneously control the volume of all sinks. dtas-console remaps '0'/'9' keys for software volume control to match mplayer(1) behavior. '7'/'8' now adjusts the ReplayGain preamp volume. I'm still considering changing the 'r'/'R' keys for repeat cycling and moving ReplayGain cycling to 'g'/'G': http://80x24.org/dtas-all/20160105090453.GA30328@dcvr.yhbt.net/ * dtas-console shows the paused player track, and trim/shuffle/repeat statuses. * all comments loaded from YAML files intended for dtas-splitfx(1) are stringified. Other than that, I enjoy using the "dtas-tl edit" feature from 0.12.0+ to modify the tracklist very much :) There's a couple of changes to the experimental stuff hasn't been documented at all and even more subject to change than the rest of dtas... 30 changes since dtas 0.12.1: dtas-tl: simplify existing addtail/addhead while we're at it dtas-tl: fixup addtail again player: implement software volume control Rakefile: add Atom feed to website rg_state: fixup replaygain normalization Revert "dtas-tl: simplify existing addtail/addhead while we're at it" nodoc internal classes dtas-tl: "edit" gives sequential track IDs on new tracks gemspec: require Ruby 1.9.3 at minimum dtas-tl: add "aac" (add-after-current) command mlib: wire up search/find/stats to the UI mlib: fix update dtas-readahead: use our spawn fix properly enable "frozen_string_literal: true" doc: various wording fixes and doc enhancements remove vestigial mentions of opusenc splitfx: fixup frozen_string_literal for spawn player: frozen_string_literal fixup for "tl tracks" dtas-console: show paused track and time offset dtas-console: show trim and "tl repeat" status mlib: warn about non-SQLite databases becoming unsupported console: display paused commands properly source/splitfx: stringify comments copyright updates for 2016 player: replaygain: avoid unnecessary ignoring console: try harder to show rate console: show tracklist shuffle status, too tracklist: fix off-by-one error on track removal tracklist: reshuffle tracklist when exhausted dtas-tl: document "aac" addition # 0.12.1 / 2015-12-14 dtas 0.12.1 - one bugfix! :x One bugfix on top of dtas 0.12.1 dtas-tl edit: fix ordering of newly-added songs Everything else in the v0.12.0 release stil applies: http://80x24.org/dtas-all/20151214-dtas-0.12.0-unle@shed/t/ Have fun! # 0.12.0 / 2015-12-14 dtas 0.12.0 - many player updates Notable additions for dtas-player music listeners. dtas-ctl queue cat - display the internal queue dtas-tl shuffle [true|false] - toggle tracklist shuffle dtas-tl edit - open tracklist in an editor see dtas-tl(1) manpage for more details on this: http://dtas.80x24.org/dtas-tl.txt The player tracklist now uses sequential track IDs instead of Ruby object IDs, so it should be easier to use existing commands such as "dtas-tl goto" and "dtas-tl remove" For people using dtas-player for applying real-time effects to splitfx YAML files, dtas-player can now watch for changes in scripts specified in the "command" field of the splitfx YAML file. Previously, dtas-player could only read the splitfx YAML file itself. This requires GNU/Linux and the sleepy_penguin RubyGem installed. dtas-splitfx also learned some switches to allow easier interoperability with other processing tools: -p/--sox-pipe - identical to the sox(1) option -t/--trim - only expose part of the track, useful when combined with the above -p switch See http://dtas.80x24.org/dtas-splitfx.txt for more details. There's also some work-in-progress stuff that's not well documented at the moment. As with anything pre-1.0, expect the possibility of incompatible changes. Since I'm not good at designing protocols, I've also started working on mpd compatibility layer to allow using the normal music playback stuff with more clients (some of the clients I actually like, unlike the seemingly GUI-only landscape of MPRIS :P). Of course, dtas-player itself has most the capabilities of a Unix shell; and those capabilities will certainly not be available to mpd or MPRIS clients. 64 changes since dtas 0.11.0 INSTALL: update documentation for 0.11.0 release splitfx: fix lossy output with player command is in use splitfx: fix non-generic, user-specified targets use monotonic clock on Ruby 2.1+ dtas-splitfx: no arguments for quiet and --no-dither dtas-splitfx: support --trim argument process: implement array expansion to preserve spaces splitfx: show correct command for output splitfx: remove support for encoding opus dtas-console: bind "o" to display time in absolute seconds splitfx: avoid double-truncation with user command source/splitfx: allow watching extra external scripts splitfx: drop unnecessary variable splitfx: documentation for subclasses splitfx: simplify output display dtas-splitfx: comment describing -j (nothing) as infinite dtas-*edit: fix inotify watch invocations splitfx: allow -p/--sox-pipe option splitfx: ensure rate is an integer splitfx: set OUTFMT correctly for subenv if command is set favor recv and recv_nonblock over recvmsg variants parse_time: pass through numeric types parse_freq: trivial new module for parsing frequencies use a common /dev/null player: add "queue cat" command dtas-readahead: new script for -player users on Linux dtas-readahead: avoid polling on pause dtas-cueedit: escape path to temporary file dtas-readahead: make executable gemspec: use SPDX-compatible license README: add link to NNTP and Atom feeds player: cleanup command dispatch dtas-archive: allow specifying SoX compression factor gemspec: duplicate frozen string for older Rubygems allow building the gem without pandoc introduce dtas-mlib for music library functions dtas-mlib: add dump support for debugging tracklist: use lower number unique track IDs tracklist: do not mutate @list when serializing tracklist: avoid needlessly building a hash for track IDs tracklist: shuffle support tracklist: support limiting maximum tracklist size player: refactor and document tracklist interface player: tl (repeat|shuffle|max) and trim swap values tracklist: fixup idempotent "tl shuffle false" switch to exception-free non-blocking I/O add .gitattributes for Ruby method detection mlib: remove non-existent entries mlib: add stats support mlib: no kwargs for 1.9.3 compatibility mlib: add find/search functionality based on mpd mlib: split out the output format from the library mlib: remove kwargs harder player: reduce I/O priority of connected clients mlib: SYSTEM_DEFAULT handlers for SIGINT and SIGPIPE player: support "tl clear" internally test_unixserver: remove test for element limit player: dump state file asynchronously when requested parse_time: enable frozen_string_literal unix_accepted: enable checking for readability after emit tracklist: swap functionality player: show "tracklist" hash with summary info with "current" dtas-tl: learn an "edit" sub command doc: document additions to tracklist handling # 0.11.0 / 2015-05-10 dtas 0.11.0 - bugfixes and splitfx features dtas-player: There is one dtas-player bugfix to fix an infinite loop on missing files when repeating a single track. commit b6515b3a8abab6dcc56166da825e01e2c083bfc9 ReplayGain also uses the "gain" effect instead of "vol", allowing compatibility with "gain -h" to provide extra headroom in user effects. commit 403ed90e2e7bed3e017938d76e17037b0d5059b6 dtas-splitfx: Dither is no longer applied when outputting bit-depths above 16-bit. The --bits/-b/--rate/-r/-C/--compression command-line flags are passed to sox(1) for output and allow overriding any targets specified in the output. commit e6a2ff2a3984320b1b83f5051709880a8b9d3708 commit 03b1303b1c7511fdd1a6b2f63d7c509e822a6a38) The -O/--outdir switch allows specifying a different output directory, useful for splitting from read-only checkouts or to a faster tmpfs filesystem to avoid SSD wear. commit 619b08c9d4e43d94bac39cd395c1def6fa796f06 dtas-splitfx is still a work-in-progress and rapidly improving :) # 0.10.0 / 2015-04-13 dtas 0.10.0 - major features and small fixes Bug fixes: * Exported INFILE environment variable is always shell-escaped This prevent screw-ups when users are using funky filenames. * dtas-player: enqueued commands cannot use audio format bypass (the audio format cannot be known ahead-of-time from raw commands) * YAML omap (ordered map) is explicitly used for all env hashes for user editing. Normal (unordered hashes) are still allowed if loading existing files. This does not affect Ruby 1.9+ users, but allows easier processing for users of other languages. New features (all platforms): * dtas-player now plays dtas-splitfx YAML files support cue sheet emulation based on the track list. Under Linux[1], changes to the YAML file are reflected in real-time as the file is edited and saved in an $EDITOR. This feature is useful for dialing in EQ, compressor, and limiter effects on tracks. * dtas-player supports the "source restart" command for restarting playback on modified files for systems without inotify support. * dtas-splitfx now exports the INDIR and INBASE environment variables which are intended to act like `$(@D)' and `$(@F)' in GNU make(1). It should ease managing temporary files for some effects (e.g. noiseprof + noisered in sox) * dtas-console supports '!' and '@' hotkeys keys for moving within files with embedded cue sheets. * dtas-player supports the "trim" command to focus on a particular portion of a track. It may be useful when combined with the existing "tl repeat" command for dialing in audio editing parameters (via a splitfx YAML file): To continuously repeat a 5 second part of the current track starting at 1 minute into the track: dtas-ctl tl repeat 1 && dtas-ctl trim 1:00 5 Passing "off" as the parameter disables trim: dtas-ctl trim off * dtas-env(7) manpage added for common environment variables across the suite * dtas-sinkedit shows default parameters in addition to user-changed parameters New features (Linux-only) * dtas-sourceedit and dtas-sinkedit support inotify[1] when editing the YAML text file. This allows real-time updates on $EDITOR file save as the user edits the parameters of the commands used for decoding and playback. * dtas-archive - paranoid archival script for copying and (re-reading) files. This is useful when transferring files from removable devices to computers without ECC memory (or any other bit errors in transport before main memory is accessed). This requires Ruby 1.9.3 or later (no 3rd-party RubyGems) on Linux for IO#advise support. There are also many internal cleanups and more work-in-progress for dtas-splitfx features. [1] feature requires the sleepy_penguin RubyGem to be installed. # 0.9.0 / 2014-12-22 dtas 0.9.0 - minor features and speedups The major new feature is '>' and '<' keys are now supported in the dtas-console interface for dtas-player. "dtas-tl cat" also received a minor speedup for big tracklists via syscall reductions shortlog of changes since 0.8.0: process: update comment for bug workaround process: update comment for bug workaround #2 compat_onenine: simplify pipe wrapper tracklist: favor &:sym_to_proc style dtas-console: '>' and '<' keys for tracklist next/prev dtas-tl: halve write() syscalls when emitting tracklists reduce syscalls in recvmsg invocations doc: flesh out "tl" subcommand docs The best is yet to come! # 0.8.0 / 2014-10-21 dtas 0.8.0 - player bugfixes Several bugfixes for the dtas-player and playback-related components. Audio-editing support is still being worked on. See git repository for full details: git clone git://80x24.org/dtas Terminal-browser-friendly HTML mail archives are also up at: http://80x24.org/dtas-all/ The mailing list for anything related to dtas remains at: dtas-all@nongnu.org The list is open to all without subscription (no HTML email). dtas is for and by users who never want to deal with GUIs. shortlog of changes since 0.7.0: dtas-console: add note to install "curses" gem if missing test/helper: compat w/ coverage in Feature #9508 player: style cleanup to favor &:methods update copyrights and email address for 2014 trimfx: initial cut of scheduling + gap filling test/helper: ancient minitest compatibility test_splitfx: fix tests without opus{enc,dec} remove builtin-$FADEFX support fadefx: remove module tests: hoist out pluck generation xs: favor &: block style for simple cases rely on filesystem encoding client_handler: minor cleanup (favor &:proc) doc: document "tl get"/"dtas-tl cat" escaping gotcha dtas-console: force encoding for current locale unix_server: fix for infinite loop sink: favor &:proc form instead of blocks favor &:proc form instead of blocks in more places unix_accepted: wait for readability on EAGAIN # 0.7.0 / 2013-12-30 dtas 0.7.0 - minor feature and teeny optimizations dtas-splitfx gained support --no-dither/-D option. dtas-player should work now for non-Linux users without splice(). There are minor optimizations for users of multiple sinks with dtas-player. # 0.6.0 / 2013-10-19 dtas 0.6.0 - player tracklist fixes/improvements * dtas-player - many fixes to tracklist handling Also minor syscall reduction and a fix for non-Linux-splice users. * the "dtas-tl reto" subcommand also works somewhat sanely, now. There's also a bunch of work-in-progress code that's definitely not ready for prime time and will change a lot. I'm just making this release because the work-in-progress stuff is completely orthogonal to the mostly-working stuff, and dtas has users other than myself now(!) dtas is going in several different directions related to audio, not just playback. My immediate focus will probably be on audio editing and hopefully 0.7.0 will have more of that[1]. Of course, critical fixes to components people actually use will take priority (but I think dtas-player is solid, by now. * dtas-partstats - initial partitioning wrapper to the sox stats effect See commit 4f1a73ed584f0f74d6b32241f02ae871f3415f4a for details. This works, but could use some documentation... There's also some stuff which is completely not wired up outside of internal unit tests, but will hopefully be ready in 0.7.0 Eric Wong (21): splitfx: default to default DTAS::Format if unspecified player: add factor out redundant condition check buffer/read_write: fix undefined local variable player: delay tracklist reset until asked to play buffer: remove ioctl syscall in common paths pipe: use memoized IO#nonblock? in blocking case player: "tl add" may trigger player start tracklist: remove_track updates tracklist position player: "tl remove" drops the track from the queue dtas-partstats: initial implementation tracklist: update position when track is added format: common detection code (based on sox) tracklist: fix off-by-one when adding track player: "tl remove" properly stops current track dtas-tl: "reto" command does not scan track IDs IO#nread compatibility for Rubinius (Linux-only) use shorter socket constants for sockets # 0.5.0 / 2013-09-30 dtas 0.5.0 * dtas-*edit - account for editors which rename over files * dtas-player - support optional bypass mode for rate, bits, channel This allows users to avoid any internal resampling at the cost of losing gapless playback when files have different decoded formats - "tl goto" starts playback if idle (and not paused) - support seeking based on embedded cuesheet (FLAC) - rename "tl previous" to "tl prev" See dtas-player_protocol(7) for the protocol extensions * dtas-console - allow exit via 'q' key # 0.4.0 / 2013-09-22 dtas 0.4.0 - dtas-splitfx, tracklist in -player There is a new dtas-splitfx command intended for splitting up single-track recordings into multiple tracks and applying effects/comments to each of them. It was made for splitting recordings of vinyl records and live concert recordings. dtas-splitfx is independent of dtas-player (but shares some code/conventions). The dtas-player also gains tracklist support (based on the MPRIS 2.0 spec). This is another step toward having an MPRIS 2.0-compliant interface. There is a "dtas-tl" command helper for using/testing tracklist functionality. This helper may be folded into a higher-level client soon, so it is not recommended as a a stable interface. There are also some minor bugfixes in dtas-player. Eric Wong (51): source/sox: correctly extend xs for try_to_fail_harder test/*.rb: test/unit compatibility test/player_integration: thread-safety fix test/*: compatibility class for both minitest 4 and 5 test/helper: delay at_exit registration for tmpfifo dtas-console: show paused track when paused test/helper: fix var shadowing add dtas-splitfx - .cuesheets + make(1) splitfx: round instead of truncate for CDDA GNUmakefile: enable warnings by default for tests implement environment variable expansion splitfx: flesh out functionality + integration test test/helper: rescue on NameError instead of checking defined? sink: remove unnecessary writable_iter pipe: remove pipe_size call for non-Linux platforms test_splitfx: remove parallelize_me! splitfx: minor bugfixes, use strings for commands/targets tracklist: preliminary tracklist class player: implement basic tracklist functionality player/client_handler: "tl add" returns track_id of added track dtas-tl: add add-tail command tracklist: fix go_to functionality player: do not repeat first track on start if using playlist dtas-tl: expand paths before using them player/client_handler: prevent seek from excessive requeue dtas-console: avoid using current if it is nil player: reset tracklist when idle stat is detected tracklist: next_track -> advance_track player: implement previous/next commands player: "tl goto" takes optional offset arg in HHMMSS.SUBSEC tracklist: previous! only wraps around when repeat is enabled tracklist: implement single-track repeat player: s/echo/wall/ for broadcasting to all watchers player/client_handler: return count for list-style responses dtas-tl: add a handy "clear" command Rakefile: add fix_perms dep when building gem doc: nodoc new classes player: do not reset tracklist if paused test_player_integration: avoid premature sink death dtas-tl: add-{tail,head} -> add{tail,head} document dtas-tl(1) and the "tl" commands in the protocol splitfx: add opus and flac-cdda outputs player (tl add): do not repeat first track when idle splitfx: add "skip" directive splitfx: preserve original rate/channels/bits for generic targets player: stop sinks whenever we're out-of-tracks to play dtas-tl: add "reto" command splitfx: rename "opus" target to "opusenc" doc: add manpage for dtas-splitfx splitfx: nodoc the Skip class README: update for dtas-splitfx and tracklist in -player # 0.3.0 / 2013-09-02 dtas 0.3.0 - small improvements and tweaks There is now a mailing list hosted by Savannah: dtas-all@nongnu.org No subscription is necessary to post (please Cc: all on replies). This release should be compatible with Ruby 1.9.3 built with Syck, as this seems to be the case with Debian wheezy systems. Hopefully dtas is easier for Debian GNU/Linux users not familiar with Ruby. Probing via avprobe/ffprobe for audio in large containers (e.g. VOBs) should have a higher probability of success, but seeking with large containers is still broken. My suggestion is to use avconv/ffmpeg to extract the raw audio (without transcoding) from VOBs/DVDs and just play that. dtas-sourceedit learned to load YAML from stdin (same format as "dtas-ctl source cat $SOURCENAME"). player protocol changes: - "state dump [FILENAME]" allows dumping the current state (in case an unexpected shutdown happens and at_exit does not run) - "env" (no args) returns the environment note: I'm still considering revamping the protocol completely Eric Wong (23): dtas-console: support terminal resize README: add explicit copyright for this file remove "encoding: binary" header use rg: avoid adding gain if fallback_gain + preamp is near zero av_ff_common: fix undefined var in astream fallback disclaimer: disambiguate between dtas/$PROGNAME GNUmakefile: combine with pkg.mk Rakefile: additional pointer to git-set-file-times Rakefile: wrap long line dtas-sourcedit: allow loading YAML from stdin test_source_av: fix test to actually run source/{av,ff}: probe harder for audio in weird containers doc: reorganize sections around dtas-player doc: sink_examples: reference dtas-xdelay and friends doc: add contact info to all documentation INSTALL: update installation instructions player: add "state dump" command to serialize state doc/dtas-xdelay: reference sox/play env, update email address dtas-xdelay: pass -q flag to play(1) by default player/client_handler: cleanup to avoid redundant code player: explicitly stop+wait for sink death at_exit player/client_handler: support for dumping individual env test/test_player_client_handler: rename shadowed method # 0.2.0 / 2013-08-28 dtas 0.2.0 - minor bugfixes and packaging cleanups Most notable is the addition of the dtas-player_sink_examples manpage. Minor bugfixes and documentation updates. Note: I'm considering a major revamp of the protocol now that things function reasonably well. Eric Wong (10): Rakefile: fix NEWS generation player: fix sink auto-restart on "sink ed" changes doc: dtas-player_sink_examples manpage av_ff_common: zero samples on streams of unknown length doc: add more examples to dtas-player_sink_examples doc: dtas-player_protocol: note proposed revamp Rakefile: use git set-file-times for consistent mtimes doc: cleanup makefile formatting/naming doc: protocol: question source ed tryorder, minor edits add license/copyright headers/footers to all files # 0.1.I / 2013-08-26 dtas 0.1.I - zero-one-infinity 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. Eric Wong (40): README: include a pointer to the plain-text docs set REPLAYGAIN_* vars for source command as documented dtas-*edit: properly fall back to 'vi' as documented use require_relative for loading 1.9 compatibility dtas-console: implement better ReplayGain and format support dtas-console: swap 'j' / 'k' bindings to match docs doc: document new dtas-console key bindings Rakefile: rsync task uploads gzipped files, too test_rg_integration: avoid unused variable warning unix_client: remove non-SOCK_SEQPACKET support tests: use unix_client in tests to kill some redundant code command: remove kill, we no longer rely on it player: remove unreachable branch split out source handling to prepare for avconv/ffmpeg support format: decouple from soxi preliminary support for avconv/avprobe from libav source/av: handle multiple audio streams w/ proper sample rate dtas-console: always show ReplayGain line format: fix switching to floating point samples player: fix logic around sink death/respawns doc: add note about increased wakeups with dtas-console process: allow passing env to qx process: remove redundant "xs" method process (qx): disambiguate err/err_str, add no_raise cleanup multi-source handling between sox and av player: flesh out multi-source in protocol/sourceedit dtas-{sink,source}edit: reduce redundant code player: sink ed pipe_size= disallows nils player: restart sinks on "sink ed" modification player: break out gracefully if a file is totally unplayable source/sox: bail out if zero samples are detected test_source_av: disable if avprobe/avconv are not available add lightly-tested ffmpeg support README: remove avconv/ffmpeg item source/sox: cleanup error handling, quiet redundant warnings player: do not assign @current until successful spawn client_handler: remove redundant checks for @current.pid av_ff_common: :nodoc: this constant and add TODO item GIT-VERSION-GEN: :nodoc: the version constant :nodoc: core classes in 1.9 compat layer # 0.0.0 / 2013-08-25 initial release with dtas-player and friends # COPYRIGHT Copyright (C) 2013-2015 all contributors License: GPL-3.0+