Date | Commit message (Collapse) |
|
This is more generically supported via variables.
|
|
Just skip the test for now since systems without opusenc and opusdec
are becoming rarer.
|
|
RubyGems is not available on some LTS distros (Ubuntu precise with
Ruby 1.9.3-p0)
|
|
The names are subject to change, but the idea is to
make multiple passes over the audio if effects overlap
and combine everything afterwards. Unedited portions
will be passed through sox (via trim and no other effects)
|
|
I'm still normal, and still trolling, but 80x24.org will be epic :)
|
|
This makes the code less verbose and avoids captures.
|
|
There's a feature request for better coverage support in ruby-trunk
https://bugs.ruby-lang.org/issues/9508
At minimum, we need to preserve compatibility; but we should set
aside time to take advantage of the extra coverage support.
|
|
Ruby 2.2.0dev does not bundle the "curses" gem anymore.
Note: not a hard RubyGem dependency since dtas-console is optional.
|
|
dtas-splitfx gained support --no-dither/-D option.
dtas-player should work now for non-Linux users without splice().
There are minor optimizations for users of multiple sinks with
dtas-player.
|
|
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.
|
|
Favor &:method block calls to avoid captures.
Delay the check for inflight bytes while we're at it,
since we may never need the result of FIONREAD.
|
|
We do not need a begin block here, callers will deal with it.
|
|
This is slightly easier-to-read and avoids capturing local
variables.
|
|
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.
|
|
Oops, perhaps I should just stick $VERSION in the text...
|
|
* dtas-player - many fixes to tracklist handling
Also minor syscall reduction and a fix for non-Linux-splice users.
* the "dtas-tl reto" subcommand also works somewhat sanely, now.
There's also a bunch of work-in-progress code that's definitely not
ready for prime time and will change a lot. I'm just making this
release because the work-in-progress stuff is completely orthogonal
to the mostly-working stuff, and dtas has users other than myself
now(!)
dtas is going in several different directions related to audio, not just
playback. My immediate focus will probably be on audio editing and
hopefully 0.7.0 will have more of that[1]. Of course, critical fixes to
components people actually use will take priority (but I think
dtas-player is solid, by now.
* dtas-partstats - initial partitioning wrapper to the sox stats effect
See commit 4f1a73ed584f0f74d6b32241f02ae871f3415f4a for details.
This works, but could use some documentation...
There's also some stuff which is completely not wired up outside
of internal unit tests, but will hopefully be ready in 0.7.0
Eric Wong (21):
splitfx: default to default DTAS::Format if unspecified
player: add factor out redundant condition check
buffer/read_write: fix undefined local variable
player: delay tracklist reset until asked to play
buffer: remove ioctl syscall in common paths
pipe: use memoized IO#nonblock? in blocking case
player: "tl add" may trigger player start
tracklist: remove_track updates tracklist position
player: "tl remove" drops the track from the queue
dtas-partstats: initial implementation
tracklist: update position when track is added
format: common detection code (based on sox)
tracklist: fix off-by-one when adding track
player: "tl remove" properly stops current track
dtas-tl: "reto" command does not scan track IDs
IO#nread compatibility for Rubinius (Linux-only)
use shorter socket constants for sockets
|
|
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).
|
|
Using a regexp to match trackIDs is probably not intended
by the user.
|
|
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.
|
|
* 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
|
|
Oops.
|
|
It is easier to break out of dtas-console with one key than using a
2-finger combination.
|
|
RubyGems requires executables to be registered with it explicitly,
placing them in bin/ is not enough...
|
|
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.
|
|
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.
|
|
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 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.
|