Class: DTAS::TrimFX
Defined Under Namespace
Classes: TFXSort
Instance Attribute Summary collapse
-
#cmd ⇒ Object
readonly
Returns the value of attribute cmd.
-
#tbeg ⇒ Object
readonly
Returns the value of attribute tbeg.
-
#tlen ⇒ Object
readonly
Returns the value of attribute tlen.
Class Method Summary collapse
- .expand(ary, total_len) ⇒ Object
-
.schedule(ary) ⇒ Object
there’ll be multiple epochs if ranges overlap.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
-
#initialize(args) ⇒ TrimFX
constructor
A new instance of TrimFX.
- #parse_trim!(args) ⇒ Object
- #tfx_eca(args) ⇒ Object
- #tfx_sox(args) ⇒ Object
- #to_sox_arg(format) ⇒ Object
Methods included from ParseTime
Constructor Details
#initialize(args) ⇒ TrimFX
Returns a new instance of TrimFX.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/dtas/trimfx.rb', line 14 def initialize(args) args = args.dup case args.shift when "trim" parse_trim!(args) when "all" @tbeg = 0 @tlen = nil else raise ArgumentError, "#{args.inspect} not understood" end case tmp = args.shift when "sh" then @cmd = args when "sox" then tfx_sox(args) when "eca" then tfx_eca(args) when nil @cmd = [] else raise ArgumentError, "unknown effect type: #{tmp}" end end |
Instance Attribute Details
#cmd ⇒ Object (readonly)
Returns the value of attribute cmd.
12 13 14 |
# File 'lib/dtas/trimfx.rb', line 12 def cmd @cmd end |
#tbeg ⇒ Object (readonly)
Returns the value of attribute tbeg.
10 11 12 |
# File 'lib/dtas/trimfx.rb', line 10 def tbeg @tbeg end |
#tlen ⇒ Object (readonly)
Returns the value of attribute tlen.
11 12 13 |
# File 'lib/dtas/trimfx.rb', line 11 def tlen @tlen end |
Class Method Details
.expand(ary, total_len) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/dtas/trimfx.rb', line 119 def self.(ary, total_len) rv = [] schedule(ary).each_with_index do |sary, i| tip = 0 dst = rv[i] = [] while tfx = sary.shift if tfx.tbeg > tip nfx = new(%W(trim #{tip} =#{tfx.tbeg})) dst << nfx dst << tfx tip = tfx.tbeg + tfx.tlen end end if tip < total_len nfx = new(%W(trim #{tip} =#{total_len})) dst << nfx end end rv end |
.schedule(ary) ⇒ Object
there’ll be multiple epochs if ranges overlap
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/dtas/trimfx.rb', line 91 def self.schedule(ary) sorted = [] ary.each_with_index { |tfx, i| sorted << TFXSort[tfx, i] } sorted.sort! rv = [] epoch = 0 prev_end = 0 defer = [] begin while tfxsort = sorted.shift tfx = tfxsort.tfx if tfx.tbeg >= prev_end prev_end = tfx.tbeg + tfx.tlen (rv[epoch] ||= []) << tfx else defer << tfxsort end end if defer[0] epoch += 1 sorted = defer defer = [] prev_end = 0 end end while sorted[0] rv end |
Instance Method Details
#<=>(other) ⇒ Object
78 79 80 |
# File 'lib/dtas/trimfx.rb', line 78 def <=>(other) tbeg <=> other.tbeg end |
#parse_trim!(args) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/dtas/trimfx.rb', line 62 def parse_trim!(args) tbeg = parse_time(args.shift) if args[0] =~ /\A=?[\d\.]+\z/ tlen = args.shift is_stop_time = tlen.sub!(/\A=/, "") ? true : false tlen = parse_time(tlen) if is_stop_time tlen = tlen - tbeg end else tlen = nil end @tbeg = tbeg @tlen = tlen end |
#tfx_eca(args) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/dtas/trimfx.rb', line 41 def tfx_eca(args) @cmd = %w(sox $SOXIN $SOX2ECA $TRIMFX) @cmd.concat(%w(| ecasound $ECAFMT -i stdin -o stdout)) @cmd.concat(args) @cmd.concat(%w(| sox $ECA2SOX - $SOXOUT)) end |
#tfx_sox(args) ⇒ Object
36 37 38 39 |
# File 'lib/dtas/trimfx.rb', line 36 def tfx_sox(args) @cmd = %w(sox $SOXIN $SOXOUT $TRIMFX) @cmd.concat(args) end |
#to_sox_arg(format) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/dtas/trimfx.rb', line 48 def to_sox_arg(format) if @tbeg && @tlen beg = @tbeg * format.rate len = @tlen * format.rate %W(trim #{beg.round}s #{len.round}s) elsif @tbeg return [] if @tbeg == 0 beg = @tbeg * format.rate %W(trim #{beg.round}s) else [] end end |