Date | Commit message (Collapse) |
|
This prevents us from resetting the tracklist when we
add new tracks and want to restart playback.
|
|
We must define the variable for tracking buffer length.
This only affected non-Linux kernel users.
|
|
The addition of a "need_to_queue" method should reduce the amount of
cognitive overhead required to parse these conditions
|
|
Some users may not use nor care about $OUTFMT at all, so
just start them out with a default one based on the original
to get started.
|
|
* dtas-*edit
- account for editors which rename over files
* dtas-player
- support optional bypass mode for rate, bits, channel
This allows users to avoid any internal resampling at the
cost of losing gapless playback when files have different
decoded formats
- "tl goto" starts playback if idle (and not paused)
- support seeking based on embedded cuesheet (FLAC)
- rename "tl previous" to "tl prev"
See dtas-player_protocol(7) for the protocol extensions
* dtas-console
- allow exit via 'q' key
|
|
Oops.
|
|
It is easier to break out of dtas-console with one key than using a
2-finger combination.
|
|
RubyGems requires executables to be registered with it explicitly,
placing them in bin/ is not enough...
|
|
This gives us consistency with the "cue prev" command,
is easier-to-type, and is consistent in length with "tl next".
We'll just map "previous" -> "tl prev" when we implement the
MPRIS bridge.
|
|
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.
|