Date | Commit message (Collapse) |
|
We can generate many command calls easily and dynamically, so
avoid the code and cognitive overhead for the majority of commands.
|
|
Seems a bit stupid, but oh well.
|
|
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.
|
|
This can make it easier to specify mcompand parameters in
socks, as those require separate levels of parameter parsing
and require quoting in shell.
|
|
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
|
|
We need to generate a coherent command set for wrapping
portions together, this sets us up for that.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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).
|
|
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).
|
|
While we're at it, document the splitfx manpage and
make the example suitable for tests.
|
|
This allows splitfx users to test CUE breakpoints and run
file-specific effects without interrupting their normal flow.
|
|
Process.spawn allows vfork() + execve() usage in Ruby 2.2.0 to
improve performance over normal fork() + execve().
|
|
This allows the same sound to be reused in tests.
|
|
This will not be needed after all.
|
|
This is more generically supported via variables.
|
|
Just skip the test for now since systems without opusenc and opusdec
are becoming rarer.
|
|
RubyGems is not available on some LTS distros (Ubuntu precise with
Ruby 1.9.3-p0)
|
|
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)
|
|
I'm still normal, and still trolling, but 80x24.org will be epic :)
|
|
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.
|
|
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.
|
|
This allows parsing and will eventually interact with trimfx.
|
|
Only lightly tested, but this should give us some idea of where
we'll be going...
|
|
This will be dependent upon sox for the trim effect,
at least. Other bits will be exposed as needed.
|
|
This will allow editing individual portions of audio of
a larger file while creating cross fade effects to join
them.
|
|
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.
|
|
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.
|
|
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.
|
|
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).
|
|
These are common output targets, at least for my workflow.
|
|
Sinks should always continue running until EOF. Otherwise, the sink
exiting prematurely could cause the player to stop prematurely. So
just let it wait for EOF by running cat(1).
|
|
This should make implementing SetPosition in the MPRIS 2.0 spec
possible.
|
|
This is a more accurate depiction of what happens,
and we'll implement "next" and "previous" commands in the future.
|
|
We need to preserve the go_to-specified position for next_track,
doing otherwise would cause us to always be off-by-one.
|
|
This should allow us to eventually implement a MPRIS 2.0-compliant
tracklist.
|
|
Thread-safety is hard with signals flying in from process reaping.
|
|
Having it return nil in a noop function seems wrong.
We can't silently discard the value (unlike pipe_size=)
|
|
const_defined?(:Test) behaves differently when $DEBUG is true.
I'm not sure if this is a bug or not.
|
|
This seems to be working out nicely. Having a basic integration
test should be enough to get us started for now.
|
|
This will allow users to more-easily edit configs and feel
like a real shell. We no longer mistakenly expand nil env
variables to "" anymore, either.
|
|
This is lacking tests and documentation, but it works from
a old trivial sample I had from a recording I previously
split using plain POSIX shell
splitfx is like make(1) for splitting and minor audio
editing. It also allows any number of effects.
|
|
Oops.
|
|
at_exit ordering is funky because minitest/autorun also runs
at_exit, so we need to delay registering the at_exit until we
call tmpfifo.
|
|
This is to avoid annoying deprecation warnings in minitest 5, while
still preserving compatibility with minitest 4 (which is distributed
in Ruby 2.0.0 and part of the standard library).
|
|
Process.waitall prevents test cases from using multiple threads
(we're already using multiple processes). We may use
parallelize_me! from minitest in the future.
|
|
assert() in test/unit does not automatically stringify the failure
message, unlike minitest. I don't have a strong opinion regarding
minitest and test/unit, but the deprecation notices in minitest 5
are annoying, so perhaps using Test::Unit via minitest shim is a
better way to go.
|
|
Oops.
|