Class: StepSequencer::SoundBuilder::DefaultEffects::Slice

Inherits:
Object
  • Object
show all
Defined in:
lib/step_sequencer/sound_builder/default_effects/slice.rb

Class Method Summary collapse

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_pathObject



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

Raises:

  • (StandardError)


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

Raises:

  • (StandardError)


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

Raises:

  • (StandardError)


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