class Beats::BeatsRunner
Constants
- 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.
Public Class Methods
new(input_file_name, output_file_name, options)
click to toggle source
# File lib/beats/beats_runner.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
Public Instance Methods
run()
click to toggle source
# File lib/beats/beats_runner.rb, line 19 def run base_path = @options[:base_path] || File.dirname(@input_file_name) song, kit = SongParser.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_to_generate| optimized_song = song_optimizer.optimize(song_to_generate, OPTIMIZED_PATTERN_LENGTH) AudioEngine.new(optimized_song, kit).write_to_file(output_file_name) end {duration: durations.last} end
Private Instance Methods
normalize_for_pattern_option(song)
click to toggle source
If the -p option is used, transform the song into one whose flow consists of playing that single pattern once.
# File lib/beats/beats_runner.rb, line 39 def normalize_for_pattern_option(song) unless @options[:pattern].nil? pattern_name = @options[:pattern].downcase.to_sym unless song.patterns.has_key?(pattern_name) raise StandardError, "The song does not include a pattern called #{pattern_name}" end song.flow = [pattern_name] song.remove_unused_patterns end song end
normalize_for_split_option(song)
click to toggle source
Returns a hash of file name => song object for each song that should go through the audio engine
# File lib/beats/beats_runner.rb, line 55 def normalize_for_split_option(song) songs_to_generate = {} if @options[:split] split_songs = song.split split_songs.each do |track_name, split_song| extension = File.extname(@output_file_name) file_name = File.dirname(@output_file_name) + "/" + File.basename(@output_file_name, extension) + "-" + File.basename(track_name, extension) + extension songs_to_generate[file_name] = split_song end else songs_to_generate[@output_file_name] = song end songs_to_generate end