about summary refs log tree commit homepage
path: root/lib
DateCommit message (Collapse)
2015-01-03splitfx: add INDIR and INBASE environment variables
These are intended to act like `$(@D)' and `$(@F)' in GNU make(1) and to ease managing temporary files for some effects (e.g. noiseprof + noisered in sox) for splitfx users.
2014-12-29source/splitfx: fail gracefully on missing files
We cannot afford to break the entire player because somebody enqueued a non-existent file (or enqueued and later renamed it).
2014-12-29trimfx: require audio format at initialization
This makes things easier for scheduling/expansion since we won't have to deal with floating point numbers when we work directly with with sample counts (like the rest of dtas).
2014-12-29trimfx: comments and cleanups
It's been a while, and I've lost my train of thought regarding this system a bit :<
2014-12-28splitfx: use $FX env consistently in targets, too
While we're at it, document the splitfx manpage and make the example suitable for tests.
2014-12-28sigevent/efd: minor simplifications
This reduces memory overhead by a few bytes by eliminating constant lookups and unnecessary inclusions.
2014-12-28source/splitfx: default tracklist for single-track files
While the splitfx source is intended for applying effects to untracked audio files (e.g. transfers of vinyl records or live concert recordings), it should be useful for applying effects to an already-tracked recording.
2014-12-28source/splitfx: standardize on $FX for sox effects
This should allow users to setup effects in a more standardized fashion and avoid needing to specify a "command:" field in their splitfx YAML files in the general case.
2014-12-28source/splitfx: restart source on YAML modifications
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.
2014-12-27player: support "source restart" command
This becomes useful for systems without inotify when we're editing YAML (or whatever) files frequently and want changes to be reflected right away during playback. This is a weaker version of the plain "restart" command, which restarts the entire playback chain.
2014-12-27player: support playing splitfx YAML files
This allows splitfx users to test CUE breakpoints and run file-specific effects without interrupting their normal flow.
2014-12-24restart "source ed" after env changes
Merely converting the `before' source information to a hash is not enough, as the `env' sub-hash is mosified in-place and shared with the `after' hash. So use `inspect' to serialize and snapshot the env and rely on a string comparison.
2014-12-22reduce syscalls in recvmsg invocations
Favor IO.select over IO#wait since the latter makes another ioctl syscall (which we'll make anyways for IO#nread). Having BasicSocket#recvmsg and recvmsg_nonblock detect the buffer size requires extra syscalls, so pass explict maxmesglen, flags, and maxcontrollen args to elide auto-detection since we already have the buffered amount from IO#nread. This cuts more syscalls from the "dtas-tl cat" invocation with larger tracklists.
2014-12-08tracklist: favor &:sym_to_proc style
This is terser, reads better and generates smaller bytecode.
2014-12-08compat_onenine: simplify pipe wrapper
Array#each already returns the array, so there's no need to use the more confusing Array#map! block
2014-12-08process: update comment for bug workaround #2
Followup to commit 698e1f04580839ea29647f285b39b88fcbb46071 "process: update comment for bug workaround"
2014-12-08process: update comment for bug workaround
We're certain this is a workaround for a bug. We may remove the workaround at some point in the future; but not until the rest of the world has had a chance to upgrade, too.
2014-10-21unix_accepted: wait for readability on EAGAIN
We only drop dead connections, not live ones. This is noticeable on my home machine when using the "powersave" CPU governor.
2014-10-21favor &:proc form instead of blocks in more places
This generates smaller bytecode and avoids unnecessary captures. Perhaps the Ruby optimizer can be taught to handle this automatically.
2014-10-18sink: favor &:proc form instead of blocks
This generates smaller bytecode and avoids unnecessary captures.
2014-10-18unix_server: fix for infinite loop
Occasionally, killing a sink from an external process could result in an infinite loop due to the lack of close notification from __dst_error (in DTAS::Buffer) up to the top-level event loop. Since it is not easy to notify the top-level event loop, we'll detect closed IOs after-the-fact and retry as needed in a cold rescue path. This fixes an occasional error (usually when using a non-parallel make) in the test suite: TestPlayerIntegration#test_sink_killed_during_play: Timeout::Error: execution expired $HOME/dtas/test/player_integration.rb:57:in `sleep' $HOME/dtas/test/player_integration.rb:57:in `block in wait_pid_dead' $HOME/$RUBY/lib/ruby/2.2.0/timeout.rb:91:in `block in timeout' $HOME/$RUBY/lib/ruby/2.2.0/timeout.rb:35:in `block in catch' $HOME/$RUBY/lib/ruby/2.2.0/timeout.rb:35:in `catch' $HOME/$RUBY/lib/ruby/2.2.0/timeout.rb:35:in `catch' $HOME/$RUBY/lib/ruby/2.2.0/timeout.rb:106:in `timeout' $HOME/dtas/test/player_integration.rb:54:in `wait_pid_dead' test/test_player_integration.rb:42:in `test_sink_killed_during_play'
2014-08-26client_handler: minor cleanup (favor &:proc)
This reduces captures and is more consistent with our other code.
2014-08-16rely on filesystem encoding
This avoids compatibility problems as File.expand_path respects the "filesystem" encoding of Ruby. I'm not 100% sure this is correct, as Ruby encoding support still confuses me, but this fixes a problem where I attempted to add UTF-8 filename with non-US-ASCII characters in it on ruby-trunk.
2014-08-16xs: favor &: block style for simple cases
This avoids captures
2014-07-05fadefx: remove module
This will not be needed after all.
2014-06-30remove builtin-$FADEFX support
This is more generically supported via variables.
2014-06-23trimfx: initial cut of scheduling + gap filling
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)
2014-06-06update copyrights and email address for 2014
I'm still normal, and still trolling, but 80x24.org will be epic :)
2014-05-26player: style cleanup to favor &:methods
This makes the code less verbose and avoids captures.
2013-12-27player: optimize away some more select calls
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).
2013-12-27merge some select calls for splice users
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.
2013-12-27buffer/read_write: style and minor cleanup
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.
2013-12-27unix_server: remove unnecessary begin block
We do not need a begin block here, callers will deal with it.
2013-12-27buffer/splice: favor &:method for blocks
This is slightly easier-to-read and avoids capturing local variables.
2013-12-06client_handler: style: prefer terser &:method form
We are Ruby 1.9+ only, so shorten our code just a little and hopefully make things easier-to-read.
2013-12-06buffer/read_write: broadcast_one must be non-blocking
This non-Linux code path probably broke when we minimized our use of IO#nread.
2013-12-01splitfx: support --no-dither/-D option
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.
2013-10-17fadefx: initial commit
This allows parsing and will eventually interact with trimfx.
2013-10-17trimfx: flesh out parsing of commands
Only lightly tested, but this should give us some idea of where we'll be going...
2013-10-15trimfx: flesh out to_sox_arg implementation
This will be dependent upon sox for the trim effect, at least. Other bits will be exposed as needed.
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.