示例#1
0
 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))
示例#2
0
 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))
示例#3
0
 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))
示例#4
0
    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))
示例#5
0
 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,
示例#7
0
    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))
示例#8
0
 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)