Class: StepSequencer::SoundBuilder::DefaultEffects::Slice
- Inherits:
-
Object
- Object
- StepSequencer::SoundBuilder::DefaultEffects::Slice
- Defined in:
- lib/step_sequencer/sound_builder/default_effects/slice.rb
Class Method Summary collapse
- .build(sources:, start_pct: nil, end_pct: nil, start_time: nil, end_time: nil) ⇒ Object
- .build_outfile_path ⇒ Object
- .calc_end_time(sourse, len, end_pct) ⇒ Object
- .calc_start_time(source, len, start_pct) ⇒ Object
- .get_audio_length(source) ⇒ Object
Class Method Details
.build(sources:, start_pct: nil, end_pct: nil, start_time: nil, end_time: nil) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/step_sequencer/sound_builder/default_effects/slice.rb', line 5 def self.build(sources:, start_pct: nil, end_pct: nil, start_time: nil, end_time: nil) sources.map do |source| len = get_audio_length(source) start_time ||= calc_start_time(source, len, start_pct) end_time ||= calc_end_time(source, len, end_pct) diff = (end_time - start_time).round(6) outfile = build_outfile_path `sox #{source} #{outfile} trim #{start_time} #{diff} 2> /dev/null` outfile end end |
.build_outfile_path ⇒ Object
19 20 21 |
# File 'lib/step_sequencer/sound_builder/default_effects/slice.rb', line 19 def build_outfile_path "#{output_dir}/#{SecureRandom.urlsafe_base64}.mp3" end |
.calc_end_time(sourse, len, end_pct) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/step_sequencer/sound_builder/default_effects/slice.rb', line 37 def calc_end_time(sourse, len, end_pct) raise( StandardError, "one of end_pct or end_time needs to be passed to Slice" ) unless end_pct end_pct_decimal = end_pct.to_f / 100.0 len * end_pct_decimal end |
.calc_start_time(source, len, start_pct) ⇒ Object
29 30 31 32 33 34 35 36 |
# File 'lib/step_sequencer/sound_builder/default_effects/slice.rb', line 29 def calc_start_time(source, len, start_pct) raise( StandardError, "one of start_pct or start_time needs to be passed to Slice" ) unless start_pct start_pct_decimal = start_pct.to_f / 100.0 len * start_pct_decimal end |
.get_audio_length(source) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/step_sequencer/sound_builder/default_effects/slice.rb', line 22 def get_audio_length(source) raise( StandardError, "#{source} doesn't exist (can't slice)" ) unless File.exists?(source) `soxi -D #{source}`.to_f end |