Sha256: b120a2aae92d20b11fc9aeb3fe96d30b88022802a261bfc1d2107e10953058e1

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

#!/usr/bin/env ruby

exe_name = File.basename(__FILE__)

doc = <<DOCOPT
Loads a music-transcription score from YAML file, and converts to MIDI file.

Usage:
  #{exe_name} <input>
  #{exe_name} <input> <output>
  #{exe_name} -h | --help
  #{exe_name} --version

Options:
  -h --help     Show this screen.
  --version     Show version.

DOCOPT

require 'docopt'
begin
  require "pp"
  args = Docopt::docopt(doc)
  pp args
rescue Docopt::Exit => e
  puts e.message
  exit
end

require 'yaml'
require 'music-transcription'
require 'music-performance'
include Music

fin_name = args["<input>"]
File.open(fin_name) do |fin|
  print "Reading file '#{fin_name}'..."
  score = YAML.load(fin.read)
  if score.is_a? Hash
    score = Transcription::Score.unpack(score)
  end
  puts "complete"
  
  if score.valid?
    print "Making MIDI sequence..."
    seq = Performance::ScoreSequencer.new(score).make_midi_seq
    puts "complete"  
  
    fout_name = args["<output>"]
    if fout_name.nil?
      fout_name = "#{File.dirname(fin_name)}/#{File.basename(fin_name,File.extname(fin_name))}.mid"
    end
    print "Writing file '#{fout_name}'..."
    File.open(fout_name, 'wb'){ |fout| seq.write(fout) }
    puts "complete"    
  else
    puts "Failed to load a valid score."
    puts "Errors:"
    puts score.errors.join("\n")
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
music-performance-0.3.0 bin/midify
music-performance-0.2.1 bin/midify