about summary refs log tree commit homepage
DateCommit message (Collapse)
2019-01-02dtas 0.16.1 v0.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.
2019-01-02splice: fix missing F_NONBLOCK flag for single output
This fixes hanging when using a single audio output for Linux users using splice.
2019-01-02dtas-linux 1.1.0
This bumps version requirements for sleepy_penguin and dtas to eliminate the "io_splice" dependency for Linux users.
2019-01-02dtas 0.16.0 v0.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
2019-01-02use sleepy_penguin 3.5+ for splice and tee support
Eliminate loading of the io_splice RubyGem to reduce memory overhead. Extra DSOs are wasteful and io_splice is being phased oiut for sleepy_penguin, which encapsulates more Linux-specific functionality anyways. cf. https://udrepper.livejournal.com/8790.html
2019-01-02mlib: fix unused variable warning
2019-01-02dtas/watchable: check SystemCallError
Sometimes files become unreadable.
2018-01-30mlib: ignore files with nil times
It happens with some video files, apparently.
2018-01-30mlib: use flock to get around SQLite busy errors
The SQLite busy waiting scheme isn't great for usability and the busy timeout is done by sleep+backoff. I prefer to say we only support filesystems with flock() for our little DB.
2018-01-29mlib: remove redundant tag massaging and encoding
Redundant since ("player: support guessing encodings for comments")
2018-01-29mlib: compatibility with Sequel 5.x
Apparently some degree of thread-safety is being enforced; not sure I agree, but oh well...
2018-01-29get rid of Windows-31J regexps
Oops, a Perlism crept in :x
2018-01-29player: support guessing encodings for comments
This can be helpful for end users and is close to what other players use. We can fallback to Encoding.default_external by default (typically UTF-8) and then again using `charlock_holmes' if installed. Note: path names remain binary, because that's how proper filesystems operate.
2018-01-11Rakefile: update path for uploads
I forgot to update this path when our website changed from http://dtas.80x24.org/ to https://80x24.org/dtas/ to reduce TLS renewal and negotiation overhead. Thanks to Rene Maurer for noticing. cf. https://80x24.org/dtas-all/20180111114546.77906b35@cumparsita.ch/
2017-11-19console: ensure time calculations are done in UTC
We must do this if the user does not use UTC in their time zone, otherwise things could get a bit wacky in the display.
2017-04-28pipeline: new module for running process pipelines
This should allow us easily to manipulate process pipelines as an array of arrays. Originally posted at http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/435624
2017-04-07dtas 0.15.0 v0.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+
2017-03-02deduplicate strings using String#-@ (uminus) in Ruby 2.5+
This is faster than relying on eval() for older Rubies. https://bugs.ruby-lang.org/issues/13077 Ruby 2.5 is targetted for release in December 2017.
2017-01-17readahead: fix running commands with non-files
2017-01-13readahead: handle queued commands properly (again)
We may have hashes in the queue, too. Followup-to: af91a075c10c ("readahead: handle queued commands properly")
2017-01-11source/sox: relax comment NAME restriction
This is needed for the "ALBUM ARTIST" tag which has a space in the name. This is looser than <http://www.xiph.org/vorbis/doc/v-comment.html>, but probably good enough for practical purposes.
2017-01-06rg_state: fix no-op gain detection
Seeing tiny (or zero) values for the "gain" effect is an eyesore in process table output, and a waste of CPU cycles in sox. So stop using the "gain" effect for imperceptible changes in volume. While we're at it, remove the pointless knobs for setting this, too. They were never documented and I doubt anybody would want to tweak them at runtime.
2017-01-02buffer/splice: remove MAX_SIZE constant
We do not need it at runtime, only for testing on Linux-like systems
2017-01-02source/sox: simplify conditional, slightly
One normal method dispatch is probably preferable to two optimized instructions + immediate.
2016-12-31player: freeze sink name to avoid needless dup
Ruby Hashes will automatically create frozen copies of unfrozen strings used as hash keys to avoid accidental mutation. Pre-freeze keys explicitly so the Ruby VM will not need to create the frozen copy.
2016-12-27http -> https, and relocate homepage to https://80x24.org/dtas/
HTTPS allows some level of security(*) and we've actually supported it on 80x24.org for many months, now. So, point new readers to it. Moving away from hostname-based homepages will allow us to save on subjectAltName space (and bandwith) when negotiating an HTTPS connection. We'll also have an .onion mirror for Tor users, soon, too; in case we can't afford to pay ICANN in the future. (assuming TLS libraries don't have any more Heartblead-level bugs in them, CAs aren't compromised, MITM HTTPS stripping proxies don't get in your way, and your certificate bundle isn't compromised).
2016-12-27test/test_rb_state: quiet deprecation warning
MT6 won't support assert_equal(nil, ...), apparently
2016-12-27source/sox: integrate mcache support to reduce soxi calls
This should improve performance with slow filesystems or systems with slow spawn performance.
2016-12-26introduce mcache class for caching audio metadata
We often waste cycles rerunning commands we don't need to run frequently. Introduce a short term cache for these.
2016-12-26format.from_file: reduce soxi invocations
Spawning processes under Ruby on Linux is relatively cheap, but may not be for other OSes and it's still cheaper to spawn fewer processes.
2016-12-07splitfx: more consistently generate fade_in effects
No reason to generate the command in a different place than fade_out.
2016-11-26mlib: use transaction for removing stale entries
This ought to avoid busy DB errors.
2016-11-05readahead: handle queued commands properly
We can't do much for readahead when it comes to dtas-player running arbitrary commands.
2016-07-07dtas-readahead: cleanup open files on pause
We must not leave open files lingering when the player pauses, as it could prevent remote filesystems from unmounting.
2016-06-17archive: fix suffix replacement for stats
We should generate "XYZ_0001.stats" files, not "XYZ_0001.flac.stats".
2016-04-24player: extra "cue" seeking functionality
These commands allow easier jumping within a track marked by embedded CUE sheets. I've found them helpful for tracking out large recordings of multiple tracks (e.g. vinyl transfers or live concert recordings).
2016-04-11README: add link to gmane NNTP server
In case the news.public-inbox.org server goes down, gmane is also available and is fed directly by the nongnu.org Mailman instance.
2016-04-11player: "cue prev" reliably hits previous cue breakpoint
Seeking around a track should not be done relative to a previous seek, but should rather be analogous to the "tl prev" command to skip around the tracklist. I'm not sure what drugs I was on when I originally wrote this original version, but I'm fairly certain this is a bugfix and not intentional behavior.
2016-03-18dtas 0.14.2 - several bugfixes v0.14.2
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
2016-03-18dtas 0.14.1 - several bugfixes v0.14.1
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
2016-03-18sigevent/pipe: require file for DTAS::Nonblock properly
This fixes a bug introduced in 0.12.0 which only affects non-sleepy_penguin users. Fixes: d3cf61b05d95 ("switch to exception-free non-blocking I/O")
2016-02-12dtas-readahead: do not barf on missing ffprobe/avprobe
Both of these are optional, so stop trying them if we do not detect them.
2016-02-09av_ff_common: fixes for libav-tools under Debian Jessie
Newer avprobe outputs a new format, fix our parser to workaround this while remaining compatible with the old one in Debian wheezy. Additionally, ffprobe is no longer available as a link to avprobe.
2016-01-31dtas 0.14.0 - tracklist fixes and improvements v0.14.0
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 <true|false> 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!
2016-01-26doc: update documentation for tl consume and shuffle
shuffle was never documented in dtas-tl(1) when it was introduced, and consume is a new feature.
2016-01-25player: support "consume" mode for tracklist
When activated, this boolean deletes a song from the tracklist after it is played.
2016-01-25mlib: use more appropriate methods
.each on a Sequel dataset is more appropriate for the way we emit comments. And using Array#map! is more efficient when we do not need the original array.
2016-01-25build: install-gem forced to "--local" domain
This avoids needless network traffic when installing the locally-built gem.
2016-01-25mlib: support --force option
We will allow forcing updates since upgrading dependent software (e.g. sox, avprobe, ffprobe) may allow previously-ignored files to become support
2016-01-25mlib: support all formats of player
Almost, we will need to get a list of all suffixes supported by ffprobe or avprobe. This could prove tricky..