Date | Commit message (Collapse) |
|
We are Ruby 1.9+ only, so shorten our code just a little
and hopefully make things easier-to-read.
|
|
This non-Linux code path probably broke when we minimized our
use of IO#nread.
|
|
splitfx is incapable of knowing in 100% of cases whether dithering
should be used (as it has no visibility into sox internals), so
support disabling it completely via command-line.
This is like the identical sox option, and passed to sox(1), too.
This feature is useful for splitting already-mastered 16-bit
recordings.
|
|
This allows parsing and will eventually interact with trimfx.
|
|
Only lightly tested, but this should give us some idea of where
we'll be going...
|
|
This will be dependent upon sox for the trim effect,
at least. Other bits will be exposed as needed.
|
|
This will allow editing individual portions of audio of
a larger file while creating cross fade effects to join
them.
|
|
This is to be compatible with Rubinius, but also works with MRI.
|
|
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).
|
|
This simplifies the check for the current track and
won't attempt to compare track IDs not on the tracklist.
|
|
Otherwise we end up going past the end of the list.
|
|
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.
|
|
We don't want to repeat tracks if a track was added to a spot
before the current position on the tracklist.
|
|
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).
|
|
A paused/seeked track in the tracklist may end up in the queue.
|
|
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.
|
|
The player should start playing the new track if the current tracklist
is exhausted and not paused.
|
|
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).
|
|
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.
|
|
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.
|
|
Oops.
|
|
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.
|
|
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.
|
|
This is an internal class, and we don't have a public Ruby API
anyways.
|
|
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).
|
|
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.
|
|
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.
|
|
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.
|
|
Otherwise we end up constantly pushing tracks to the top of the
queue and getting surprising behavior if seek is called repeatedly.
|
|
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 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.
|