chord-composer

Crates.iochord-composer
lib.rschord-composer
version0.3.1
sourcesrc
created_at2019-12-15 23:47:16.013309
updated_at2020-03-23 19:02:00.333436
descriptionA music composition tool for structuring chord progressions and patterns.
homepage
repositoryhttps://github.com/unsignedbytebite/chord-composer
max_upload_size
id189635
size109,040
cj (unsignedbytebite)

documentation

README

chord-composer

A music composition tool for structuring chord progressions and patterns, written in Rust.

The philosophy behind Chord Composer is to make a lightweight, portable, and accessible tool to structure chord patterns and progressions for music composition ideas. It must fit into common digital music writing workflows and not hinder the creative process of the user.

A CLI for this library found here.

Features

  • Describe compositions with patterns in YAML or via the API.
  • Export composition patterns to MIDI clips.
  • Playback composition patterns with audio samples.

Future Work

  • Develop better audio engine and instrument sampler.
  • Support MIDI routing.
  • Explore the need to support common music trackers.

Composition Parameters YAML file

The schema for the composition parameters YAML file are outlined below in this template.

# Name of the composition
name: default_composition

# The default master parameters of the composition. 
# New master pattern can be assigned to a pattern that overrides
# the default master values.
master:
    # The musical key to transpose the chords. 
    # Supported values: C, C#, D, D#, E, F, F#, G, G#, A, A#, B
    key: F# 

    # The beats per minute of the composition.
    time: 120

    # The time signature of the composition.
    # Beat numerator supported values: must be > 0.
    # Beat denominator supported values: 2, 4, 8, 16, 32, 64 
    # e.g 3/8 is supported, 0/7 is not supported.
    signature: [4, 4]

# Composition defined chords.
chords:
    # [chord_name, [chord intervals]].
    - [custom1, [0, 3, 8]]
    - [custom2, [0, 5]]

# The composition's chord patterns/progressions.
patterns:
    - name: part_a
      # Each pattern event = [bar, beat, beat interval, chord name, chord transpose].
      pattern:
          - [1, 1, 1, MAJOR_SEVENTH, 0]
          - [1, 3, 1, custom1, 0]
          - [2, 1, 1, MAJOR_NINTH, 0]
          - [2, 3, 1, custom1, 0]
          - [3, 1, 1, MAJOR_SEVENTH, 3]
          - [3, 2, 1, custom1, 0]
          - [4, 1, 1, MAJOR_NINTH, -3]
          - [4, 2, 1, ?, 0] # ? = Select a random user defined chord.

    - name: part_b
      master:
          signature: [4, 8]
          key: C#
          time: 69
      # Each pattern event = [bar, beat, beat interval, chord name, chord transpose].
      pattern:
          - [1, 1, 1, MAJOR_SEVENTH, 0]
          - [1, 2, 1, custom1, 0]
          - [2, 1, 1, MAJOR_NINTH, 0]
          - [2, 2, 1, custom1, 0]
          - [3, 1, 1, MAJOR_SEVENTH, 3]
          - [3, 2, 1, custom1, 0]
          - [4, 1, 1, MAJOR_NINTH, -3]
          - [4, 2, 1, ??, 0] #?? = Select a random chord from user defined and internal defined chord.
Commit count: 59

cargo fmt