Module: Musa::MusicXML

Included in:
All
Defined in:
lib/musa-dsl/musicxml/builder/helper.rb,
lib/musa-dsl/musicxml/builder/note.rb,
lib/musa-dsl/musicxml/builder/part.rb,
lib/musa-dsl/musicxml/builder/rest.rb,
lib/musa-dsl/musicxml/builder/measure.rb,
lib/musa-dsl/musicxml/builder/direction.rb,
lib/musa-dsl/musicxml/builder/attributes.rb,
lib/musa-dsl/musicxml/builder/part-group.rb,
lib/musa-dsl/musicxml/builder/typed-text.rb,
lib/musa-dsl/musicxml/builder/pitched-note.rb,
lib/musa-dsl/musicxml/builder/backup-forward.rb,
lib/musa-dsl/musicxml/builder/score-partwise.rb,
lib/musa-dsl/musicxml/builder/unpitched-note.rb,
lib/musa-dsl/musicxml/builder/note-complexities.rb

Overview

MusicXML generation system.

This module provides a comprehensive DSL for generating MusicXML 3.0 files programmatically. It uses a builder pattern with a flexible API that supports both constructor-based and DSL-style notation creation.

Architecture

The MusicXML builder system is organized hierarchically:

ScorePartwise (root)
  

DSL Features

The builder provides two equivalent ways to create scores:

  1. Constructor + add methods: Imperative style
  2. DSL blocks: Declarative style with with blocks

Both styles leverage AttributeBuilder and With mixins from core-ext.

Use Cases

  • Algorithmic composition with MusicXML export
  • Score generation from Musa DSL performances
  • Converting MIDI recordings to notation
  • Creating notation examples programmatically

Examples:

Simple score with DSL style

score = Musa::MusicXML::Builder::ScorePartwise.new do
  work_title "My Composition"
  creators composer: "Composer Name"

  part :p1, name: "Piano" do
    measure do
      attributes do
        divisions 2
        key fifths: 0  # C major
        time beats: 4, beat_type: 4
        clef sign: 'G', line: 2
      end

      pitch 'C', octave: 4, duration: 2, type: 'quarter'
      pitch 'D', octave: 4, duration: 2, type: 'quarter'
      pitch 'E', octave: 4, duration: 2, type: 'quarter'
      pitch 'F', octave: 4, duration: 2, type: 'quarter'
    end
  end
end

File.write('output.xml', score.to_xml.string)

Constructor + add methods style

score = Musa::MusicXML::Builder::ScorePartwise.new
score.work_title = "My Composition"
score.add_creator "composer", "Composer Name"

part = score.add_part :p1, name: "Piano"
measure = part.add_measure divisions: 2
measure.attributes.last.add_key fifths: 0
measure.attributes.last.add_time beats: 4, beat_type: 4
measure.attributes.last.add_clef sign: 'G', line: 2

measure.add_pitch step: 'C', octave: 4, duration: 2, type: 'quarter'

File.write('output.xml', score.to_xml.string)

See Also:

Defined Under Namespace

Modules: Builder