about summary refs log tree commit homepage
DateCommit message (Collapse)
2014-12-22doc: flesh out "tl" subcommand docs
The following subcommands are now documented: * current * current-id * next * prev
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-22dtas-tl: halve write() syscalls when emitting tracklists
Notably, this speeds up "dtas-tl cat" output a little bit. Hrm, Ruby really should be using writev here, we'll need to investigate at a later date.
2014-12-21dtas-console: '>' and '<' keys for tracklist next/prev
These key bindings are used in mplayer, too.
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-21dtas 0.8.0 - player bugfixes v0.8.0
Several bugfixes for the dtas-player and playback-related components. Audio-editing support is still being worked on. See git repository for full details: git clone git://80x24.org/dtas Terminal-browser-friendly HTML mail archives are also up at: http://80x24.org/dtas-all/ The mailing list for anything related to dtas remains at: dtas-all@nongnu.org The list is open to all without subscription (no HTML email). dtas is for and by users who never want to deal with GUIs. shortlog of changes since 0.7.0: dtas-console: add note to install "curses" gem if missing test/helper: compat w/ coverage in Feature #9508 player: style cleanup to favor &:methods update copyrights and email address for 2014 trimfx: initial cut of scheduling + gap filling test/helper: ancient minitest compatibility test_splitfx: fix tests without opus{enc,dec} remove builtin-$FADEFX support fadefx: remove module tests: hoist out pluck generation xs: favor &: block style for simple cases rely on filesystem encoding client_handler: minor cleanup (favor &:proc) doc: document "tl get"/"dtas-tl cat" escaping gotcha dtas-console: force encoding for current locale unix_server: fix for infinite loop sink: favor &:proc form instead of blocks favor &:proc form instead of blocks in more places unix_accepted: wait for readability on EAGAIN
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-09-22dtas-console: force encoding for current locale
This is the one place we display the filename for users, so it should hopefully make it displayable. Users who care about proper display should use a locale which matches their music collection (or rename their music collection to match).
2014-08-26doc: document "tl get"/"dtas-tl cat" escaping gotcha
We shell-escape filenames, so they may not show up properly when shuttled across the wire.
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-06tests: hoist out pluck generation
This allows the same sound to be reused in tests.
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-30test_splitfx: fix tests without opus{enc,dec}
Just skip the test for now since systems without opusenc and opusdec are becoming rarer.
2014-06-30test/helper: ancient minitest compatibility
RubyGems is not available on some LTS distros (Ubuntu precise with Ruby 1.9.3-p0)
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.
2014-03-13test/helper: compat w/ coverage in Feature #9508
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.
2014-02-24dtas-console: add note to install "curses" gem if missing
Ruby 2.2.0dev does not bundle the "curses" gem anymore. Note: not a hard RubyGem dependency since dtas-console is optional.
2013-12-30dtas 0.7.0 - minor feature and teeny optimizations v0.7.0
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.
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-19INSTALL: update for 0.6.0 release
Oops, perhaps I should just stick $VERSION in the text...
2013-10-19dtas 0.6.0 - player tracklist fixes/improvements v0.6.0
* 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
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-10dtas-tl: "reto" command does not scan track IDs
Using a regexp to match trackIDs is probably not intended by the user.
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.