about summary refs log tree commit homepage
DateCommit message (Collapse)
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..
2016-01-25source/sox: try_to_fail_harder is a normal method
The @last_failed state is in the parent object, not the dup-ed object we fork off of.
2016-01-24source/sox: explicitly freeze comment keys
We load them frequently enough that the garbage is not worth it.
2016-01-24String#split with a single-byte instead of regexp
This reduces memory usage as a Regexp object is hundreds of bytes and a single-byte string object is only 40 bytes that is deduped within the VM.
2016-01-24player: avoid allocation on sort
Hash#keys already allocates a new array, so we may sort it in place without worrying about side effects and avoiding an extra allocation.
2016-01-21dtas-tl: fix "cat" output
It needs to display the track ID on the left like in 0.13.0 and earlier versions. Oops. Fixes: cb5a016bf5e1 ("dtas-tl: shell-unescape cat output")
2016-01-18doc: preserve times in website
We should not be busting caches and wasting visitor's bandwidth for unmodified files.
2016-01-18doc: convert to perlpod(1) from Markdown
perlpod(1) is already installed by default on Debian and RedHat-based systems; and probably most modern *nixes; pandoc(1) (and Haskell) are not. POD also more standardized than Markdown (which flavor? :P), especially for generating manpages. So save any potential documentation editors some disk space by not forcing them to install Haskell and pandoc. Finally, I'm a mildly proficient in Perl and do not know Haskell at all and have a better chance at reading/hacking the source if the document generator breaks.
2016-01-17doc: update-footer.rb: fix for frozen_string_literal
Oops :x
2016-01-17dtas 0.13.1 - dtas-tl encoding bugfixes v0.13.1
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
2016-01-17dtas-mlib: avoid redundant '/' in dumped pathname
Harmless, but noisy and ugly.
2016-01-17mlib: fix foreign-key ordering issues with delete
We need to ensure children and comments are all deleted before parents are.
2016-01-17dtas-tl: shell-unescape cat output
We do the same with edit and this makes tracklists look nicer with non-7-bit-ASCII characters. While we're at it, use each_slice to request more info from the tracklist to reduce syscalls on both ends.
2016-01-17dtas-tl: hopefully fix up encoding issues
POSIX filesystems allow any combination of bytes, so we should be able to edit the tracklist when we have a filename with non-UTF-8 (or whatever locale the user uses). Try to present the user with a reasonable name when they have an external encoding (typically UTF-8); but be prepared to dump out whatever binary sequence the filesystem allows.
2016-01-07dtas 0.13.0 - -player-related fixes and improvements v0.13.0
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
2016-01-07dtas-tl: document "aac" addition
Note to self: remember to document new features as they're added.
2016-01-05tracklist: reshuffle tracklist when exhausted
For now, shuffle means "random without repeats". So avoid repeating ourselves by shuffling when we've reached the end of the shuffled tracklist and have no more tracks to go. Whenever a client restarts the player or hits the loop for repeat, we'll have a freshly shuffled list for them to listen to.
2016-01-05tracklist: fix off-by-one error on track removal
@pos is an array index, and should never go beyond the last element.
2016-01-05console: show tracklist shuffle status, too
We support this feature, so it should probably be shown along with the repeat status of the tracklist. Ensure we notify all of our listeners about the status change in player, too.
2016-01-04console: try harder to show rate
Try to take advantage of bypass being enabled for sample rate, then show the raw sample offset if we cannot get the rate.
2016-01-04player: replaygain: avoid unnecessary ignoring
It is possible for a file to only have one of the ReplayGain tags we need and not the previous-required REPLAYGAIN_TRACK_GAIN tag. So do not reject the entire series of tags if a file has the one we want.
2016-01-02copyright updates for 2016
Using the 'update-copyright' script from gnulib[1]: git ls-files | UPDATE_COPYRIGHT_HOLDER='all contributors' \ UPDATE_COPYRIGHT_USE_INTERVALS=2 \ xargs /path/to/gnulib/build-aux/update-copyright [1] git://git.savannah.gnu.org/gnulib.git
2016-01-02source/splitfx: stringify comments
It's easier to leave numerics unquoted in YAML; so automatically stringify comments comming from the YAML file.
2016-01-01console: display paused commands properly
Running commands can be "paused" (actually, they're stopped), so we must display them correctly when attempting to encode them in the correct format instead of barfing when we attempt to call the 'encode' method on a Hash object.
2015-12-31mlib: warn about non-SQLite databases becoming unsupported
For a music collection (even a large one), SQLite is sufficient and less overhead than all of Sequel.
2015-12-31dtas-console: show trim and "tl repeat" status
It probably makes sense for the -console user to know if tracklist repeat and trim are enabled. Have player emit these in "current" output and let the console client track them for now.
2015-12-31dtas-console: show paused track and time offset
When invoking the "current" command, the player now returns the first track + offset in the queue. This should make it easier to show what's paused or not.