class AudioDicer::Runner

Attributes

ctx[R]

Public Class Methods

bin_available?(name) click to toggle source
# File lib/audio_dicer/runner.rb, line 9
def self.bin_available?(name)
end
new(ctx) click to toggle source
# File lib/audio_dicer/runner.rb, line 5
def initialize(ctx)
  @ctx = ctx
end

Public Instance Methods

expand_relative_file(*args) click to toggle source

kind of lame but w/e

# File lib/audio_dicer/runner.rb, line 13
def expand_relative_file(*args)
  AudioDicer.expand_relative_file(*args)
end
run() click to toggle source
# File lib/audio_dicer/runner.rb, line 17
def run
  src_opts = ctx.source_options

  # First convert the video to a wav
  puts '[*] Extracting audio'
  system "mplayer -really-quiet -vc null -vo null -nocorrect-pts -ao pcm:waveheader #{expand_relative_file src_opts[:source]}"

  abort '[!] mplayer failed' unless File.exist?(expand_relative_file('audiodump.wav'))

  # Now convert that to one big mp3
  puts '[*] Convert WAV to MP3'
  system "lame -h -b #{src_opts[:bitrate] || 192} audiodump.wav audiodump.mp3"

  abort '[!] lame failed' unless File.exist?(expand_relative_file('audiodump.mp3'))

  # Now split that mp3 using out data
  ctx.albums.each do |album|
    opts = album.options

    puts "[*] Spliting #{album.tracks.size} tracks"

    # TODO allow stop to be optional (even splits)
    # TODO allow last track to use EOF
    album.tracks.each.with_index do |track, index|
      start, stop = track[:time].map { |t| t.sub ':', '.' }
      tags = "@a=#{opts[:artist].inspect},@b=#{opts[:name].inspect},@t=#{track[:title].inspect}"

      system "mp3splt -Qf -g [#{tags}] -o '#{index+1} @a - @t' audiodump.mp3 #{start} #{stop}"
    end
  end

  # Now cleanup
  puts '[*] Complete!'

rescue SystemExit => e
  # Always clean up potental trash
  File.unlink(*%w[wav mp3].map { |ext| "audiodump.#{ext}" }) rescue nil

  raise e # raise to exit
end