def test_Get_OutOfRange_Pitch_Max(self): p = PythagoreanTuning() with self.assertRaises(ValueError) as ex: p.GetFrequency(12, 5) self.assertIn( f'引数pitchClassは{PitchClass.Min}〜{PitchClass.Max}までの整数値にしてください。', str(ex.exception))
def test_Get_AllOctave_432(self): f = FundamentalTone(hz=432, pitchClass=9, octaveClass=5) p = PythagoreanTuning(f) for octave in range(10 + 1): hz = p.GetFrequency(9, octave) self.assertEqual(math.floor(432 * pow(2, octave - 5)), math.floor(hz))
def test_Get(self): f = FundamentalTone(hz=440, pitchClass=9, octaveClass=5) p = PythagoreanTuning(f) for pitch in range(PitchClass.Max + 1): hz = p.GetFrequency(pitch, 5) print(hz) if 9 == pitch: self.assertEqual(440, math.floor(hz))
def test_Get_OutOfRange_Octave_Max(self): p = PythagoreanTuning() with self.assertRaises(ValueError) as ex: p.GetFrequency(9, 11) # self.assertIn('ノート番号が0〜127の範囲外になりました。', str(ex.exception)) self.assertIn('引数octaveは0〜10の値にしてください。', str(ex.exception))
def test_init_set(self): f = FundamentalTone(hz=432, pitchClass=9, octaveClass=5) p = PythagoreanTuning(f) self.assertTrue(isinstance(p.FundamentalTone, FundamentalTone)) self.assertEqual(432, p.FundamentalTone.Hz) self.assertEqual(9, p.FundamentalTone.PitchClass) self.assertEqual(5, p.FundamentalTone.OctaveClass) del f with self.assertRaises(ReferenceError) as ex: print(p.FundamentalTone) self.assertIn('weakly-referenced object no longer exists', str(ex.exception))
for scale_name in [ 'Major', 'Minor', 'Diminished', 'HarmonicMinor', 'MelodicMinor', 'MajorPentaTonic', 'MinorPentaTonic', 'BlueNote' ]: print('----------', scale_name, '----------') scale.Intervals = getattr(ScaleIntervals, scale_name) for scaleKeyId in range(temperament.Denominator): scale.Key = scaleKeyId for tone in scale.Tones: print('{:2}'.format(GetToneName(tone[0])), end=' ') print() PlayAndMaker.Run(temperament, scale, scale_name) run(EqualTemperament()) run(PythagoreanTuning()) #純正律 def PlayAndMakeJustIntonation(temperaments): if not isinstance(temperaments, JustIntonation): raise Exception(f'このメソッドの引数temperamentsはJustIntonation型のみ対応です。') wm = Wave.BaseWaveMaker.BaseWaveMaker() sampler = Wave.Sampler.Sampler() wf = Wave.WaveFile.WaveFile() wf.BasePath = pathlib.PurePath( f'../res/440/JustIntonation/scales/{temperaments.Scale}') wav = [] for f0 in temperaments.Frequencies: wav.append(sampler.Sampling(wm.Sin(a=1, fs=8000, f0=f0, sec=0.5))) wf.Write(b''.join(wav), filename=GetScaleFilename(temperaments.Scale,
def test_Get_Invalid_Type_OctaveClass(self): p = PythagoreanTuning() with self.assertRaises(TypeError) as ex: p.GetFrequency(9, 'octave') # self.assertIn('引数pitchClass, relativeOctaveはint型にしてください。', str(ex.exception)) self.assertIn('引数octaveはint型にしてください。', str(ex.exception))
def test_init_Default(self): p = PythagoreanTuning() self.assertTrue(isinstance(p.FundamentalTone, FundamentalTone)) self.assertEqual(440, p.FundamentalTone.Hz) self.assertEqual(9, p.FundamentalTone.PitchClass) self.assertEqual(5, p.FundamentalTone.OctaveClass)