diff options
author | Eric Wong <e@80x24.org> | 2022-01-24 03:52:34 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2022-01-24 03:54:07 +0000 |
commit | 9183c38754d76fcd778965350046738557d13722 (patch) | |
tree | 52ce63b53f2640248755c6f55c1cba53a891d566 | |
parent | df420d23dc7c53b808aa80210898265814671c7b (diff) | |
download | dtas-9183c38754d76fcd778965350046738557d13722.tar.gz |
This can allow filtering for tracks with a given comment declared via the ".#{COMMENT}" mechanism or the track title. If no prefix is given (before the '='), then all comment values are matched.
-rwxr-xr-x | bin/dtas-splitfx | 1 | ||||
-rw-r--r-- | lib/dtas/splitfx.rb | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/bin/dtas-splitfx b/bin/dtas-splitfx index 6ce6521..d0afc7b 100755 --- a/bin/dtas-splitfx +++ b/bin/dtas-splitfx @@ -13,6 +13,7 @@ OptionParser.new('', 24, ' ') do |op| op.on('-n', '--dry-run') { opts[:dryrun] = true } op.on('-j', '--jobs [JOBS]', Integer) { |val| opts[:jobs] = val } # nil==inf op.on('-s', '--quiet', '--silent') { opts[:silent] = true } + op.on('-f', '--filter FILTER') { |val| (opts[:filter] ||= []) << val } op.on('-D', '--no-dither') { opts[:no_dither] = true } op.on('-O', '--outdir OUTDIR') { |val| opts[:outdir] = val } op.on('-C', '--compression FACTOR') { |val| opts[:compression] = val } diff --git a/lib/dtas/splitfx.rb b/lib/dtas/splitfx.rb index 1ce2007..696b9ce 100644 --- a/lib/dtas/splitfx.rb +++ b/lib/dtas/splitfx.rb @@ -360,6 +360,14 @@ class DTAS::SplitFX # :nodoc: fails = [] tracks = @tracks.dup + (opts[:filter] || []).each do |re| + field, val = re.split(/=/, 2) + if val + tracks.delete_if { |t| (t.comments[field] || '') !~ /#{val}/ } + else + tracks.delete_if { |t| t.comments.values.grep(/#{re}/).empty? } + end + end pids = {} jobs = opts[:jobs] || tracks.size # jobs == nil => everything at once if opts[:sox_pipe] |