about summary refs log tree commit homepage
path: root/lib
DateCommit message (Collapse)
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-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-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-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-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-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-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-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-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-17mlib: fix foreign-key ordering issues with delete
We need to ensure children and comments are all deleted before parents are.
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-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.
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.
2015-12-31player: frozen_string_literal fixup for "tl tracks"
Oops :x
2015-12-27splitfx: fixup frozen_string_literal for spawn
This only affected splitfx when it used the command option, and only when calling dtas-splitfx (not when playing splitfx files through the player).
2015-12-26remove vestigial mentions of opusenc
We removed support for opusenc back in May as it was not really suitable for audio production and a maintenance burden. ref: commit 7ca5d0bfc714c254c374af9cbc2e024a8b439725 ("splitfx: remove support for encoding opus")
2015-12-25enable "frozen_string_literal: true"
While we're in the area, make a wording change from "GPLv3 or later" to "GPL-3.0+", as the latter is favored by SPDX.org
2015-12-20mlib: fix update
We cannot use "dirname" in queries, oops :x
2015-12-16mlib: wire up search/find/stats to the UI
Not in any way a stable interface, yet, and still incomplete. This should emulate parts of the mpd protocol which should make it easier to debug and develop.
2015-12-15nodoc internal classes
DTAS does not expose any sort of public API for external users, so it will not be documented using RDoc. Currently all of our documentation is in plain-text or Markdown (only for manpages).
2015-12-14rg_state: fixup replaygain normalization
Oops, normalization is probably a forgotten feature...
2015-12-14player: implement software volume control
This is on a linear scale from 0.0 (mute) to 1.0 (no change) This is in the MPRIS spec and mpd as well (scaled to 0-100) This changes dtas-console key bindings (0/9) slightly to match mplayer more closely. ReplayGain preamp adjustment has moved from '0'/'9' to '7'/'8' keys. The 'm' key also toggles mute state (the pre-mute volume is stored in the dtas-console instance, not in dtas-player itself).
2015-12-14player: show "tracklist" hash with summary info with "current"
This allows clients to quickly query tracklist size/position/shuffle/random info.
2015-12-14tracklist: swap functionality
This (from the point of the client) will atomically swap two tracks. This should allow easily implementing of a tracklist editor.
2015-12-13unix_accepted: enable checking for readability after emit
2015-12-13parse_time: enable frozen_string_literal
This is a new feature in Ruby 2.3 which can reduce allocations without adding ugly ".freeze" calls everywhere. This is a small enough file that we shouldn't have to worry about inadvertant breakage.
2015-12-13player: dump state file asynchronously when requested
This avoids stalling when we have a gigantic tracklist.
2015-12-13player: support "tl clear" internally
It is orders of magnitude more efficient to implement this in the player and very noticeable when using large playlists.
2015-12-13player: reduce I/O priority of connected clients
Do not batch processing of requests or buffered output. We cannot have clients running "dtas-tl cat" or similar to dump a gigantic playlist cause us to have gaps in our playback. Since we implemented a tunable tracklist limit, we can also remove the hardcoded 100 element limit for buffered messages while we're at it; now the tracklist limit affects maximum memory use.