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