Beispiel #1
0
   def __init__(self, modules, input_format, output_format, pre_callback=None, post_callback=None):
      assert isinstance(input_format, Format)
      assert isinstance(output_format, Format)

      config.add_option("-o", "--output", action="store", help="Output file")
      config.add_option("", "--gzip", action="store_true", help="Save output as gzip compressed file")
      config.add_option("", "--bzip2", action="store_true", help="Save output as bzip2 compressed file")

      options = self.get_options(input_format, output_format)

      converter = ConverterGraph(modules)
      steps = converter.get_steps(input_format.converter, output_format.converter)

      for filename in self.input_files:
         if self.output_file:
            output = self.output_file
         else:
            output = splitext(filename)[0] + "." + output_format.ext
         print "Converting '%s' to '%s'..." % (split(filename)[1], split(output)[1])
         sys.stdout.flush()
         if pre_callback:
            pre_callback(options, filename, output)
         converter.run_steps(
            steps, filename, filename=output, progress_callback=progress_callback)
         if post_callback:
            post_callback(options, filename, output)
         print
Beispiel #2
0
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

from pyScore.config import config
from pyScore.elementtree.ElementTree import Element, SubElement, tostring
from pyScore.MIDI.conversion_constants import *
from pyScore.MIDI.midi_codes import *
from pyScore.util.range_checking import *


from math import log
try:
   import textwrap
except ImportError:
   from pyScore.util.backport import textwrap

config.add_option("", "--divisions", action="store", default=DIVISIONS, type="int")
config.add_option("", "--ticks-per-beat", type="int", default=TICKS_PER_BEAT,
                  help="[midi] The number of MIDI ticks per quarter note when outputting MidiXML")
config.add_option("", "--midi-format", type="int", default=1,
                  help="[midi] The Midi file type (must be either 0 or 1)")

def make_event(subevent, time_spine, ticks_per_quarter_note):
   event = Element("Event")
   SubElement(event, "Absolute").text = str(int(time_spine))
   event.time_spine = time_spine
   event.append(subevent)
   return event

class MusicXMLToMidiXML:
   def __init__(self, ticks_per_beat=TICKS_PER_BEAT):
      self._ticks_per_beat = config.get("ticks_per_beat")
Beispiel #3
0
   def __init__(self, modules, test_dir, tests, groundtruth=False, callback=None):
      config.add_option("", "--doc", action="store", help="Output directory")
      config.usage = "\nusage: \%prog [options] [test_directory]"
      (options, args) = config.parse_args()

      if len(args):
         if isdir(args[0]):
            test_dir = args[0]
      if not isdir(test_dir):
         print "Test directory '%s' can not be found." % test_dir
         sys.exit(1)

      make_documentation = False
      if options.doc != None:
         make_documentation = True
         doc_dir = options.doc
         if not isdir(doc_dir):
            print "Documentation directory '%s' does not exist." % doc_dir
         self.doc_fd = open(join(doc_dir, "tests.txt"), "w")
         self.doc_header()

      converter = ConverterGraph(modules)
      groundtruth_failures = []
      groundtruth_not_available = []
      errors = []
      for dir, input_format, output_format, title, description in tests:
         root_dir, input_dir, output_dir, gt_dir = self.get_test_directories(test_dir, dir, groundtruth)
         assert isinstance(input_format, Format)
         assert isinstance(output_format, Format)
         steps = converter.get_steps(input_format.converter, output_format.converter)

         if make_documentation:
            self.doc_section(title, description)
         files = glob(join(input_dir, "*." + input_format.ext))
         files.sort()
         for filename in files:
            root_filename = splitext(split(filename)[1])[0]
            documentation_header = root_filename
            out_file = join(output_dir, root_filename + "." + output_format.ext)
            print "Converting '%s' to '%s'..." % (split(filename)[1], split(out_file)[1])
            sys.stdout.flush()
            try:
               converter.run_steps(steps, filename, filename=out_file, progress_callback=progress_callback)
            except Exception, e:
               errors.append("Exception from '%s':\n\n" % filename)
               errors.extend(traceback.format_exception(*sys.exc_info()))
               errors.append("\n")
               documentation_header += " (E)"
            else:
               if callback:
                  callback(filename, out_file)
               if groundtruth:
                  gt_file = join(gt_dir, root_filename + "." + output_format.ext)
                  if isfile(gt_file):
                     if not self.compare_files(out_file, gt_file):
                        groundtruth_failures.append(out_file)
                        documentation_header += " (G)"
                  else:
                     groundtruth_not_available.append(out_file)
                     documentation_header += " (U)"
            if make_documentation:
               self.doc_result(documentation_header, filename, out_file)
            print
Beispiel #4
0
from pyScore.config import config
from pyScore import ElementTree
from pyScore.Guido.objects import core
from pyScore.Guido.objects.basic import all as basic
from pyScore.Guido.objects.advanced import all as advanced
from pyScore.util.file_wrapper import *
from pyScore.__version__ import *

from guido_to_musicxml import GuidoToMusicXML
from musicxml_to_guido import MusicXMLToGuido
from validate import validate

from types import *

config.add_option("", "--xml-encoding", action="store", default="us-ascii", help="[xml] The encoding to save XML files.")
config.add_option("", "--dtd", action="store_true", help="[xml] validate against a DTD.")

def Guido_tree_to_MusicXML_tree(score):
   assert isinstance(score, core.Score)
   converter = GuidoToMusicXML()
   return converter.convert(score)

def MusicXML_tree_to_MusicXML_file(tree, filename=None):
   assert ElementTree.iselement(tree)
   output_encoding = config.get("xml_encoding")
   writer = FileWriter(filename, output_encoding)
   writer.write("<?xml version='1.0' encoding='%s'?>\n" % output_encoding)
   writer.write("<!-- %s -->\n" % created)
   writer.write('<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 1.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">\n')
Beispiel #5
0
from pyScore.Guido.objects.basic.staff import staff as staff_tag
from pyScore.Guido.objects.basic.instrument import instrument as instrument_tag
from pyScore.MusicXML.conversion_constants import *
from pyScore.util.rational import Rat
from pyScore.util.config import *

import sys

Element = ElementTree.Element
SubElement = ElementTree.SubElement

# NOTE: MusicXML doesn't seem to have a way to support Guido \\headsReverse
# NOTE: Guido \\noteFormat tag is completely unsupported
# NOTE: Guido \\splitChord tag is completely unsupported

config.add_option("", "--divisions", action="store", default=144, type="int")


class ExtendedSequence(core.INLINE_COLLECTION):
    """This class stores a few more bits of information about Guido sequences
that help with the re-ordering into MusicXML order."""
    def __init__(self, collection, number):
        self.collection = collection
        for item in self.collection:
            item.parent = self
        self.number = number
        self.staves = {}
        self.cross_staff = False
        self.voice = None

Beispiel #6
0
from pyScore.Guido.objects import core
from pyScore.Guido.objects.basic import all as basic
from pyScore.Guido.objects.advanced import all as advanced
from pyScore.Guido.parser.guido_parser import GuidoParser
from pyScore.Guido.noteserver import save_gif
from pyScore.util.file_wrapper import *
from pyScore.__version__ import *

from cStringIO import StringIO
import os
from os.path import exists, isfile
from types import StringType, UnicodeType

# NOTE: Guido is output with latin_1 encoding, because that seems to work with NoteServer

config.add_option("", "--guido-encoding", action="store", default="latin_1", help="[guido] The encoding for Guido files")

def Guido_file_to_Guido_string(input):
   input = FileReader(input, config.get("guido_encoding"))
   return input.read()

def Guido_string_to_Guido_tree(s):
   assert type(s) in (StringType, UnicodeType)
   parser = GuidoParser((core, basic, advanced))
   score = parser.parse(s)
   return score

def Guido_tree_to_Guido_string(score):
   assert isinstance(score, core.Score)
   stream = FileWriter(StringIO(), config.get("guido_encoding"))
   stream.write("% " + created + "\n")