Rithmos / music_math.py
Ikaros
Initial commit of server files
9a55333
import json
import networkx as nx
import numpy as np
def create_music_graph():
"""
Creates a directed graph representing the 12-tone chromatic scale
with edges for major and minor thirds, and perfect fifths.
"""
notes = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']
G = nx.DiGraph()
for i, note in enumerate(notes):
G.add_node(i, label=note)
for i in range(12):
# Major third (4 semitones)
G.add_edge(i, (i + 4) % 12, interval='M3')
# Minor third (3 semitones)
G.add_edge(i, (i + 3) % 12, interval='m3')
# Perfect fifth (7 semitones)
G.add_edge(i, (i + 7) % 12, interval='P5')
return G
def get_adjacency_matrix(G):
"""
Returns the adjacency matrix of the graph.
"""
return nx.to_numpy_array(G, dtype=int)
def save_matrix_to_json(matrix, path='matrix.json'):
"""
Saves the matrix to a JSON file.
"""
with open(path, 'w') as f:
json.dump(matrix.tolist(), f)
if __name__ == '__main__':
graph = create_music_graph()
adj_matrix = get_adjacency_matrix(graph)
save_matrix_to_json(adj_matrix, '/home/KidIkaros/Documents/code/Ikaros/musick/chord-detector-extension/matrix.json')
print("Adjacency matrix saved to matrix.json")
print(adj_matrix)