musicMCT (development version)
-
ineqsym()now returns the correct permutation matrix wheninvolution=TRUE. Previously, theinvolutionparameter affected returned sets but not returned permutation matrices.
musicMCT 0.4.0
CRAN release: 2026-02-27
New functions
- New
move_to_hyperplane()finds the point where a chosen line and hyperplane intersect. - New
point_on_flat()generates a concrete point on any given flat of a hyperplane arrangement.
Updates to function ineqsym()
- The function can now return a permutation matrix rather than a scale, which it does if
setisNULL. New parametercardgoes along with this change: it is necessary to specify the size of the permutation matrix ifsetisNULL. - Default value of parameter
setis nowNULL. - Change to the way the parameter
ais interpreted. Essentially it is now the inverse (modcard) of the previous implementation ofa. The new method enhances consistency with other standards and with the permutation-matrix view of the function. - Changes to the internal logic of the function, emphasizing the role of permutation matrices in implementing the symmetries of the space.
Bug fixes and minor functionality updates
- Fixes for
clampitt_q(), so that it gives correct results whensetincludes transpositionally symmetrical subsets or doubled notes. -
ianring()gainsis_interactiveparameter which allows explicit control over whether the function opens a browser window (mainly to disable the browser during tests). -
project_onto()now works for hyperplane arrangements that are not central, such as those frommake_roth_ineqmat()andmake_rosy_ineqmat(). -
scale_palette()gains anineqmatparameter, which improves completeness of results for arrangements other than the modal color theory arrangement.
musicMCT 0.3.0
CRAN release: 2025-11-03
-
brightness_comparisons()andbrightnessgraph()gain agoalparameter that allows voice-leading brightness relationships between different sets to be studied. - New
clampitt_q()finds the sets that are “Q-related” to an input (Clampitt 1997, 2007). -
colornum()now tries to automatically match a signvector list to the specifiedineqmatwhen the parametersignvector_listisNULL. (For instance,colornum(set, ineqmat="pastel")searches the global environment forpastel_signvectors.) - New
fpmod()allows for safer modulo division in contexts with octave equivalence. - New
inter_vlsig()finds elementary voice leadings between sets of different Tn-types. - New
make_infrared_ineqmat()adds a new family of hyperplane arrangements for studying voice leading. -
minimize_vl()now returns better results whenmethod="hamming"by allowing for voice crossings (#4). -
primary_colornum()gains asignvector_listparameter to pass tocolornum(), allowing it to work properly for hyperplane arrangements other than the “modal color theory” arrangement. - Parameter
nfortni()gains a default value ofNULL, in which case the indexnis chosen to create the contextual inversion which keeps the first and last entries ofsetfixed. -
vl_generators()now gives correct results for sets which failoptc_test(). -
vlsig()parameterindexnow defaults toNULL, returning a matrix of all elementary voice-leadings.
More flexible handling of OPTIC symmetries
- New
normal_form()calculates the normal form of a set under any combination of OPTIC symmetries, following the algorithm described by Hook (2023, 416-8). - Set theory functions including
tn(),tni(),startzero(), and so on gain anopticparameter, which allows the user to specify the OPTIC symmetries to consider.
Anaglyph Arrangements
- New
make_anaglyph_ineqmat()allows construction of a new family of hyperplane arrangements (anaglyph arrangements) which study voice leadings between sets of different set classes. - New
anazero_fingerprint()provides granular information about the types of hyperplanes that a pair of sets lie on in the anaglyph arrangement. - New behavior for
howfree()andcolornum()because anaglyph arrangements require special handling.
musicMCT 0.2.0
CRAN release: 2025-07-21
New ineqmat features
- New
make_black_ineqmat()andmake_gray_ineqmat()allow new transposition-sensitive hyperplane arrangements to be studied; ineqmat parameter for other functions (e.g.signvector()now accepts “black” and “gray” as options. - New
make_offset_ineqmat()creates version of standard ineqmats (MCT, white, black, etc.) which have been translated to be centered on an arbitrary set. - Creation functions for ineqmats (
makeineqmat(),make_black_ineqmat(),make_white_ineqmat(),make_roth_ineqmat()) now return a consistent value (integer(0)) rather than various errors whencardis small. - New data set
roth_ineqmats.rdawith precomputed results frommake_roth_ineqmat(); accessed with newget_roth_ineqmat(). - New data sets for pastel and white arrangements (for cardinalities <= 6) uploaded to modalcolortheory repository and linked in the documentation for
make_white_ineqmat().
New behaviors for quantization functions
- Affected functions are
quantize_color(),quantize_hue(), andset_from_signvector(). - Upon failure, quantization functions now return a result whose format matches expected success format depending on value of
reconvertparameter. That is, ifreconvert=TRUE, failure to quantize results in aNAvector (as before), but ifreconvert=FALSE, failure to quantize results in a list with entriessetandedo, both of which areNA. - Quantization functions gain a
target_edoparameter, which allows user to search for desired scales in a specific edo rather than all possible edos.
New Functions
- New
clockface()offers a simple plotting mechanism to visualize sets on a pitch-class clockface (with numbers corresponding to any equal temperament). - New
ianring()creates a convenient way to open a browser window to information about the input set on Ian Ring’s website The Exciting Universe of Music Theory. - New functions for basic applications of the DFT to set theory are added. These include
set_to_distribution(),distribution_to_set(), anddft().
Updates to Existing Functions
-
brightnessgraph()now returns an invisible copy of the igraph graph object underlying the plotted brightness graph, instead of an invisibleNULL. -
sim()gains agoalparameter, which allows it to calculate the interscalar interval matrix for two sets. -
vl_generators()now throws a warning instead of an error whensetis perfectly even, returning a 2-by-0 matrix.
