about summary refs log tree commit homepage
path: root/lib
DateCommit message (Collapse)
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-30player/client_handler: remove unused variables
Oops.
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-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-22splitfx: nodoc the Skip class
This is an internal class, and we don't have a public Ruby API anyways.
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-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-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-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-09player/client_handler: prevent seek from excessive requeue
Otherwise we end up constantly pushing tracks to the top of the queue and getting surprising behavior if seek is called repeatedly.
2013-09-09player: do not repeat first track on start if using playlist
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.
2013-09-09tracklist: fix go_to functionality
We need to preserve the go_to-specified position for next_track, doing otherwise would cause us to always be off-by-one.
2013-09-09player/client_handler: "tl add" returns track_id of added track
This allows easier scripting if we want to add a bunch of tracks
2013-09-09player: implement basic tracklist functionality
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.
2013-09-09tracklist: preliminary tracklist class
This should allow us to eventually implement a MPRIS 2.0-compliant tracklist.
2013-09-09splitfx: minor bugfixes, use strings for commands/targets
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.
2013-09-08pipe: remove pipe_size call for non-Linux platforms
Having it return nil in a noop function seems wrong. We can't silently discard the value (unlike pipe_size=)
2013-09-08sink: remove unnecessary writable_iter
We do not need it anymore since we only write to the targets returned by Sink#spawn.
2013-09-07splitfx: flesh out functionality + integration test
This seems to be working out nicely. Having a basic integration test should be enough to get us started for now.
2013-09-07implement environment variable expansion
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.
2013-09-07splitfx: round instead of truncate for CDDA
Rounding should be more accurate, even though my original awk snippet truncated the output.
2013-09-07add dtas-splitfx - .cuesheets + make(1)
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.
2013-09-06source/sox: correctly extend xs for try_to_fail_harder
Singleton methods tend to be bad like this. TODO: write tests for this.
2013-09-01player/client_handler: support for dumping individual env
This allows users to display the current env value for introspection
2013-09-01player: explicitly stop+wait for sink death at_exit
This allows me to hit Ctrl-C on a dtas-player(1) process, wait on termination of the player, and immediately restart it without worrying about sink conflicts upon restart. Before this change, sinks would continue running for a bit (depending on buffer sizes).
2013-09-01player/client_handler: cleanup to avoid redundant code
stop_sinks is already defined, so avoid repeating this loop
2013-09-01player: add "state dump" command to serialize state
This helps in case dtas-player is hit with SIGKILL or the system crashes. This does not fsync(2) as that could introduce delays on slow filesystems. Users should open the file manually and fsync themselves if they need to.
2013-09-01source/{av,ff}: probe harder for audio in weird containers
Some containers (e.g. large VOBs) are not easily probed and require additional options for avprobe/ffprobe to find audio streams. We do this by looping and increasing the duration/size of the probe to find new audio streams. This seems to work reasonably well for some DVD rips I have until seeking is required. This breaks if the seek point (including seeks for source effects) exceeds the avprobe/ffprobe -analyzeduration. Anyways, I recommend extracting the audio stream (without transcoding) out of the VOB container as the best way to go. Something like: avconv -analyzeduration 2G -probesize 2G \ -i input.vob -vn -sn -c:a copy -map 0:$STREAM_NR output.ext
2013-08-31disclaimer: disambiguate between dtas/$PROGNAME
The whole dtas project is committed to giving as much rope as users need!
2013-08-30av_ff_common: fix undefined var in astream fallback
This is reproducible on a video file with a mono audio stream when attempting playback in stereo.
2013-08-29rg: avoid adding gain if fallback_gain + preamp is near zero
No need to add the vol effect if it's going to be a noop.