-
Notifications
You must be signed in to change notification settings - Fork 1
Famuz
Disclaimer: Famuz is still in its design phase so this text may seem random.
Famuz is a programming language that compiles to midi. It aims to do so by factoring out scale and key till later stages in the creative process. Famuz also aims to use rhythm as a first class citizen. Meaning that a user should be able to change rhythm, scale, and key on the fly to create widely varied compositions from the same building blocks.
The basic types for Famuz are -
-
Number: An Integer
-
Rhythm: Syntax is x~~- x--- x-x- --x-
-
Spaces are optional. The 'x' character is when the note should hit. The '~' character is used to express length. The '-' character is used as a spacer or rest. Rhythms must start out with a hit to be valid. The Rhythm can then be shifted right or left with shift operators '<<' or '>>'.
-
Melody: A melody cannot be explicitly written in the language. Instead to create a melody a user would use add a Rhythm to some Steps. There are also functions that can create melodies. In Famuz a melody is just a sequence of notes.
-
Harmony: A melody cannot be explicitly written in the language. Instead harmonies are stacked Melodies. The operator to stack melody is still being defined.
-
Steps: Syntax is ^1 2 3 4
-
Steps are a sequence of numbers that can for melodies and harmonies.
-
Scale: Syntax is harmonic-minor
-
Common scales and modes will be defined. A user can also define their own. Syntax for user defined scales is tbd.
-
Key: Syntax is C
-
ScaledKey: A ScaledKey cannot be explicitly written in the language. Instead ScaledKeys are created by applying a Scale to a Key like major + C.
-
Music: Music cannot be explicitly written in the language. Music is built from operations on other primitive types.