Date | Commit message (Collapse) |
|
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.
|
|
There is now a mailing list hosted by Savannah: dtas-all@nongnu.org
No subscription is necessary to post (please Cc: all on replies).
This release should be compatible with Ruby 1.9.3 built with Syck,
as this seems to be the case with Debian wheezy systems. Hopefully
dtas is easier for Debian GNU/Linux users not familiar with Ruby.
Probing via avprobe/ffprobe for audio in large containers (e.g.
VOBs) should have a higher probability of success, but seeking with
large containers is still broken. My suggestion is to use
avconv/ffmpeg to extract the raw audio (without transcoding) from
VOBs/DVDs and just play that.
dtas-sourceedit learned to load YAML from stdin (same format
as "dtas-ctl source cat $SOURCENAME").
player protocol changes:
- "state dump [FILENAME]" allows dumping the current state (in case
an unexpected shutdown happens and at_exit does not run)
- "env" (no args) returns the environment
note: I'm still considering revamping the protocol completely
Eric Wong (23):
dtas-console: support terminal resize
README: add explicit copyright for this file
remove "encoding: binary" header use
rg: avoid adding gain if fallback_gain + preamp is near zero
av_ff_common: fix undefined var in astream fallback
disclaimer: disambiguate between dtas/$PROGNAME
GNUmakefile: combine with pkg.mk
Rakefile: additional pointer to git-set-file-times
Rakefile: wrap long line
dtas-sourcedit: allow loading YAML from stdin
test_source_av: fix test to actually run
source/{av,ff}: probe harder for audio in weird containers
doc: reorganize sections around dtas-player
doc: sink_examples: reference dtas-xdelay and friends
doc: add contact info to all documentation
INSTALL: update installation instructions
player: add "state dump" command to serialize state
doc/dtas-xdelay: reference sox/play env, update email address
dtas-xdelay: pass -q flag to play(1) by default
player/client_handler: cleanup to avoid redundant code
player: explicitly stop+wait for sink death at_exit
player/client_handler: support for dumping individual env
test/test_player_client_handler: rename shadowed method
|