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)