coltrane v0.0.1 Coltrane.Theory.Interval

Intervals describe the relationship between 2 different notes

Link to this section Summary

Functions

iex> Interval.alter_quality(“M”, 0) “M”

This function gets the interval between 2 notes

iex> Interval.from_notation(“5P”)

...> |> Interval.circle
...> |> Enum.map(&Interval.name/1)
["1P", "2M", "3M", "4P", "5P", "6M", "7M"]

iex> Interval.expand_name(“1P”) “Perfect Unison”

iex> Interval.from_notation(“1P”)

%Interval{letter_distance: 0, alteration: 0}

iex> Interval.full_name(%Interval{letter_distance: 3, alteration: -1}) “Diminished Fourth”

Examples:

iex> Interval.letter_distance(“C”, “D”) 1

iex> Interval.name(%Interval{letter_distance: 0, alteration: 0}) “1P”

iex> “2M” |> Interval.from_notation |> Interval.semitones

2

iex> [“3M”, “3M”]

...> |> Enum.map(&Interval.from_notation/1)
...> |> Enum.reduce(&Interval.sum/2)
...> |> Interval.name
"5P"

Link to this section Functions

Link to this function alter_quality(quality, alteration)

iex> Interval.alter_quality(“M”, 0) “M”

iex> Interval.alter_quality(“M”, 1) “A”

iex> Interval.alter_quality(“M”, -1) “m”

iex> Interval.alter_quality(“M”, -2) “D”

iex> Interval.alter_quality(“M”, -3) “DD”

iex> Interval.alter_quality(“P”, 0) “P”

iex> Interval.alter_quality(“P”, 1) “A”

iex> Interval.alter_quality(“P”, -1) “D”

iex> Interval.alter_quality(“P”, -2) “DD”

iex> Interval.alter_quality(“P”, 2) “AA”

Link to this function between(first_note, second_note)

This function gets the interval between 2 notes

Examples

iex> Interval.between(“C”, “C#”) %Interval{alteration: 1, letter_distance: 0}

iex> Interval.between(“C”, “D”) %Interval{alteration: 0, letter_distance: 1}

iex> Interval.between(“C”, “D”) %Interval{letter_distance: 1, alteration: 0}

Link to this function circle(interval)
iex> Interval.from_notation("5P")
...> |> Interval.circle
...> |> Enum.map(&Interval.name/1)
["1P", "2M", "3M", "4P", "5P", "6M", "7M"]
Link to this function circle(interval, intervals)
Link to this function expand_distance_name(letter_distance)
Link to this function expand_name(name)

iex> Interval.expand_name(“1P”) “Perfect Unison”

iex> Interval.expand_name(“3m”) “Minor Third”

iex> Interval.expand_name(“5A”) “Augmented Fifth”

iex> Interval.expand_name(“5AAA”) “Triple Augmented Fifth”

iex> Interval.expand_name(“1DD”) “Double Diminished Unison”

Link to this function expand_quality_name(quality)
Link to this function from_notation(notation)
iex> Interval.from_notation("1P")
%Interval{letter_distance: 0, alteration: 0}

iex> Interval.from_notation("2M")
%Interval{letter_distance: 1, alteration: 0}

iex> Interval.from_notation("3m")
%Interval{letter_distance: 2, alteration: -1}

iex> Interval.from_notation("4m")
%Coltrane.Theory.Interval{alteration: -1, letter_distance: 3}

iex> Interval.from_notation("5AA")
%Interval{letter_distance: 4, alteration: 2}
Link to this function full_name(interval)

iex> Interval.full_name(%Interval{letter_distance: 3, alteration: -1}) “Diminished Fourth”

iex> Interval.full_name(%Interval{letter_distance: 2, alteration: 0}) “Major Third”

Link to this function letter_distance(first_letter, second_letter)

Examples:

iex> Interval.letter_distance(“C”, “D”) 1

iex> Interval.letter_distance(“D”, “C”) -1

iex> Interval.letter_distance(“C”, “B”) 6

iex> Interval.letter_distance(“B”, “C”) -6

iex> Interval.name(%Interval{letter_distance: 0, alteration: 0}) “1P”

iex> Interval.name(%Interval{letter_distance: 2, alteration: 0}) “3M”

iex> Interval.name(%Interval{letter_distance: 1, alteration: -1}) “2m”

iex> Interval.name(%Interval{letter_distance: 2, alteration: -1}) “3m”

iex> Interval.name(%Interval{letter_distance: 3, alteration: 1}) “4A”

iex> Interval.name(%Interval{letter_distance: 3, alteration: 2}) “4AA”

Link to this function semitones(interval)
iex> "2M" |> Interval.from_notation |> Interval.semitones
2

iex> "1A" |> Interval.from_notation |> Interval.semitones
1

iex> "3D" |> Interval.from_notation |> Interval.semitones
3

iex> "3M" |> Interval.from_notation |> Interval.semitones
4

iex> "4A" |> Interval.from_notation |> Interval.semitones
6

iex> %Interval{letter_distance: 8} |> Interval.semitones
1
Link to this function sum(interval1, interval2)
iex> ["3M", "3M"]
...> |> Enum.map(&Interval.from_notation/1)
...> |> Enum.reduce(&Interval.sum/2)
...> |> Interval.name
"5P"

iex> ["3M", "3m", "3M"]
...> |> Enum.map(&Interval.from_notation/1)
...> |> Enum.reduce(&Interval.sum/2)
...> |> Interval.name
"7m"