about summary refs log tree commit homepage
path: root/lib/dtas
DateCommit message (Collapse)
2013-10-13trimfx: initial bits
This will allow editing individual portions of audio of a larger file while creating cross fade effects to join them.
2013-10-13use shorter socket constants for sockets
This is to be compatible with Rubinius, but also works with MRI.
2013-10-12IO#nread compatibility for Rubinius (Linux-only)
We don't deal with user-space buffers, so we should be fine using this compatibility layer and only checking the kernel buffers (until rbx implements a proper solution).
2013-10-10player: "tl remove" properly stops current track
This simplifies the check for the current track and won't attempt to compare track IDs not on the tracklist.
2013-10-10tracklist: fix off-by-one when adding track
Otherwise we end up going past the end of the list.
2013-10-10format: common detection code (based on sox)
This reduces duplication for sox-based components, which our audio editing components will rely on. We only use avconv/ffmpeg for odd formats which sox does not play natively, and editing audio in strange/lossy formats is undesirable anyways.
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-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.