# -*- coding: utf-8 -*-
"""
Éditeur de Spyder

Ceci est un script temporaire.
"""
import math
import random
import numpy as np
import scipy.io.wavfile as wavfile

sr = 44100
signal_length = sr
silence_length = sr//2
delta = signal_length + silence_length

nb_X = 5

def generate(name, frq, inharmonicity, partials):
    partials2 = [math.pow(10, p/20) for p in partials]
    
    level = 30000 / sum(partials2)
    
    wav = np.zeros(2*signal_length+silence_length+delta*nb_X, dtype = np.int16)
    
    for t in range(signal_length):
        s = 0
        maxi = 0
        for p in range(len(partials)):
            s += partials2[p] * math.sin(2*math.pi*p*frq*t/sr)
        
        wav[t] = round(s * level)
        
        s = 0
        maxi = 0
        for p in range(len(partials)):
            s += partials2[p] * math.sin(2*math.pi*p*frq*t/sr
                          * math.sqrt(1+inharmonicity*p*p)
                          / math.sqrt(1+inharmonicity))
        
        wav[t+delta] = round(s * level)
        
    name = name + "-"
    for i in range(2, 2+nb_X):
        if random.randint(0,1) == 0:
            name = name + "A"
            wav[delta*i:delta*i+signal_length] = wav[0:signal_length]
        else:
            name = name + "B"
            wav[delta*i:delta*i+signal_length] = \
                wav[delta+0:delta+signal_length]
                
            
    
    wavfile.write("D:\\" + name + ".wav", sr, wav)
    print (name, "done")
    
    
generate ("A0", 27.5, 0.00006,
          [-53.8, -42.8, -23.6, -27.5, -64.4, -24.3,
           -30.5, -71.7, -36.6, -32.2, -30.1, -30.4,
           -31.4, -33.9, -39.3] )
    
generate ("A1", 55.0, 0.00006,
          [-44.5, -16.0, -21.0, -23.7, -30.5])

generate ("A2", 110.0, 0.0001,
          [-15.2, -29.7, -26.2, -25.7, -35.6])

generate ("A3", 220.0, 0.0003,
          [-26.2, -56.1, -66.8, -43.1, -66.5])

generate ("A4", 440.0, 0.0006,
          [-28.9, -31.1, -42.4])

generate ("A5", 880.0, 0.0012,
          [-45.8, -54.5])

generate ("A6", 1960.0, 0.006,
          [-54.1, -62.7])

generate ("A0-0003", 27.5, 0.0003,
          [-53.8, -42.8, -23.6, -27.5, -64.4, -24.3,
           -30.5, -71.7, -36.6, -32.2, -30.1, -30.4,
           -31.4, -33.9, -39.3] )
