Date | Commit message (Collapse) |
|
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.
|
|
Using "tl goto" implies we start playback of the player is idle.
|
|
Currently, this allows us to use different manpage paths for the
tarball and gem; as gem-man and setup.rb expect different paths
for manpages.
Additionally, Hoe is designed for Ruby projects. dtas may include
Perl/shell/Python/whatever in the future. So use GNU make as it
is more suited for language agnosticism.
|
|
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.
|
|
We must not assume the temporary file remains in place while
$EDITOR/$VISUAL is running, as it is common for editors to rename
over a file to atomically replace existing files.
|
|
Oops :x
|
|
This makes it easier to reference in mailing list posts and docs.
|
|
There is a new dtas-splitfx command intended for splitting up
single-track recordings into multiple tracks and applying
effects/comments to each of them. It was made for splitting recordings
of vinyl records and live concert recordings. dtas-splitfx is
independent of dtas-player (but shares some code/conventions).
The dtas-player also gains tracklist support (based on the MPRIS 2.0
spec). This is another step toward having an MPRIS 2.0-compliant
interface. There is a "dtas-tl" command helper for using/testing
tracklist functionality. This helper may be folded into a higher-level
client soon, so it is not recommended as a a stable interface.
There are also some minor bugfixes in dtas-player.
Eric Wong (51):
source/sox: correctly extend xs for try_to_fail_harder
test/*.rb: test/unit compatibility
test/player_integration: thread-safety fix
test/*: compatibility class for both minitest 4 and 5
test/helper: delay at_exit registration for tmpfifo
dtas-console: show paused track when paused
test/helper: fix var shadowing
add dtas-splitfx - .cuesheets + make(1)
splitfx: round instead of truncate for CDDA
GNUmakefile: enable warnings by default for tests
implement environment variable expansion
splitfx: flesh out functionality + integration test
test/helper: rescue on NameError instead of checking defined?
sink: remove unnecessary writable_iter
pipe: remove pipe_size call for non-Linux platforms
test_splitfx: remove parallelize_me!
splitfx: minor bugfixes, use strings for commands/targets
tracklist: preliminary tracklist class
player: implement basic tracklist functionality
player/client_handler: "tl add" returns track_id of added track
dtas-tl: add add-tail command
tracklist: fix go_to functionality
player: do not repeat first track on start if using playlist
dtas-tl: expand paths before using them
player/client_handler: prevent seek from excessive requeue
dtas-console: avoid using current if it is nil
player: reset tracklist when idle stat is detected
tracklist: next_track -> advance_track
player: implement previous/next commands
player: "tl goto" takes optional offset arg in HHMMSS.SUBSEC
tracklist: previous! only wraps around when repeat is enabled
tracklist: implement single-track repeat
player: s/echo/wall/ for broadcasting to all watchers
player/client_handler: return count for list-style responses
dtas-tl: add a handy "clear" command
Rakefile: add fix_perms dep when building gem
doc: nodoc new classes
player: do not reset tracklist if paused
test_player_integration: avoid premature sink death
dtas-tl: add-{tail,head} -> add{tail,head}
document dtas-tl(1) and the "tl" commands in the protocol
splitfx: add opus and flac-cdda outputs
player (tl add): do not repeat first track when idle
splitfx: add "skip" directive
splitfx: preserve original rate/channels/bits for generic targets
player: stop sinks whenever we're out-of-tracks to play
dtas-tl: add "reto" command
splitfx: rename "opus" target to "opusenc"
doc: add manpage for dtas-splitfx
splitfx: nodoc the Skip class
README: update for dtas-splitfx and tracklist in -player
|
|
Readying up for a new release.
|
|
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.
|