Numuse Documentation

numuse.musical_system

Source code for numuse.musical_system

from fractions import Fraction
from typing import List
import math


[docs]class RatioBasedMusicSystem:
[docs] def __init__( self, base_frequency: float, ratios: List[Fraction], equivalence_ratio: float ): self.base_frequency = base_frequency self.ratios = ratios self.equivalence_ratio = equivalence_ratio self.num_notes = len(ratios) self.interval_to_ratio = {i: ratios[i] for i in range(self.num_notes)} self.ratio_to_interval = {v: k for k, v in self.interval_to_ratio.items()} # self.ratios_to_complexity = {ratio: math.lcm(ratio.numerator, ratio.denominator)/math.gcd(ratio.numerator, ratio.denominator) for ratio in self.ratios} hand_sorted_intervals = [0, 7, 5, 9, 4, 3, 8, 10, 2, 11, 1, 6] self.interval_to_complexity = { hand_sorted_intervals[i]: i for i in hand_sorted_intervals }
[docs]class RBMS_Approximation(RatioBasedMusicSystem):
[docs] def __init__( self, base_frequency: float, ratios: List[Fraction], equivalence_ratio: float, multiplier: float, num_notes: int, ): super().__init__(base_frequency, ratios, equivalence_ratio) self.multiplier = multiplier self.fundamental_notes = [ base_frequency * (multiplier ** i) for i in range(num_notes) ] self.ratios_to_approximations = { ratio: (multiplier ** i) for i, ratio in enumerate(self.ratios) } self.approximations_to_ratios = { v: k for k, v in self.ratios_to_approximations.items() }
Free document hosting provided by Read the Docs.