Date | Commit message (Collapse) |
|
We can generate many command calls easily and dynamically, so
avoid the code and cognitive overhead for the majority of commands.
|
|
This will dump the contents of the current queue, including
positional seeking information and commands. This is mainly
intended for debugging and tools which rely on dtas internals.
|
|
This allows us to avoid wasting time reopening the same
device over and over again.
|
|
We already convert xs arg to be an Array, so avoid bloating
our code with redundancy.
|
|
Oops, introduced in the previous commit:
commit 37eae22446feb5a805d9cd59f6ad54362829189f
(player: support the "trim" parameter)
|
|
This feature is intended to allow users to "zoom-in" on a
particular portion of a track to tweak parameters (either
with dtas-sourceedit(1) or via playback of splitfx YAML files).
This may be combined with looping the tracklist
(via "tl repeat").
|
|
While the Ruby Hash class is ordered in 1.9+, the YAML
specifications do not specify hashes as ordered by default.
Thus we must explicitly declare ordering via !omap for
interopability with non-Ruby tools.
This makes the YAML output of dtas-sourcedit and dtas-sinkedit
slightly more verbose
Users of dtas-splitfx are also encouraged to declare !omap
when creating their YAML files for interoperability.
Ordering env is important because any implementation of
built-in variable expansion is dependent on it.
|
|
Hopefully this makes the code less daunting to newcomers
|
|
The documentation part is managed by the new
Documentation/update-copyright script. For the future, the rest may
be managed by the update-copyright tool in gnulib
|
|
This makes debugging, grepping, and following code confusing
at times and also unexpected breaks usage of the global "spawn"
method.
|
|
We cannot specify an audio format for bypass mode,
so inherit the last one we used and hope it works.
|
|
Since splitfx YAML files are intended to be frequently edited and
modified by the user, we'll support automatically restarting the
source when the user saves changes via their favorite $EDITOR
This change is only for Linux users. However, sleepy_penguin
supports kqueue nowadays so a patch to support such functionality
would be appreciated.
|
|
This allows splitfx users to test CUE breakpoints and run
file-specific effects without interrupting their normal flow.
|
|
I'm still normal, and still trolling, but 80x24.org will be epic :)
|
|
This makes the code less verbose and avoids captures.
|
|
This keeps us from doing an extra IO.select when we know the sink
buffer is readable (as we just registered a sink as writable).
|
|
Avoid an additional select syscall in the splice path by injecting
the target checks into the main loop. We can do this because we
always process writers before readers. This adds additional
userspace processing, but it avoids one potentially expensive (and
potentially task-switching) syscall in many cases; so it should be
worth it to avoid skipping with small buffer.
This should avoid buffer underuns with mixed-sized buffers when
using multiple sinks.
This could work for the read_write path, too, but I don't
use that enough and this change may still be buggy even
for splice users.
|
|
This prevents us from resetting the tracklist when we
add new tracks and want to restart playback.
|
|
The addition of a "need_to_queue" method should reduce the amount of
cognitive overhead required to parse these conditions
|
|
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.
|
|
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 should not leave sinks running when nothing is playing,
since that blocks the sound device from being used by others.
|
|
We should only reset the tracklist if the user has completely
iterated through the list of tracks to be played.
|
|
"wall" is analogous to the wall(1) command, so we shall use that
instead of echo.
|
|
This should make implementing SetPosition in the MPRIS 2.0 spec
possible.
|
|
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 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.
|
|
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.
|
|
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).
|
|
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.
|
|
We don't need it since IO#read(bytes, buf) will convert to
ASCII-8BIT anyways. Everywhere else, we ensure path names are
already binary. We do this mainly at the client layer before using
Shellwords to escape the paths.
We also must be careful about parsing output from soxi/avprobe
which can show us metadata in whatever encoding is in the file.
We must still handle data from parsing command output as binary,
as the encoding of file metadata tends to vary.
This also should buy us Syck compatibility for Ruby 1.9.3 users
on Debian systems where Ruby 1.9.3 still uses Syck.
|
|
All files we distribute in the tarball need to have a
copyright/license specified for Savannah.
We don't need the example state file anymore.
|
|
This should hopefully prevent us from getting wedged
if we hit an error while preparing to spawn (or during spawn).
|
|
Since ffmpeg/ffprobe are wrappers around their libav-variants,
I haven't had the chance to actually test with "real" ffmpeg,
but the usage is probably similar enough to not matter.
|
|
Sometimes we'll enqueue the wrong file and avconv won't be able to
handle it.
|
|
We should be fully-capable of managing any number of options
to try sources in.
|
|
This should better prepare us to make "source ed" into
"source <av|sox> ed" and set per-source priorities.
We also now treat @env consistently for all per-source commands
(such as soxi/avprobe) so we can be sure we're using the same
installation of sox or libav if using a non-standard PATH, or if we
want to set AV_LOG_FORCE_NOCOLOR
|
|
We do not need a respawn flag, since we already infer expected vs
unexpected sink death by checking the @targets array.
Additionally, next_source must always check @current before
calling, and not clobber the existing @current because that
would cause two source processes writing into the same pipe.
|
|
avconv is capable of outputting to the .sox format, greatly
simplifying our life as it enables us to easily apply sox
effects on a per-source file basis.
dtas-sourceedit and the "source" protocol commands will need
to change to support internal priorities (like sink).
|
|
We should've done this at the start, but we didn't.
|
|
a sink can never have respawn set and not be active
|
|
Rename COPYRIGHT -> COPYING, as that seems to be the more common
name for the GPLv3 license file. Kill all rdoc, since I don't
agree with HTML documentation and we do not expose any Ruby APIs.
|
|
We maintain most everything else, so we should maintain this, too.
|
|
Some effects may be easier to save/store with relative directory
paths, so allow changing this at runtime.
|
|
|