Giter Club home page Giter Club logo

chord-composer's Introduction

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.

Features

  • Describe compositions with patterns in YAML.
  • Export composition patterns to MIDI clips.
  • Playback composition patterns with a piano in the command line.
  • Command line interface.
  • Cross-platform.
  • Languages:
    • English
    • Português
    • 简体中文

Future Work

  • Build a terminal user interface.
  • Develop better audio engine and instrument sampler.
  • Support MIDI routing.
  • Explore the need to support common trackers.
  • Support more languages (including pirate).

Latest Binaries

  • Linux: TODO
  • Mac: TODO
  • Window: TODO

Command line arguments

./chord_composer --help

A music composition tool for structuring chord progressions and patterns.

USAGE:
    chord_composer.exe [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    chords      Print the list of supported chords and their intervals.
    export      Export composition patterns to .MID.
    help        Prints this message or the help of the given subcommand(s)
    play        Playback patterns in a composition.
    template    Export a composition arrangement YAML template

./chord_composer play --help

Playback patterns in a composition.

USAGE:
    chord_composer.exe play [FLAGS] <COMPOSITION_FILE>

FLAGS:
    -h, --help         Prints help information
        --metronome    Play a metronome during playback.
        --ticker-bar         Prints the current time on each bar change.
        --ticker-beat        Prints the current time on each beat change.
        --ticker-interval    Prints the current time on each beat interval change.
    -V, --version      Prints version information

ARGS:
    <COMPOSITION_FILE>    The YAML composition arrangement file.

Build steps

  1. Install Rust.
  2. Clone this repo with Git. e.g
    git clone https://github.com/unsignedbytebite/chord-composer.git 
  3. Run cargo test in the repo's directory to ensure it's working. e.g
    cargo test
  4. Open ./examples/ and run/look at the example scripts to see how to use Chord Composer e.g
    cd ./examples/
    ./play_composition.sh

Build Features

  • eng - Build with English strings.
  • pt - Build with Portugeuse strings.
  • zhn - Build with Chinese(Simplified) strings.
  • no-audio - Build without the support of audio playback.

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.

chord-composer's People

Contributors

unsignedbytebite avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.