22
33import dataclasses as dc
44from contextlib import nullcontext , suppress
5+ from fractions import Fraction
56from typing import Protocol , cast , runtime_checkable
67
78from pydantic import BaseModel
89
9- from ..types import Fraction , Frequency , NoteNumber , Number
10+ from ..types import Frequency , NoteNumber
1011
1112# TODO: make sure we can serialize and deserialize Fraction (as str)
1213
@@ -19,16 +20,15 @@ def __call__(self, note_number: NoteNumber) -> Frequency: ...
1920@runtime_checkable
2021class ToFrequency (Protocol ):
2122 def __call__ (
22- self , root_frequency : Number , octave_change : Number , octaves : Number
23+ self , root_frequency : float , octave_change : float , octaves : float
2324 ) -> Frequency : ...
2425
2526
2627class PitchToFrequency (BaseModel , frozen = True ):
2728 #: The base rule for converting a pitch to a frequency
2829 function : str = 'power'
2930
30- def __call__ (self , root : Frequency , change : Number , octaves : Number ) -> Number :
31- change , octaves = cast (float , change ), cast (float , octaves )
31+ def __call__ (self , root : Frequency , change : float , octaves : float ) -> float :
3232 if self .function == 'power' :
3333 return root * change ** octaves
3434 elif self .function == 'linear' :
@@ -45,7 +45,7 @@ class TuningImpl(BaseModel, frozen=True, arbitrary_types_allowed=True):
4545 """
4646
4747 #: Detune everything, in cents of an octave division
48- detune : Number = 0
48+ detune : float = 0
4949
5050 #: If limit_denominator is greater than zero, use rounded N-limit just intonation
5151 limit_denominator : int = 0
@@ -57,7 +57,7 @@ class TuningImpl(BaseModel, frozen=True, arbitrary_types_allowed=True):
5757 #: the change is a ratio, so if it's 2, each octave is twice the frequency of the
5858 #: last; for "linear", it's a difference, so if it's 100, each octave would be
5959 #: 100Hz greater in frequency than the previous.
60- octave_change : Number = 2
60+ octave_change : float = 2
6161
6262 #: The rule for converting a pitch to a frequency
6363 pitch_to_frequency : PitchToFrequency = PitchToFrequency ()
0 commit comments