Date | Commit message (Collapse) |
|
This is an internal class, and we don't have a public Ruby API
anyways.
|
|
We should document it so we remember how to use it.
|
|
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).
|
|
This behaves like "goto", but takes a regular expression
instead of a track_id
|
|
We should not leave sinks running when nothing is playing,
since that blocks the sound device from being used by others.
|
|
We do not explicitly resample/dither/downmix without users
permission.
|
|
This allows skipping periods of silence/noise in between music tracks.
This should be useful if the recorder is left running during
intermission or during equipment swaps.
|
|
When a player is idle and a track is added to an empty tracklist,
we should not repeat the first track added to the tracklist. Avoid
that by advancing the tracklist to the current track.
|
|
These are common output targets, at least for my workflow.
|
|
Everything should be documented, even if it's a work-in-progress.
I reserve the right to change them...
|
|
Shorten these commands since they're frequently used and
to make eventual tab completion easier.
|
|
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).
|
|
We should only reset the tracklist if the user has completely
iterated through the list of tracks to be played.
|
|
We have no public Ruby API, only socket protocols and data formats.
|
|
I have restrictive permissions sometimes, do not propagate them
to the gem/tarballs.
|
|
This is implemented in client space, as the MPRIS 2.0
spec does not say this needs to be implemented at all...
|
|
This is necessary to handle the case where the tracklist is empty,
clients get confused and timeout the response if we attempt to emit
an empty string.
|
|
"wall" is analogous to the wall(1) command, so we shall use that
instead of echo.
|
|
Because sometimes a song is just stuck in our head.
Or MPRIS 2.0 wants us to implement it this way...
|
|
Non-repeating tracklists should stop playing when there's nothing
to go back to.
|
|
This should make implementing SetPosition in the MPRIS 2.0 spec
possible.
|
|
This means we can go back and forth in the tracklist like a normal
music player. This will allow an easier MPRIS 2.0 implementation.
|
|
This is a more accurate depiction of what happens,
and we'll implement "next" and "previous" commands in the future.
|
|
We should return to the starting position of the tracklist if we
are idle.
|
|
We may get a pause event when we do not have a valid current
hash.
|
|
Otherwise we end up constantly pushing tracks to the top of the
queue and getting surprising behavior if seek is called repeatedly.
|
|
It's easier to handle the client and player to be in different
directories (and we also do this for dtas-enq(1))
|
|
We already flush the currently playing track into the head of the
queue upon player exit (even if it was in the @tl), so we should use
@tl.next_track as usual instead of @tl.cur_track in case the queue
is empty.
|
|
We need to preserve the go_to-specified position for next_track,
doing otherwise would cause us to always be off-by-one.
|
|
This adds a bunch of tracks sequentially to the end of the tracklist
|
|
This allows easier scripting if we want to add a bunch of tracks
|
|
This should allow us to repeat through a list of tracks with relative
ease. There is a rudimentary dtas-tl client implemented. This
may be removed in the future.
|
|
This should allow us to eventually implement a MPRIS 2.0-compliant
tracklist.
|
|
Minor bugfixes, this allows users to setup targets easily
without introducing them to the ":" Rubyism for symbols.
Also, use "track_start" instead of "track_first" to match
the existing published examples for numbering the first
track.
While we're at it, detect the decoded sample precision
correctly for dither use.
|
|
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=)
|
|
We do not need it anymore since we only write to the targets
returned by Sink#spawn.
|
|
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 a new code base and we should avoid introducing warnings.
|
|
Rounding should be more accurate, even though my original awk
snippet truncated the output.
|
|
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.
|
|
Lightly tested, but this seems to work.
|
|
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.
|
|
Singleton methods tend to be bad like this.
TODO: write tests for this.
|