about summary refs log tree commit homepage
DateCommit message (Collapse)
2013-10-10tracklist: update position when track is added
We don't want to repeat tracks if a track was added to a spot before the current position on the tracklist.
2013-10-09dtas-partstats: initial implementation
dtas-partstats divides large audio files into small partitions (10 seconds by default) and runs the "stats" effect of sox(1) against each partition. Currently it emits space-delimited output, but configurable output options (including Sequel/SQLite) support is coming. The intended use of this tool is for quickly finding the loudest portions of a given recording without the need for a graphical viewer. This can be useful for selectively applying (and testing the results of) dynamic range compression filters. Use with sort(1) in a pipeline is recommended in this scenario (but again, Sequel support is coming).
2013-10-09player: "tl remove" drops the track from the queue
A paused/seeked track in the tracklist may end up in the queue.
2013-10-09tracklist: remove_track updates tracklist position
We should not have the position point too far past the end of the list. This allows playback to start when we do "tl add" on an idle player after removing something from the tracklist.
2013-10-08player: "tl add" may trigger player start
The player should start playing the new track if the current tracklist is exhausted and not paused.
2013-10-06pipe: use memoized IO#nonblock? in blocking case
We never change the I/O directly, so avoid the expensive syscall and only use a slightly-expensive Ruby method call instead (the Ruby method call is fixed cost in either case).
2013-10-06buffer: remove ioctl syscall in common paths
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.
2013-10-06player: delay tracklist reset until asked to play
This prevents us from resetting the tracklist when we add new tracks and want to restart playback.
2013-10-06buffer/read_write: fix undefined local variable
We must define the variable for tracking buffer length. This only affected non-Linux kernel users.
2013-10-05player: add factor out redundant condition check
The addition of a "need_to_queue" method should reduce the amount of cognitive overhead required to parse these conditions
2013-10-02splitfx: default to default DTAS::Format if unspecified
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.
2013-09-30dtas 0.5.0 v0.5.0
* 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
2013-09-30player/client_handler: remove unused variables
Oops.
2013-09-30dtas-console: allow exit via 'q' key
It is easier to break out of dtas-console with one key than using a 2-finger combination.
2013-09-30dtas.gemspec: mark executables correctly
RubyGems requires executables to be registered with it explicitly, placing them in bin/ is not enough...
2013-09-30player (protocol): rename "tl previous" to "tl prev"
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.
2013-09-30player: support seeking based on embedded cuesheet (FLAC)
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.
2013-09-30player: "tl goto" starts playback if idle (and not paused)
Using "tl goto" implies we start playback of the player is idle.
2013-09-28rework packaging to use GNU make + gemspec instead of Hoe
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.
2013-09-28player: support bypass for rate, bits, channel
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.
2013-09-23dtas-*edit: account for editors which rename over files
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.
2013-09-22INSTALL: update URL for 0.4.0 tarballs
Oops :x
2013-09-22Rakefile: add examples to website, too
This makes it easier to reference in mailing list posts and docs.
2013-09-22dtas 0.4.0 - dtas-splitfx, tracklist in -player v0.4.0
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
2013-09-22README: update for dtas-splitfx and tracklist in -player
Readying up for a new release.
2013-09-22splitfx: nodoc the Skip class
This is an internal class, and we don't have a public Ruby API anyways.
2013-09-22doc: add manpage for dtas-splitfx
We should document it so we remember how to use it.
2013-09-22splitfx: rename "opus" target to "opusenc"
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).
2013-09-22dtas-tl: add "reto" command
This behaves like "goto", but takes a regular expression instead of a track_id
2013-09-19player: stop sinks whenever we're out-of-tracks to play
We should not leave sinks running when nothing is playing, since that blocks the sound device from being used by others.
2013-09-11splitfx: preserve original rate/channels/bits for generic targets
We do not explicitly resample/dither/downmix without users permission.
2013-09-11splitfx: add "skip" directive
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.
2013-09-11player (tl add): do not repeat first track when idle
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.
2013-09-10splitfx: add opus and flac-cdda outputs
These are common output targets, at least for my workflow.
2013-09-10document dtas-tl(1) and the "tl" commands in the protocol
Everything should be documented, even if it's a work-in-progress. I reserve the right to change them...
2013-09-10dtas-tl: add-{tail,head} -> add{tail,head}
Shorten these commands since they're frequently used and to make eventual tab completion easier.
2013-09-10test_player_integration: avoid premature sink death
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).
2013-09-10player: do not reset tracklist if paused
We should only reset the tracklist if the user has completely iterated through the list of tracks to be played.
2013-09-09doc: nodoc new classes
We have no public Ruby API, only socket protocols and data formats.
2013-09-09Rakefile: add fix_perms dep when building gem
I have restrictive permissions sometimes, do not propagate them to the gem/tarballs.
2013-09-09dtas-tl: add a handy "clear" command
This is implemented in client space, as the MPRIS 2.0 spec does not say this needs to be implemented at all...
2013-09-09player/client_handler: return count for list-style responses
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.
2013-09-09player: s/echo/wall/ for broadcasting to all watchers
"wall" is analogous to the wall(1) command, so we shall use that instead of echo.
2013-09-09tracklist: implement single-track repeat
Because sometimes a song is just stuck in our head. Or MPRIS 2.0 wants us to implement it this way...
2013-09-09tracklist: previous! only wraps around when repeat is enabled
Non-repeating tracklists should stop playing when there's nothing to go back to.
2013-09-09player: "tl goto" takes optional offset arg in HHMMSS.SUBSEC
This should make implementing SetPosition in the MPRIS 2.0 spec possible.
2013-09-09player: implement previous/next commands
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.
2013-09-09tracklist: next_track -> advance_track
This is a more accurate depiction of what happens, and we'll implement "next" and "previous" commands in the future.
2013-09-09player: reset tracklist when idle stat is detected
We should return to the starting position of the tracklist if we are idle.
2013-09-09dtas-console: avoid using current if it is nil
We may get a pause event when we do not have a valid current hash.