Class: Beats::BeatsRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/beats/beatsrunner.rb

Constant Summary collapse

OPTIMIZED_PATTERN_LENGTH =

Each pattern in the song will be split up into sub patterns that have at most this many steps. In general, audio for several shorter patterns can be generated more quickly than for one long pattern, and can also be cached more effectively.

4

Instance Method Summary collapse

Constructor Details

#initialize(input_file_name, output_file_name, options) ⇒ BeatsRunner

Returns a new instance of BeatsRunner.



8
9
10
11
12
13
14
15
16
17
# File 'lib/beats/beatsrunner.rb', line 8

def initialize(input_file_name, output_file_name, options)
  @input_file_name =  input_file_name

  if output_file_name.nil?
    output_file_name = File.basename(input_file_name, File.extname(input_file_name)) + ".wav"
  end
  @output_file_name = output_file_name

  @options = options
end

Instance Method Details

#runObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/beats/beatsrunner.rb', line 19

def run
  base_path = @options[:base_path] || File.dirname(@input_file_name)
  song, kit = SongParser.new().parse(base_path, File.read(@input_file_name))

  song = normalize_for_pattern_option(song)
  songs_to_generate = normalize_for_split_option(song)

  song_optimizer = SongOptimizer.new()
  durations = songs_to_generate.collect do |output_file_name, song|
    song = song_optimizer.optimize(song, OPTIMIZED_PATTERN_LENGTH)
    AudioEngine.new(song, kit).write_to_file(output_file_name)
  end

  {:duration => durations.last}
end