about summary refs log tree commit homepage
path: root/test
DateCommit message (Collapse)
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
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-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
2015-12-31player: frozen_string_literal fixup for "tl tracks"
Oops :x
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-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-13test_unixserver: remove test for element limit
Fixes: commit d628e9bd3c5ef42e44c8e14f8eaf9a85dd541a4c ("player: reduce I/O priority of connected clients") Oops :x
2015-12-13tracklist: fixup idempotent "tl shuffle false"
Disabling shuffle should be idempotent.
2015-12-07tracklist: support limiting maximum tracklist size
This defaults to 16384? This is what mpd uses by default as well. Of course folks interacting with dtas-player directly can override this: dtas-tl max INTEGER dtas-tl max This is NOT meant to be a hard security measure for local users talking to dtas-player directly. It is only to prevent accidentally stupid things like flooding the playlist with a broken script and to prevent remote users from DoS-ing us via the to-be-written mpd proxy/emulation layer. Remember: dtas-player itself will ALWAYS remain capable of executing arbitrary code :)
2015-12-07tracklist: shuffle support
This is in the MPRIS 2.0 TrackList spec and also in mpd (as "repeat" mode), so we can probably support it directly in player to ease implementations of future wrappers.
2015-12-05tracklist: use lower number unique track IDs
This is easier for users to read and type; and _might_ help with race conditions due to fast object recycling from GC. We'll also be implementing playist versioning on top of this in the next commits for MPD protocol compatibility. Unfortunately this adds an additional 40 bytes of per-track overhead (on 64-bit systems, its only 20 bytes on 32-bit). However, we may be able to save memory in the future by supporting dtas-mlib node IDs if we integrate dtas-player with DTAS::Mlib. While we're at it, include a minor speedup for DTAS::Tracklist#remove_track by using Array#delete_at instead of relying on Array#compact! after assignment This should improve "dtas-tl cat" output readability dramatically. The state file (~/.dtas/player_state.yml) remains compatible between dtas-player before and after this change.
2015-11-22introduce dtas-mlib for music library functions
Eventually this will support searching and be the basis of an mpd-compatible proxy in front of dtas-player
2015-10-04player: cleanup command dispatch
We can generate many command calls easily and dynamically, so avoid the code and cognitive overhead for the majority of commands.
2015-07-18parse_freq: trivial new module for parsing frequencies
Seems a bit stupid, but oh well.
2015-05-18splitfx: remove support for encoding opus
Lossy file encoding has too many tunable variables and it is not a good fit for an audio production tool such as dtas-splitfx. This was becoming a maintenance burden for me and is a sign of featuritis.
2015-05-17process: implement array expansion to preserve spaces
This can make it easier to specify mcompand parameters in socks, as those require separate levels of parameter parsing and require quoting in shell.
2015-05-07replaygain uses the "gain" effect instead of "vol"
The `gain' effect seems superior as it can "see" across the effects chain to take into account extra/lost headroom. For example, this allows me to add the the "gain -h" effect at the start of my effects chain before the RGFX placeholder in my source command, so when I play a file requiring a -6dB ReplayGain adjustment, I will only need an additional -4dB of headroom to accomodate the 10dB boost at 20Hz I use (for listening through headphones): Before: RGFX='vol -6dB' sox "$INFILE" $SOXFMT - $TRIMFX $RGFX vol -10dB equalizer 20 0.7071q 10 After: RGFX='gain -6' sox "$INFILE" $SOXFMT - $TRIMFX gain -h $RGFX equalizer 20 0.7071q 10
2015-02-04fadefx: effects chain generation
We need to generate a coherent command set for wrapping portions together, this sets us up for that.
2015-01-20rename the TrimFX class to TFX
TrimFX was too ambiguous with the common environment variable we use throughout dtas. Since TFX is more limited in scope but should be more frequently-typed by users (of -splitfx) we'll use the shorter name here.
2015-01-19update copyright years and links to mailing list archives
The documentation part is managed by the new Documentation/update-copyright script. For the future, the rest may be managed by the update-copyright tool in gnulib
2015-01-19Revert "fadefx: remove module"
This reverts commit 3471463325be6c990b3abd18b4d34f723440d19a. While not strictly necessary, it makes the user syntax in splitfx files much terser. Changes from the original version should make it easier-to-read and the diagram should help a lot with understanding.
2015-01-19consolidate spawn fix for Ruby [Bug #8770]
Ensure we can apply the workaround to dtas-sourceedit and our test cases while also simplifying the existing call sites a little. This will also make for less code churn in 3-5 years down the line when we drop <= 2.1 support.
2015-01-19sinkedit: flesh out all parameters
dtas-sinkedit now shows default parameters in addition to user-changed parameters, allowing easier editing. Also, we need to be able to revert back to using the default pipe_size on Linux by setting pipe_size to nil (as an empty field in YAML).
2014-12-29trimfx: require audio format at initialization
This makes things easier for scheduling/expansion since we won't have to deal with floating point numbers when we work directly with with sample counts (like the rest of dtas).
2014-12-28splitfx: use $FX env consistently in targets, too
While we're at it, document the splitfx manpage and make the example suitable for tests.
2014-12-27player: support playing splitfx YAML files
This allows splitfx users to test CUE breakpoints and run file-specific effects without interrupting their normal flow.
2014-12-27test: favor Process.spawn when possible
Process.spawn allows vfork() + execve() usage in Ruby 2.2.0 to improve performance over normal fork() + execve().
2014-07-06tests: hoist out pluck generation
This allows the same sound to be reused in tests.
2014-07-05fadefx: remove module
This will not be needed after all.
2014-06-30remove builtin-$FADEFX support
This is more generically supported via variables.
2014-06-30test_splitfx: fix tests without opus{enc,dec}
Just skip the test for now since systems without opusenc and opusdec are becoming rarer.
2014-06-30test/helper: ancient minitest compatibility
RubyGems is not available on some LTS distros (Ubuntu precise with Ruby 1.9.3-p0)
2014-06-23trimfx: initial cut of scheduling + gap filling
The names are subject to change, but the idea is to make multiple passes over the audio if effects overlap and combine everything afterwards. Unedited portions will be passed through sox (via trim and no other effects)
2014-06-06update copyrights and email address for 2014
I'm still normal, and still trolling, but 80x24.org will be epic :)
2014-03-13test/helper: compat w/ coverage in Feature #9508
There's a feature request for better coverage support in ruby-trunk https://bugs.ruby-lang.org/issues/9508 At minimum, we need to preserve compatibility; but we should set aside time to take advantage of the extra coverage support.
2013-12-27merge some select calls for splice users
Avoid an additional select syscall in the splice path by injecting the target checks into the main loop. We can do this because we always process writers before readers. This adds additional userspace processing, but it avoids one potentially expensive (and potentially task-switching) syscall in many cases; so it should be worth it to avoid skipping with small buffer. This should avoid buffer underuns with mixed-sized buffers when using multiple sinks. This could work for the read_write path, too, but I don't use that enough and this change may still be buggy even for splice users.
2013-10-17fadefx: initial commit
This allows parsing and will eventually interact with trimfx.
2013-10-17trimfx: flesh out parsing of commands
Only lightly tested, but this should give us some idea of where we'll be going...
2013-10-15trimfx: flesh out to_sox_arg implementation
This will be dependent upon sox for the trim effect, at least. Other bits will be exposed as needed.
2013-10-13trimfx: initial bits
This will allow editing individual portions of audio of a larger file while creating cross fade effects to join them.
2013-10-06buffer: remove ioctl syscall in common paths
We do not need this for single sink situations (the common case) at all. We also do not need to check IO#nread for splice, either; we can just do non-blocking I/O. The only common path where we might still need it is the non-splice case with multiple sinks.
2013-09-30player: support seeking based on embedded cuesheet (FLAC)
This adds the ability to seek internally within FLAC file based on the internal CUE sheet. Other formats may be supported in the future, but FLAC is the only one I know of which supports embedded cue sheets. Note: flac 1.3.0 is recommended for users of non-CDDA-compatible formats. See updates to dtas-player_protocol(7) for details.
2013-09-28player: support bypass for rate, bits, channel
This may be used to avoid automatic: * resampling (rate) * down/upmixing (channel) * dither/truncation (bits) Using any bypass mode means we can no longer guarantee gapless playback for audio collections where rate, channel, or bits vary. This can however be useful when CPU usage is too high. This may also be useful in audio engineering situations.
2013-09-22splitfx: rename "opus" target to "opusenc"
sox(1) may gain the ability to natively encode to Opus one day without using opusenc(1), so make it more explicit we are relying on opusenc(1).
2013-09-10splitfx: add opus and flac-cdda outputs
These are common output targets, at least for my workflow.