GithubHelp home page GithubHelp logo

ut-proj / undertheory Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 1.29 MB

Music-theoretic LFE modules: keys, scales, modes, melody-generation, etc.

License: BSD 2-Clause "Simplified" License

Makefile 0.61% Erlang 2.36% LFE 97.03%
beam chords erlang generative-music hacktoberfest lfe music music-theory notes scales

undertheory's People

Contributors

oubiwann avatar

Stargazers

 avatar  avatar

Watchers

 avatar

undertheory's Issues

Implement basic melody generation

Tasks, from page 82 of The Complete Musician, Fourth Edition:

  • Start on one member of the tonic triad (e.g, 1, 3, or 5)
  • End with the two-pitch pattern 2, 1 or 7, 1
  • Limit the total tonal range of the melody (span of pitches) to the interval of a 10th
  • Set most of the tonal activity in the range of a 6th
  • Move primarily by one step
  • Optionally, (less frequently) steps can be in thirds, fourths, or fifths
  • When doing such disjunct steps, do more thirds than the others
  • Limit larger jumps to be smaller than a perfect 5th
  • Don't make dissonant leaps
  • Don't leave tensions unresolved
  • After leaps, consider using a change in direction to fill in the tonal jump (the larger the jump, the more important this is)
  • Do not do multiple large jumps in a row
  • After doing two small jumps in a row (i.e., two jumps by thirds), change direction.
  • Avoid repeated notes and patterns
  • Aim for smooth and continuous shapes (ascending / descending patterns)

Bugs in implementation:

  • Length of melody is not always what is expected
  • The final note is not always the tonic
  • Notes are sometimes repeating, despite attempts to codify the prevention of this
  • Every once in a while, the generated melody gets an index error (when trying to lists:nth)
  • The initial scale length isn't getting extended to a 10th
  • Need to implement proper melody inversion
  • Need to end melody inversion on tonic

Add more scales

melodic minor modes:

  • Phrygidorian / Assyrian - C–D♭–E♭–F–G–A–B♭
  • Lydian augmented - C–D–E–F♯–G♯–A–B
  • Lydian dominant / Acoustic - C–D–E–F♯–G–A–B♭
  • Myxaeolian / Hindu - C–D–E–F–G–A♭–B♭
  • Aeolocrian - C–D–E♭–F–G♭–A♭–B♭
  • Super Locrian - C–D♭–E♭–F♭–G♭–A♭–B♭
  • Altered - C, D♭, D♯, E, F♯, A♭, B♭ (should be he same as above)
  • Jazz minor - alias to melodic minor ascending

Diminished/octatonic (https://en.wikipedia.org/wiki/Octatonic_scale):

  • whole step/half-step diminished scale
  • half-step/whole step diminished

Bebop scales (https://en.wikipedia.org/wiki/Bebop_scale):

  • Bebop dominant
  • Bebop Dorian
  • Bebop major
  • Bebop melodic minor
  • Bebop harmonic minor

Other (https://en.wikipedia.org/wiki/Mode_(music)#Other_types):

  • Athenian
  • Cappadocian
  • Asgardian
  • Pontikonisian
  • Olympian
  • Sisyphean
  • Palamidian
  • Hungarian minor
  • Double harmonic

Add support for grouping modes

i.e., Getting all the modes at once for a particular scale

  • diatonic
  • pentatonic
  • hexatonic
  • persian
  • melodic minors
  • Bebop
  • octatonic
  • Messiaen

Depends on:

Refactor scale module

  1. Device a data structure for use by all scales
  2. Put all scales in a data structure for easy, low-level access as well as visual-scanning / readability (easier to maintain
  3. Refactor existing functions to use new data structure

Add support for getting scales by name and mode

e.g, "Major, mode I" or "Ascending melodic minor, mode VII"

Tasks:

  • diatonic - by name
  • diatonic - by mode roman numeral
  • pentatonic
  • hexatonic
  • persian
  • melodic minors
  • Bebop
  • octatonic
  • Messiaen

Depends on:

Create include for note macros

Typing (uth.note:whole) will be a pain, so we need macros that can called simply as possible, e.g., (W) or (w).

Add the following macros:

  • (n) or (w)
  • (n/2) or (h)
  • (n/4) or (q)
  • (n/8)
  • (n/16)
  • (n/32)
  • (n/64)
  • (n/2-dot)
  • (n/4-dot)
  • (n/8-dot)
  • (n/16-dot)
  • (n/32-dot)

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.