superharmony

Utilities to create harmonic arrays

Superharmony

Superharmony is a SuperCollider library of utilities for exploring tonality. It containes classes for defining a Harmony, Tonality, TonalUniverse as a set of notes and functions between them.

Components

Harmony

You can create and manipulate harmonies as a set of notes and functions. For example: a = Harmony.new([0,4,7]) b = Harmony([0,4,7]) // C minor chord [0,3,7,12] a = Harmony.create(0,"m") ​ // A major chord [9,13,16,21] b = Harmony.create(9,"M") ​ a= Harmony([0,4,7,11]) // CM7 a.print // Fundamental: C M7 7 // Notes: [ 0, 4, 7, 11 ] // Simplified Notes[ 0, 4, 7, 11 ] // Interval types[ 1, 3, 5, 7 ]

Tonality

We can create a tonality object that will give information about harmonies in it and their tonal functions. For example:

a = Tonality.new(0,"M") b = Tonality(0,"m") ​ Tonality.degreeRoman2Number("I") // 0 Tonality.degreeRoman2Number("iii") // 2 Tonality.degreeRoman2Number("VII") // 6 ​ ​ // Get Closest chord a= Harmony([0,4,7,12]) b= Harmony.create(9,"D7") b.print ​ c=Tonality.getClosestChord(a,b) c.print // [9,13,16,19] ​ // Get notes percentages that belong to a tonality. ​ a = Tonality(0,"M") // [0,2,4,5,7,9,11] a.notesPercentage([0,2,4]) // 1.0 a.notesPercentage([1,3,6]) // 0.0 a.notesPercentage([4,6,7]) // 0.666... a.notesPercentage([0,1]) // 0.5 ​ // Get Harmony from degree a = Tonality(0,"M") // [0,2,4,5,7,9,11] h = a.getHarmonyfromDegree("I") // Harmony h.printSimple // CM a.getHarmonyfromDegree("i").printSimple // CM since its case insensitive a.getHarmonyfromDegree("II").printSimple // Dm a.getHarmonyfromDegree("III").printSimple // Em

Tonal Universe

With tonal universe you can get information about what chord belongs to what tonality and create sequences of chords from a string of roman degree numbers:

In this string, each line represents a tonality and FUNDAMENTAL,MAJOR/MINOR, separeted by a colon. After this a sequence of roman numerals are added, and you can add secondary functions like the fifht degree of the sixt V7/VI. When passed to the "getHarmonyList" function, this is parsed and we return an array of chords that we can pass a view bean

``` ( u=TonalUniverse(); ~str= "C,m: I V7/VI VI V VI II II7 IV VII7 I E,m: V7 I IV V7/V I C,m: V7/V V7 I "; // This function takes a while and logs the progress in the console. ~chords=u.getHarmonyList(~str); ~arrayNotes=~chords.collect({arg ar; ar.notesHarmony[0..3]}); ) // -> [ [ 0, 3, 7, 12 ], [ -2, 3, 7, 13 ], [ -4, 3, 8, 12 ], [ -5, 2, 7, 11 ], [ -4, 3, 8, 12 ], [ -4, 5, 8, 14 ], [ -7, 2, 8, 12 ], [ -7, 0, 8, 12 ], [ -7, -1, 8, 14 ], [ -9, 0, 7, 15 ], [ -9, -1, 9, 18 ], [ -8, -1, 7, 19 ], [ -8, 0, 9, 21 ], [ -8, 1, 6, 22 ], [ -8, -1, 7, 23 ], [ -10, -3, 6, 24 ], [ -10, -5, 5, 23 ], [ -9, -5, 3, 24 ] ] ( Pbind( \note, Pseq(~arrayNotes.flat,1), \dur, 0.2 ).play ) ~arrayNotes.flat.plot("Sequence", discrete:true)

``` Piano roll

Installation

  • Add the main folder to the Super Collider extensions folder.
  • This libarary can also be installed as a quark by following the instructions in this link: QUARKS TUTORIAL

Author

Cristian Banuelos, dr_holomorfo 2023 wwww.holomorfo.com

ChordsDefinitions
Extension
Superclass:
Harmony
Project
Source file
Extension
Superclass:
HarmonyDefinition
Extension
Superclass:
ScalesChordsDefinitions
Extension
Superclass:
TonalCoordinate
Extension
Superclass:
TonalUniverse
Extension
Superclass:
Tonality
Project
Source file
Extension
Superclass:
1.0.2
Date
2022-11-23
Git hash
94af6f9d26d4486e725570d9c1473bb68010fe60
1.0.1
Date
2022-11-14
Git hash
2c612176ac67f903b998b854ad0a2d44ff4831fa
1.0.0
Date
2022-11-13
Git hash
f7599fe5c6a07ce75024d6bce5069bc6fa0371d1

Installation

Repository

URL

https://github.com/holomorfo/superharmony

Since

2018-02-22

Last update

2024-04-22

Current version

1.0.2

Quark info

name

superharmony

path

superharmony

since

2022

author

Cristian Banuelos

status

beta

country

USA

summary

Utilities to create harmonic arrays

version

1.0.1

organization

dr_holomorfo

Possible dependcies

Possible dependants