class Sunder::Apart
Public Class Methods
new(config_file, input_source)
click to toggle source
# File lib/sunder/apart.rb, line 10 def initialize(config_file, input_source) @input_file = input_source @metadata = load_yaml_file(config_file) @album_title = return_formatted_title('My Album', 'year', 'album_artist', 'title') format = get_field("format") @output_format = format.empty? ? "mp3" : get_field("format").empty? make_album_directory parse_track_info end
Public Instance Methods
get_field(name)
click to toggle source
# File lib/sunder/apart.rb, line 24 def get_field(name) @metadata[name.to_s] || "" end
load_yaml_file(filename)
click to toggle source
# File lib/sunder/apart.rb, line 28 def load_yaml_file(filename) File.open(filename) { |f| YAML::load(f) } rescue 'Cannot parse configuration file.' end
make_album_directory()
click to toggle source
# File lib/sunder/apart.rb, line 34 def make_album_directory puts "Making directory #{@album_title}" FileUtils.mkdir_p(@album_title) end
make_track(skip_time,track_length,track_end,track_name)
click to toggle source
# File lib/sunder/apart.rb, line 39 def make_track(skip_time,track_length,track_end,track_name) puts "Making track #{track_name} of length #{track_length} seconds." ffmpeg_command = "ffmpeg -loglevel 8 " \ "-i #{@input_file} " \ "-ss #{skip_time} -to #{track_end} " \ "\"#{@album_title}/#{track_name}.#{@output_format}\"" system(ffmpeg_command) end
parse_track_info()
click to toggle source
# File lib/sunder/apart.rb, line 50 def parse_track_info tracks = get_field("tracks") track_num = 1 skip_time = 0.0 return "Nothing to do" if tracks.empty? tracks.each do |k,v| track_end = timestamp_to_seconds(k) track_length = track_end - skip_time track_name = "#{"%02d" % track_num}. #{v}" make_track(skip_time, track_length, track_end, track_name) track_num += 1 skip_time += track_length end puts "Total Album Length: #{skip_time}" end
return_formatted_title(default, *fields)
click to toggle source
# File lib/sunder/apart.rb, line 70 def return_formatted_title(default, *fields) title = fields.map { |f| get_field(f).to_s } title = title.reject { |f| f.empty? }.join(' - ') title.empty? ? default : title end
timestamp_to_seconds(timestamp)
click to toggle source
# File lib/sunder/apart.rb, line 78 def timestamp_to_seconds(timestamp) parsed_timestamp = timestamp.to_s.split(':') parsed_timestamp.reverse.map.with_index { |n,i| n.to_f * (60**i) }.sum end