forked from sivabenepoivediamo/musicplusplus
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmatrixDistances.cpp
More file actions
66 lines (60 loc) · 3.14 KB
/
matrixDistances.cpp
File metadata and controls
66 lines (60 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#/**
* @file matrixDistances.cpp
* @brief Example: computing distances over transposition, modal and rototranslation matrices
*
* Demonstrates building transposition/modal/rototranslation matrices and computing
* distance metrics and best matches.
*
* @example
*/
#include "../src/matrixDistance.h"
int main(){
PositionVector cmaj({0, 2, 4, 5, 7, 9, 11});
PositionVector clyd({0, 2, 4, 6, 7, 9, 11});
PositionVector v1({0, 4, 7});
PositionVector v2({7, 11, 14});
int complexity = 0;
cout << "C Major Scale: " << cmaj << '\n';
cout << "C Lydian Mode: " << clyd << '\n';
cout << "C Major Chord: " << v1 << '\n';
cout << "G Major Chord: " << v2 << '\n';
int center = align(v1, v2);
cout << "\nRototranslation center: \n" << center << endl;
TranspositionMatrix trans = transpositionMatrix(cmaj);
cout << "\n=== Transposition matrix distances (comparing C lydian and C major transpositions) ===\n";
TranspositionMatrixDistance a = calculateDistances(clyd, trans);
printMatrixDistance(a);
TranspositionMatrixRow transBest = a.getByComplexity(complexity);
cout << "\nBest transposition for complexity " << complexity << ":" << endl;
cout << transBest << '\n';
ModalMatrix modes = modalMatrix(cmaj);
cout << "\n=== Modal matrix distances (comparing C lydian to each mode of C major) ===\n";
ModalMatrixDistance b = calculateDistances(clyd, modes);
printMatrixDistance(b);
ModalMatrixRow modeBest = b.getByComplexity(complexity);
cout << "\nBest mode for complexity " << complexity << ":" << endl;
cout << modeBest << '\n';
RototranslationMatrix positions = rototranslationMatrix(v2, center);
cout << "\n=== Rototranslation distances (comparing C major to rototranslations of G major) ===\n";
RototranslationMatrixDistance c = calculateDistances(v1, positions);
printMatrixDistance(c);
RototranslationMatrixRow rotoBest = c.getByComplexity(complexity);
cout << "\nBest rototranslation for complexity " << complexity << ":" << endl;
cout << rotoBest << '\n';
IntervalVector crit({2, 2, 3});
ModalSelectionMatrix sel = modalSelection(cmaj, crit, 0);
cout << "\n=== Modal selection distances (comparing G major chord to modal selections from C major using criterion [2,2,3] and degree 0) ===\n";
ModalSelectionMatrixDistance d = calculateDistances(v2, sel);
printMatrixDistance(d);
ModalSelectionMatrixRow degreeBest = d.getByComplexity(complexity);
cout << "\nBest degree for complexity " << complexity << ":" << endl;
cout << degreeBest << '\n';
ModalRototranslationMatrix degrees = modalRototranslation(sel);
cout << "\n=== Modal rototranslation distances (comparing G major chord to rototranslations matrices derived from each row of the modal selection) ===\n";
ModalRototranslationMatrixDistance e = calculateDistances(v2, degrees);
printMatrixDistance(e);
ModalRototranslationMatrixRow hi = e.getByComplexity(complexity);
cout << "\nBest modal rototranslation for complexity " << complexity << ":" << endl;
cout << hi << '\n';
return 0;
}