Ejemplo n.º 1
0
 def test_square_gen(self):
     """gen.SquareGenerator"""
     gen = splat.gen.SquareGenerator()
     f = 1000.0
     gen.run(0.0, 1.0, f)
     nf = gen.frag.rate / f
     samples = {int(nf * 0.1): (1.0, 1.0), int(nf * 0.9): (-1.0, -1.0)}
     self.assert_samples(gen.frag, samples)
     self.assert_md5(gen.frag, '0ca047e998f512280800012b05107c63')
Ejemplo n.º 2
0
 def test_square_gen(self):
     """gen.SquareGenerator"""
     gen = splat.gen.SquareGenerator()
     f = 1000.0
     gen.run(0.0, 1.0, f)
     nf = gen.frag.rate / f
     samples = {int(nf * 0.1): (1.0, 1.0), int(nf * 0.9): (-1.0, -1.0)}
     self.assert_samples(gen.frag, samples)
     self.assert_md5(gen.frag, '0ca047e998f512280800012b05107c63')
Ejemplo n.º 3
0
 def test_gen_levels(self):
     """Generator and source levels"""
     freq = 123.45
     duration = 1.0
     for levels in [-3.0, -3, int(-3), long(-3), (-3.0, -3.0), (int(-3), int(-3)), (long(-3), long(-3))]:
         frag = splat.data.Fragment(duration=duration)
         splat.sources.sine(frag, levels, freq)
         gen = splat.gen.SineGenerator()
         gen.run(0.0, duration, freq, levels=levels)
         self.assert_md5([frag, gen.frag], "1d6c38f467b1bdb5a9c3e8d573e815f4")
Ejemplo n.º 4
0
 def test_sine_gen(self):
     """gen.SineGenerator"""
     gen = splat.gen.SineGenerator()
     freq = 1000.0
     ph = 6.789
     gen.run(0.0, 1.0, freq, ph)
     n = int(0.1234 * gen.frag.duration * gen.frag.rate)
     s = math.sin(2 * math.pi * freq * (ph + float(n) / gen.frag.rate))
     self.assert_samples(gen.frag, {n: (s, s)})
     self.assert_md5(gen.frag, 'ec18389e198ee868d61c9439343a3337')
Ejemplo n.º 5
0
 def test_sine_gen(self):
     """gen.SineGenerator"""
     gen = splat.gen.SineGenerator()
     freq = 1000.0
     ph = 6.789
     gen.run(0.0, 1.0, freq, ph)
     n = int(0.1234 * gen.frag.duration * gen.frag.rate)
     s = math.sin(2 * math.pi * freq * (ph + float(n) / gen.frag.rate))
     self.assert_samples(gen.frag, {n: (s, s)})
     self.assert_md5(gen.frag, 'ec18389e198ee868d61c9439343a3337')
Ejemplo n.º 6
0
 def test_gen_levels(self):
     """Generator and source levels"""
     freq = 123.45
     duration = 1.0
     for levels in [-3.0, -3, int(-3),
                     long(-3), (-3.0, -3.0),
                     (int(-3), int(-3)), (long(-3), long(-3))]:
         frag = splat.data.Fragment(duration=duration)
         splat.sources.sine(frag, levels, freq)
         gen = splat.gen.SineGenerator()
         gen.run(0.0, duration, freq, levels=levels)
         self.assert_md5([frag, gen.frag],
                         '1d6c38f467b1bdb5a9c3e8d573e815f4')
Ejemplo n.º 7
0
 def test_triangle_gen(self):
     """gen.TriangleGenerator"""
     gen = splat.gen.TriangleGenerator()
     f = 1000.0
     ratio = 0.567
     gen.run(0.0, 1.0, f, 0.0, ratio)
     nf = gen.frag.rate / f
     x1 = 0.25
     t1 = int(nf * ratio * x1)
     s1 = (t1 * 2.0 / (ratio * nf)) - 1.0
     x2 = 0.75
     ratio2 = 1 - ratio
     t2 = int(nf * (ratio + (ratio2 * x2)))
     a2 = -2.0 / (ratio2 * nf)
     b2 = 1.0 - (a2 * ratio * nf)
     s2 = (t2 * a2) + b2
     samples = {t1: (s1, s1), t2: (s2, s2)}
     self.assert_samples(gen.frag, samples)
     self.assert_md5(gen.frag, 'b6d9eb000b328134cd500173b24f1c88')
Ejemplo n.º 8
0
 def test_triangle_gen(self):
     """gen.TriangleGenerator"""
     gen = splat.gen.TriangleGenerator()
     f = 1000.0
     ratio = 0.567
     gen.run(0.0, 1.0, f, 0.0, ratio)
     nf = gen.frag.rate / f
     x1 = 0.25
     t1 = int(nf * ratio * x1)
     s1 = (t1 * 2.0 / (ratio * nf)) - 1.0
     x2 = 0.75
     ratio2 = 1 - ratio
     t2 = int(nf * (ratio + (ratio2 * x2)))
     a2 = -2.0 / (ratio2 * nf)
     b2 = 1.0 - (a2 * ratio * nf)
     s2 = (t2 * a2) + b2
     samples = {t1: (s1, s1), t2: (s2, s2)}
     self.assert_samples(gen.frag, samples)
     self.assert_md5(gen.frag, 'b6d9eb000b328134cd500173b24f1c88')
Ejemplo n.º 9
0
 def test_frag_offset(self):
     """Fragment.offset"""
     offset = 1234.5
     frag = splat.data.Fragment(duration=1.0)
     n = int(0.5678 * frag.duration * frag.rate)
     frag.offset(offset)
     frag_twice = splat.data.Fragment(duration=1.0)
     gen = splat.gen.SineGenerator(frag=frag_twice)
     gen.run(0.0, 1.0, 1000.0)
     frag_twice.offset(offset)
     frag_twice_ref = frag_twice[n][0]
     offset2 = -57.25
     offset_check = frag_twice_ref + offset2
     frag_twice.offset(offset2)
     frag_sig = splat.data.Fragment(duration=1.0)
     frag_sig.offset(lambda x: offset)
     self.assert_samples(frag, {n: (offset, offset)})
     self.assert_samples(frag_sig, {n: (offset, offset)})
     self.assert_samples(frag_twice, {n: (offset_check, offset_check)})
     self.assert_md5([frag, frag_sig], '248070c79f99014cf800d05ea81e0679')
Ejemplo n.º 10
0
 def test_frag_offset(self):
     """Fragment.offset"""
     offset = 1234.5
     frag = splat.data.Fragment(duration=1.0)
     n = int(0.5678 * frag.duration * frag.rate)
     frag.offset(offset)
     frag_twice = splat.data.Fragment(duration=1.0)
     gen = splat.gen.SineGenerator(frag=frag_twice)
     gen.run(0.0, 1.0, 1000.0)
     frag_twice.offset(offset)
     frag_twice_ref = frag_twice[n][0]
     offset2 = -57.25
     offset_check = frag_twice_ref + offset2
     frag_twice.offset(offset2)
     frag_sig = splat.data.Fragment(duration=1.0)
     frag_sig.offset(lambda x: offset)
     self.assert_samples(frag, {n: (offset, offset)})
     self.assert_samples(frag_sig, {n: (offset, offset)})
     self.assert_samples(frag_twice, {n: (offset_check, offset_check)})
     self.assert_md5([frag, frag_sig], '248070c79f99014cf800d05ea81e0679')
Ejemplo n.º 11
0
Archivo: bm.py Proyecto: gctucker/splat
 def test_gen(self):
     gen = self.gen_cls(frag=self.frag)
     gen.overtones = self.ot
     gen.run(0.0, self.frag.duration, self.freq)
Ejemplo n.º 12
0
Archivo: bm.py Proyecto: gctucker/splat
 def test_gen_mixed(self):
     gen = self.gen_cls(frag=self.frag)
     gen.overtones = self.ot
     gen.run(0.0, self.frag.duration, self.freq, levels=self.mod)
Ejemplo n.º 13
0
Archivo: bm.py Proyecto: gctucker/splat
 def test_gen_signal(self):
     gen = self.gen_cls(frag=self.frag)
     gen.overtones = self.sig_ot
     gen.run(0.0, self.frag.duration, self.freq, levels=self.mod)
Ejemplo n.º 14
0
 def test_gen_signal(self):
     gen = self.gen_cls(frag=self.frag)
     gen.overtones = self.sig_ot
     gen.run(0.0, self.frag.duration, self.freq, levels=self.mod)
Ejemplo n.º 15
0
 def test_gen_mixed(self):
     gen = self.gen_cls(frag=self.frag)
     gen.overtones = self.ot
     gen.run(0.0, self.frag.duration, self.freq, levels=self.mod)
Ejemplo n.º 16
0
 def test_gen(self):
     gen = self.gen_cls(frag=self.frag)
     gen.overtones = self.ot
     gen.run(0.0, self.frag.duration, self.freq)
Ejemplo n.º 17
0
def run_tests(freq=123.45, duration=30.0, phase=23.456, pts=None,
              overtones=None, verbose=False):
    if pts is None:
        pts = [0.0, 0.2, 0.234, 0.456, 0.45602, 0.7124, 0.89, 0.90001]
    if overtones is None:
        overtones = [(1.0, 0.0, 0.45), (2.58, 12.345, 0.45), (200.0, 0.0, 1.0)]

    cases = []

    # -------------------------------------------------------------------------

    frag = splat.data.Fragment(channels=1)
    gen = splat.gen.SineGenerator(frag=frag)
    gen.run(0.0, duration, freq, phase)
    frag.save('sine-{}.wav'.format(splat.SAMPLE_WIDTH), normalize=False)
    cases.append('sine')

    if verbose:
        print('sine')
    for t in pts:
        t = duration * t
        n = frag.s2n(t)
        t = float(n) / frag.rate
        st = 2 * cmath.pi * freq * (t + phase)
        y1 = frag[n][0]
        y2 = math.sin(st)
        delta = abs(y2 - y1)
        if delta != 0.0:
            delta_dB = "{:.3f}".format(splat.lin2dB(delta))
        else:
            delta_dB = 'infinity'
        if verbose:
            print(t, y1, y2, delta_dB)

    # -------------------------------------------------------------------------

    frag = splat.data.Fragment(channels=1)
    gen = splat.gen.OvertonesGenerator(frag=frag)
    gen.overtones = overtones
    gen.run(0.0, duration, freq)
    frag.save('overtones-{}.wav'.format(splat.SAMPLE_WIDTH), normalize=False)
    cases.append('overtones')

    max_ratio = frag.rate / 2.0 / freq
    ot_clipped = []
    for ot in gen.overtones:
        if ot[0] < max_ratio:
            ot_clipped.append(ot)

    if verbose:
        print('overtones')
    for t in pts:
        t = duration * t
        n = frag.s2n(t)
        y1 = frag[n][0]
        y2 = sum(a * math.sin(2 * cmath.pi * freq * r * (t + ph))
                 for r, ph, a in ot_clipped)
        delta = abs(y2 - y1)
        if delta != 0.0:
            delta_dB = "{:.3f}".format(splat.lin2dB(delta))
        else:
            delta_dB = 'infinity'
        if verbose:
            print(t, y1, y2, delta_dB)

    # -------------------------------------------------------------------------

    duration = 1.0
    sig = splat.data.Fragment(channels=1)
    splat.gen.TriangleGenerator(frag=sig).run(0.0, duration, 12.0, levels=0.5)
    sig.offset(0.5)

    mod = splat.data.Fragment(channels=1)
    splat.gen.TriangleGenerator(frag=mod).run(0.0, duration, 4.0, levels=0.002)
    mod.offset(0.5)

    frag = splat.data.Fragment()
    splat.gen.SineGenerator(frag=frag).run(0.0, duration, 456.0, levels=sig,
                                           phase=lambda x: math.sin(x))
    frag.save('sine-signal-{}.wav'.format(splat.SAMPLE_WIDTH), normalize=False)
    cases.append('sine-signal')

    frag = splat.data.Fragment()
    gen = splat.gen.OvertonesGenerator(frag=frag)
    gen.overtones = overtones
    gen.run(0.0, duration, 456.0, levels=sig)
    frag.save('overtones-mixed1-{}.wav'.format(splat.SAMPLE_WIDTH),
              normalize=False)
    cases.append('overtones-mixed1')

    frag = splat.data.Fragment()
    gen = splat.gen.OvertonesGenerator(frag=frag)
    gen.overtones = overtones
    gen.run(0.0, duration, 456.0, levels=sig, phase=mod)
    frag.save('overtones-mixed2-{}.wav'.format(splat.SAMPLE_WIDTH),
              normalize=False)
    cases.append('overtones-mixed2')

    sig2 = splat.data.Fragment(channels=1)
    splat.gen.TriangleGenerator(frag=sig2).run(0.0, duration, 1.8, levels=0.1)
    sig2.offset(-sig2.get_peak()[0]['min'])
    overtones.append((0.54, 0.0, sig2))

    frag = splat.data.Fragment()
    gen = splat.gen.OvertonesGenerator(frag=frag)
    gen.overtones = overtones
    gen.run(0.0, duration, 456.0, levels=sig, phase=mod)
    frag.save('overtones-signal-{}.wav'.format(splat.SAMPLE_WIDTH),
              normalize=False)
    cases.append('overtones-signal')

    frag = splat.data.Fragment()
    gen = splat.gen.SineGenerator(frag=frag)
    gen.run(0.0, 5.678, 1234.56, levels=dB(-3))
    ratio = 1.987
    new_len = int(len(frag) * ratio)
    rem = new_len % 4
    if rem:
        new_len -= rem
    else:
        new_len -= 4
    frag.resample(ratio=ratio)
    frag.resize(length=new_len)
    frag.save('resample-float-{}.wav'.format(splat.SAMPLE_WIDTH))
    cases.append('resample-float')

    frag = splat.data.Fragment()
    gen = splat.gen.SineGenerator(frag=frag)
    gen.run(0.0, 5.678, 1234.56, levels=dB(-3))
    ratio = 1.987
    frag.resample(ratio=lambda x: ratio)
    frag.save('resample-signal-{}.wav'.format(splat.SAMPLE_WIDTH))
    cases.append('resample-signal')

    return cases
Ejemplo n.º 18
0
 def test_overtones_gen(self):
     """gen.OvertonesGenerator"""
     gen = splat.gen.OvertonesGenerator()
     gen.ot_decexp(1.0)
     gen.run(0.0, 1.0, 1000.0, 0.1)
     self.assert_md5(gen.frag, 'ee045e012673ff7ed4ab9bd590b57368')
Ejemplo n.º 19
0
def main(argv):
    parser = argparse.ArgumentParser("Dew Drop tune using irrational rythm.")
    parser.add_argument('--save-as',
                        default='dew_drop.wav',
                        help="output file name, leave blank to not save")
    parser.add_argument('--no-reverb',
                        action='store_true',
                        help="do not generate the reverb effect")
    parser.add_argument('--dump-scale',
                        action='store_true',
                        help="dump the frequency of the notes in the scale")
    parser.add_argument('--rate', type=int, default=48000, help="sample rate")
    parser.add_argument('--voices',
                        default='123',
                        help="voices to run (string with 1, 2 and 3)")
    args = parser.parse_args(argv[1:])

    gen = splat.gen.OvertonesGenerator(splat.data.Fragment(2, args.rate, 18.0))
    s = splat.scales.LogScale(fund=440.0)

    if args.dump_scale is True:
        # print frequencies of all the notes of the scale over 3 octaves
        for octave in range(-2, 1):
            for note in ['A', 'B', 'C#', 'D', 'E', 'F#', 'G#']:
                note_name = "{0}{1}".format(note, octave)
                print('{0:4s}: {1:.3f}'.format(note_name, s[note_name]))
            print("-------------")

    if '1' in args.voices:
        print("Voice 1")
        gen.levels = (dB(-2.5), dB(-2.5))
        gen.ot_decexp(2.0)
        set_fade(gen, 0.04)
        gen.run(0.0, 1.62, s['A-2'])
        gen.run(1.62, 3.24, s['D-2'])
        gen.run(3.24, 4.248, s['F#-2'])
        gen.run(4.248, 5.868, s['E-2'])
        gen.run(5.868, 6.858, s['D-2'])
        gen.run(6.858, 8.496, s['F#-2'])
        gen.run(8.496, 9.504, s['E-2'])
        gen.run(9.504, 11.124, s['B-2'])
        gen.run(11.124, 12.744, s['E-2'])
        gen.run(12.744, 13.752, s['A-2'])
        gen.run(13.752, 14.742, s['D-2'])
        gen.run(14.742, 16.38, s['E-2'])
        gen.run(16.38, 18.0, s['A-2'])

    if '2' in args.voices:
        print("Voice 2")
        gen.levels = (dB(0.0), dB(-2.5))
        gen.ot_decexp(1.6)
        set_fade(gen, 0.02)
        gen.run(0.0, 1.008, s['C#-1'])
        gen.run(1.008, 1.62, s['E-1'])
        gen.run(1.62, 2.628, s['A-1'])
        gen.run(2.628, 3.24, s['F#-2'])
        gen.run(3.24, 3.852, s['A-1'])
        gen.run(3.852, 4.248, s['C#-1'])
        gen.run(4.248, 4.86, s['B-1'])
        gen.run(4.86, 5.868, s['D-1'])
        gen.run(5.868, 6.858, s['B-1'])
        gen.run(6.858, 7.848, s['C#-1'])
        gen.run(7.848, 8.496, s['A-1'])
        gen.run(8.496, 9.504, s['G#-2'])
        gen.run(9.504, 10.494, s['D-1'])
        gen.run(10.494, 11.124, s['F#-1'])
        gen.run(11.124, 11.754, s['B-1'])
        gen.run(11.754, 12.744, s['D-1'])
        gen.run(12.744, 13.752, s['E-1'])
        gen.run(13.752, 14.364, s['F#-1'])
        gen.run(14.364, 15.372, s['A-1'])
        gen.run(15.372, 16.38, s['D-1'])
        gen.run(16.38, 18.0, s['C#-1'])

    if '3' in args.voices:
        print("Voice 3")
        gen.levels = (dB(-2.5), dB(0.0))
        gen.ot_decexp(1.2)
        set_fade(gen, 0.015)
        gen.run(0.0, 0.612, s['E'])
        gen.run(0.612, 1.008, s['D'])
        gen.run(1.008, 1.62, s['E'])
        gen.run(1.62, 2.232, s['D'])
        gen.run(3.24, 3.852, s['C#'])
        gen.run(3.852, 4.248, s['A'])
        gen.run(4.248, 4.86, s['B'])
        gen.run(4.86, 5.256, s['D'])
        gen.run(5.256, 5.868, s['E'])
        gen.run(5.868, 6.858, s['F#'])
        gen.run(8.496, 8.874, s['D'])
        gen.run(8.874, 9.504, s['E'])
        gen.run(9.504, 10.494, s['F#'])
        gen.run(10.494, 11.124, s['A'])
        gen.run(11.124, 11.754, s['B'])
        gen.run(11.754, 12.132, s['C#'])
        gen.run(12.132, 12.744, s['D'])
        gen.run(12.744, 13.752, s['C#'])
        gen.run(14.364, 15.372, s['B'])
        gen.run(15.372, 16.38, s['G#-1'])
        gen.run(16.38, 18.0, s['A'])

    if args.no_reverb is False:
        print("Reverb")
        d = splat.filters.reverb_delays()
        splat.filters.reverb(gen.frag, d)

    if args.save_as:
        print("Saving as {}".format(args.save_as))
        padded = splat.data.Fragment(2, args.rate, (gen.frag.duration + 1.0))
        padded.mix(gen.frag, 0.5)
        padded.save(args.save_as)
Ejemplo n.º 20
0
def main(argv):
    parser = argparse.ArgumentParser("Dew Drop tune using irrational rythm.")
    parser.add_argument('--save-as', default='dew_drop.wav',
                        help="output file name, leave blank to not save")
    parser.add_argument('--no-reverb', action='store_true',
                        help="do not generate the reverb effect")
    parser.add_argument('--dump-scale', action='store_true',
                        help="dump the frequency of the notes in the scale")
    parser.add_argument('--rate', type=int, default=48000,
                        help="sample rate")
    parser.add_argument('--voices', default='123',
                        help="voices to run (string with 1, 2 and 3)")
    args = parser.parse_args(argv[1:])

    gen = splat.gen.OvertonesGenerator(splat.data.Fragment(2, args.rate, 18.0))
    s = splat.scales.LogScale(fund=440.0)

    if args.dump_scale is True:
        # print frequencies of all the notes of the scale over 3 octaves
        for octave in range(-2, 1):
            for note in ['A', 'B', 'C#', 'D', 'E', 'F#', 'G#']:
                note_name = "{0}{1}".format(note, octave)
                print('{0:4s}: {1:.3f}'.format(note_name, s[note_name]))
            print("-------------")

    if '1' in args.voices:
        print("Voice 1")
        gen.levels = (dB(-2.5), dB(-2.5))
        gen.ot_decexp(2.0)
        set_fade(gen, 0.04)
        gen.run(0.0, 1.62, s['A-2'])
        gen.run(1.62, 3.24, s['D-2'])
        gen.run(3.24, 4.248, s['F#-2'])
        gen.run(4.248, 5.868, s['E-2'])
        gen.run(5.868, 6.858, s['D-2'])
        gen.run(6.858, 8.496, s['F#-2'])
        gen.run(8.496, 9.504, s['E-2'])
        gen.run(9.504, 11.124, s['B-2'])
        gen.run(11.124, 12.744, s['E-2'])
        gen.run(12.744, 13.752, s['A-2'])
        gen.run(13.752, 14.742, s['D-2'])
        gen.run(14.742, 16.38, s['E-2'])
        gen.run(16.38, 18.0, s['A-2'])

    if '2' in args.voices:
        print("Voice 2")
        gen.levels = (dB(0.0), dB(-2.5))
        gen.ot_decexp(1.6)
        set_fade(gen, 0.02)
        gen.run(0.0, 1.008, s['C#-1'])
        gen.run(1.008, 1.62, s['E-1'])
        gen.run(1.62, 2.628, s['A-1'])
        gen.run(2.628, 3.24, s['F#-2'])
        gen.run(3.24, 3.852, s['A-1'])
        gen.run(3.852, 4.248, s['C#-1'])
        gen.run(4.248, 4.86, s['B-1'])
        gen.run(4.86, 5.868, s['D-1'])
        gen.run(5.868, 6.858, s['B-1'])
        gen.run(6.858, 7.848, s['C#-1'])
        gen.run(7.848, 8.496, s['A-1'])
        gen.run(8.496, 9.504, s['G#-2'])
        gen.run(9.504, 10.494, s['D-1'])
        gen.run(10.494, 11.124, s['F#-1'])
        gen.run(11.124, 11.754, s['B-1'])
        gen.run(11.754, 12.744, s['D-1'])
        gen.run(12.744, 13.752, s['E-1'])
        gen.run(13.752, 14.364, s['F#-1'])
        gen.run(14.364, 15.372, s['A-1'])
        gen.run(15.372, 16.38, s['D-1'])
        gen.run(16.38, 18.0, s['C#-1'])

    if '3' in args.voices:
        print("Voice 3")
        gen.levels = (dB(-2.5), dB(0.0))
        gen.ot_decexp(1.2)
        set_fade(gen, 0.015)
        gen.run(0.0, 0.612, s['E'])
        gen.run(0.612, 1.008, s['D'])
        gen.run(1.008, 1.62, s['E'])
        gen.run(1.62, 2.232, s['D'])
        gen.run(3.24, 3.852, s['C#'])
        gen.run(3.852, 4.248, s['A'])
        gen.run(4.248, 4.86, s['B'])
        gen.run(4.86, 5.256, s['D'])
        gen.run(5.256, 5.868, s['E'])
        gen.run(5.868, 6.858, s['F#'])
        gen.run(8.496, 8.874, s['D'])
        gen.run(8.874, 9.504, s['E'])
        gen.run(9.504, 10.494, s['F#'])
        gen.run(10.494, 11.124, s['A'])
        gen.run(11.124, 11.754, s['B'])
        gen.run(11.754, 12.132, s['C#'])
        gen.run(12.132, 12.744, s['D'])
        gen.run(12.744, 13.752, s['C#'])
        gen.run(14.364, 15.372, s['B'])
        gen.run(15.372, 16.38, s['G#-1'])
        gen.run(16.38, 18.0, s['A'])

    if args.no_reverb is False:
        print("Reverb")
        d = splat.filters.reverb_delays()
        splat.filters.reverb(gen.frag, d)

    if args.save_as:
        print("Saving as {}".format(args.save_as))
        padded = splat.data.Fragment(2, args.rate, (gen.frag.duration + 1.0))
        padded.mix(gen.frag, 0.5)
        padded.save(args.save_as)
Ejemplo n.º 21
0
 def test_overtones_gen(self):
     """gen.OvertonesGenerator"""
     gen = splat.gen.OvertonesGenerator()
     gen.ot_decexp(1.0)
     gen.run(0.0, 1.0, 1000.0, 0.1)
     self.assert_md5(gen.frag, 'ee045e012673ff7ed4ab9bd590b57368')
Ejemplo n.º 22
0
def run_tests(freq=123.45,
              duration=30.0,
              phase=23.456,
              pts=None,
              overtones=None,
              verbose=False):
    if pts is None:
        pts = [0.0, 0.2, 0.234, 0.456, 0.45602, 0.7124, 0.89, 0.90001]
    if overtones is None:
        overtones = [(1.0, 0.0, 0.45), (2.58, 12.345, 0.45), (200.0, 0.0, 1.0)]

    cases = []

    # -------------------------------------------------------------------------

    frag = splat.data.Fragment(channels=1)
    gen = splat.gen.SineGenerator(frag=frag)
    gen.run(0.0, duration, freq, phase)
    frag.save('sine-{}.wav'.format(splat.SAMPLE_WIDTH), normalize=False)
    cases.append('sine')

    if verbose:
        print('sine')
    for t in pts:
        t = duration * t
        n = frag.s2n(t)
        t = float(n) / frag.rate
        st = 2 * cmath.pi * freq * (t + phase)
        y1 = frag[n][0]
        y2 = math.sin(st)
        delta = abs(y2 - y1)
        if delta != 0.0:
            delta_dB = "{:.3f}".format(splat.lin2dB(delta))
        else:
            delta_dB = 'infinity'
        if verbose:
            print(t, y1, y2, delta_dB)

    # -------------------------------------------------------------------------

    frag = splat.data.Fragment(channels=1)
    gen = splat.gen.OvertonesGenerator(frag=frag)
    gen.overtones = overtones
    gen.run(0.0, duration, freq)
    frag.save('overtones-{}.wav'.format(splat.SAMPLE_WIDTH), normalize=False)
    cases.append('overtones')

    max_ratio = frag.rate / 2.0 / freq
    ot_clipped = []
    for ot in gen.overtones:
        if ot[0] < max_ratio:
            ot_clipped.append(ot)

    if verbose:
        print('overtones')
    for t in pts:
        t = duration * t
        n = frag.s2n(t)
        y1 = frag[n][0]
        y2 = sum(a * math.sin(2 * cmath.pi * freq * r * (t + ph))
                 for r, ph, a in ot_clipped)
        delta = abs(y2 - y1)
        if delta != 0.0:
            delta_dB = "{:.3f}".format(splat.lin2dB(delta))
        else:
            delta_dB = 'infinity'
        if verbose:
            print(t, y1, y2, delta_dB)

    # -------------------------------------------------------------------------

    duration = 1.0
    sig = splat.data.Fragment(channels=1)
    splat.gen.TriangleGenerator(frag=sig).run(0.0, duration, 12.0, levels=0.5)
    sig.offset(0.5)

    mod = splat.data.Fragment(channels=1)
    splat.gen.TriangleGenerator(frag=mod).run(0.0, duration, 4.0, levels=0.002)
    mod.offset(0.5)

    frag = splat.data.Fragment()
    splat.gen.SineGenerator(frag=frag).run(0.0,
                                           duration,
                                           456.0,
                                           levels=sig,
                                           phase=lambda x: math.sin(x))
    frag.save('sine-signal-{}.wav'.format(splat.SAMPLE_WIDTH), normalize=False)
    cases.append('sine-signal')

    frag = splat.data.Fragment()
    gen = splat.gen.OvertonesGenerator(frag=frag)
    gen.overtones = overtones
    gen.run(0.0, duration, 456.0, levels=sig)
    frag.save('overtones-mixed1-{}.wav'.format(splat.SAMPLE_WIDTH),
              normalize=False)
    cases.append('overtones-mixed1')

    frag = splat.data.Fragment()
    gen = splat.gen.OvertonesGenerator(frag=frag)
    gen.overtones = overtones
    gen.run(0.0, duration, 456.0, levels=sig, phase=mod)
    frag.save('overtones-mixed2-{}.wav'.format(splat.SAMPLE_WIDTH),
              normalize=False)
    cases.append('overtones-mixed2')

    sig2 = splat.data.Fragment(channels=1)
    splat.gen.TriangleGenerator(frag=sig2).run(0.0, duration, 1.8, levels=0.1)
    sig2.offset(-sig2.get_peak()[0]['min'])
    overtones.append((0.54, 0.0, sig2))

    frag = splat.data.Fragment()
    gen = splat.gen.OvertonesGenerator(frag=frag)
    gen.overtones = overtones
    gen.run(0.0, duration, 456.0, levels=sig, phase=mod)
    frag.save('overtones-signal-{}.wav'.format(splat.SAMPLE_WIDTH),
              normalize=False)
    cases.append('overtones-signal')

    frag = splat.data.Fragment()
    gen = splat.gen.SineGenerator(frag=frag)
    gen.run(0.0, 5.678, 1234.56, levels=dB(-3))
    ratio = 1.987
    new_len = int(len(frag) * ratio)
    rem = new_len % 4
    if rem:
        new_len -= rem
    else:
        new_len -= 4
    frag.resample(ratio=ratio)
    frag.resize(length=new_len)
    frag.save('resample-float-{}.wav'.format(splat.SAMPLE_WIDTH))
    cases.append('resample-float')

    frag = splat.data.Fragment()
    gen = splat.gen.SineGenerator(frag=frag)
    gen.run(0.0, 5.678, 1234.56, levels=dB(-3))
    ratio = 1.987
    frag.resample(ratio=lambda x: ratio)
    frag.save('resample-signal-{}.wav'.format(splat.SAMPLE_WIDTH))
    cases.append('resample-signal')

    return cases