The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The “MCT” in musicMCT stands for Modal Color Theory, a theory of musical scale structure developed by Paul Sherrill, “Modal Color Theory,” Journal of Music Theory 69/1 (2025): 1-49. The goal of this package is to give musicians and music scholars computational tools that make it easier to work with this theory. In a nutshell, Modal Color Theory models musical scales as points in a geometry. The locations of those points relative to various hyperplane arrangements tell us a lot about the scales’ internal structures and mutual relationships. The shape of those hyperplane arrangements gets pretty complex: for the important case of seven-note scales, the main arrangement has 42 hyperplanes in a 6-dimensional space! Computational tools are therefore very helpful.
If you’ve ever wondered why a piece of music uses one scale rather than another; if you want to know more about the jazz chord-scale concept of lydian being “bright” and locrian being “dark”; if you’ve ever wanted to design your own microtonal scale from scratch; if you’re a theorist who wants a geometrical perspective on concepts like voice leading and maximal evenness; if you’re an ethnomusicologist looking to interpret tuning data: musicMCT might be useful to you!
You can install the latest released version of musicMCT from CRAN with:
install.packages("musicMCT")
Alternatively, you can install the development version of musicMCT from GitHub with:
install.packages("remotes")
::install_github("satbq/musicMCT") remotes
In addition to the package itself, you will probably want to use the following large files which contain data about the MCT geometries:
Download these files, save them to your working directory, and load them with:
<- readRDS("representative_scales.rds")
representative_scales <- readRDS("representative_signvectords.rds")
representative_signvectors <- readRDS("color_adjacencies.rds") color_adjacencies
For a detailed introduction to using this package, please see the introductory vignette.
As a very quick example, let’s define the most common “just intonation” version of the major scale and run a few tests on it:
library(musicMCT)
<- c(1, 9/8, 5/4, 4/3, 3/2, 5/3, 15/8)
just_dia_frequency_ratios <- 12 * log2(just_dia_frequency_ratios)
just_dia
# This definition of the just diatonic explicitly derives it from the
# frequency ratios, which I've done to model that process for you. However,
# musicMCT also has a convenience function that will give us the
# same result much faster: try out j(dia) or j(1,2,3,4,5,6,7) for yourself.
# The modes of the scale are displayed as the columns in this matrix:
sim(just_dia)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
#> [2,] 2.039100 1.824037 1.117313 2.039100 1.824037 2.039100 1.117313
#> [3,] 3.863137 2.941350 3.156413 3.863137 3.863137 3.156413 3.156413
#> [4,] 4.980450 4.980450 4.980450 5.902237 4.980450 5.195513 4.980450
#> [5,] 7.019550 6.804487 7.019550 7.019550 7.019550 7.019550 6.097763
#> [6,] 8.843587 8.843587 8.136863 9.058650 8.843587 8.136863 8.136863
#> [7,] 10.882687 9.960900 10.175963 10.882687 9.960900 10.175963 9.960900
# A few pieces of evidence that the scale is "pairwise well-formed":
asword(just_dia)
#> [1] 3 2 1 3 2 3 1
howfree(just_dia)
#> [1] 2
isgwf(just_dia)
#> [1] TRUE
# A 15 equal-tempered approximation of just-dia which preserves its "color":
<- quantize_color(just_dia)
quantized_just_dia print(quantized_just_dia)
#> $set
#> [1] 0 3 5 6 9 11 14
#>
#> $edo
#> [1] 15
# Finally, let's see a rough brightness graph for the scale. (R can assemble the
# necessary information, but musicMCT doesn't yet make the graphs pretty!)
brightnessgraph(quantized_just_dia$set, edo=quantized_just_dia$edo)
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.