about summary refs log tree commit homepage
DateCommit message (Collapse)
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.
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.
2013-10-08player: "tl add" may trigger player start
The player should start playing the new track if the current tracklist is exhausted and not paused.
2013-10-06pipe: use memoized IO#nonblock? in blocking case
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).
2013-10-06buffer: remove ioctl syscall in common paths
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.
2013-10-06player: delay tracklist reset until asked to play
This prevents us from resetting the tracklist when we add new tracks and want to restart playback.
2013-10-06buffer/read_write: fix undefined local variable
We must define the variable for tracking buffer length. This only affected non-Linux kernel users.
2013-10-05player: add factor out redundant condition check
The addition of a "need_to_queue" method should reduce the amount of cognitive overhead required to parse these conditions
2013-10-02splitfx: default to default DTAS::Format if unspecified
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.
2013-09-30dtas 0.5.0 v0.5.0
* 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
2013-09-30player/client_handler: remove unused variables
2013-09-30dtas-console: allow exit via 'q' key
It is easier to break out of dtas-console with one key than using a 2-finger combination.
2013-09-30dtas.gemspec: mark executables correctly
RubyGems requires executables to be registered with it explicitly, placing them in bin/ is not enough...
2013-09-30player (protocol): rename "tl previous" to "tl prev"
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.
2013-09-30player: support seeking based on embedded cuesheet (FLAC)
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.
2013-09-30player: "tl goto" starts playback if idle (and not paused)
Using "tl goto" implies we start playback of the player is idle.
2013-09-28rework packaging to use GNU make + gemspec instead of Hoe
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.
2013-09-28player: support bypass for rate, bits, channel
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.
2013-09-23dtas-*edit: account for editors which rename over files
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.
2013-09-22INSTALL: update URL for 0.4.0 tarballs
Oops :x
2013-09-22Rakefile: add examples to website, too
This makes it easier to reference in mailing list posts and docs.
2013-09-22dtas 0.4.0 - dtas-splitfx, tracklist in -player v0.4.0
There is a new dtas-splitfx command intended for splitting up single-track recordings into multiple tracks and applying effects/comments to each of them. It was made for splitting recordings of vinyl records and live concert recordings. dtas-splitfx is independent of dtas-player (but shares some code/conventions). The dtas-player also gains tracklist support (based on the MPRIS 2.0 spec). This is another step toward having an MPRIS 2.0-compliant interface. There is a "dtas-tl" command helper for using/testing tracklist functionality. This helper may be folded into a higher-level client soon, so it is not recommended as a a stable interface. There are also some minor bugfixes in dtas-player. Eric Wong (51): source/sox: correctly extend xs for try_to_fail_harder test/*.rb: test/unit compatibility test/player_integration: thread-safety fix test/*: compatibility class for both minitest 4 and 5 test/helper: delay at_exit registration for tmpfifo dtas-console: show paused track when paused test/helper: fix var shadowing add dtas-splitfx - .cuesheets + make(1) splitfx: round instead of truncate for CDDA GNUmakefile: enable warnings by default for tests implement environment variable expansion splitfx: flesh out functionality + integration test test/helper: rescue on NameError instead of checking defined? sink: remove unnecessary writable_iter pipe: remove pipe_size call for non-Linux platforms test_splitfx: remove parallelize_me! splitfx: minor bugfixes, use strings for commands/targets tracklist: preliminary tracklist class player: implement basic tracklist functionality player/client_handler: "tl add" returns track_id of added track dtas-tl: add add-tail command tracklist: fix go_to functionality player: do not repeat first track on start if using playlist dtas-tl: expand paths before using them player/client_handler: prevent seek from excessive requeue dtas-console: avoid using current if it is nil player: reset tracklist when idle stat is detected tracklist: next_track -> advance_track player: implement previous/next commands player: "tl goto" takes optional offset arg in HHMMSS.SUBSEC tracklist: previous! only wraps around when repeat is enabled tracklist: implement single-track repeat player: s/echo/wall/ for broadcasting to all watchers player/client_handler: return count for list-style responses dtas-tl: add a handy "clear" command Rakefile: add fix_perms dep when building gem doc: nodoc new classes player: do not reset tracklist if paused test_player_integration: avoid premature sink death dtas-tl: add-{tail,head} -> add{tail,head} document dtas-tl(1) and the "tl" commands in the protocol splitfx: add opus and flac-cdda outputs player (tl add): do not repeat first track when idle splitfx: add "skip" directive splitfx: preserve original rate/channels/bits for generic targets player: stop sinks whenever we're out-of-tracks to play dtas-tl: add "reto" command splitfx: rename "opus" target to "opusenc" doc: add manpage for dtas-splitfx splitfx: nodoc the Skip class README: update for dtas-splitfx and tracklist in -player
2013-09-22README: update for dtas-splitfx and tracklist in -player
Readying up for a new release.
2013-09-22splitfx: nodoc the Skip class
This is an internal class, and we don't have a public Ruby API anyways.