#!/usr/bin/env python3

import numpy as np
import sys
from scipy.io import wavfile

დისკ_სიხშირე=44100
ხმა=[]
ხმოვნები={\
'ა':[[200,405,610,815,1020,1225],[-8.6,-15.3,-12.6,-16.6,-13.6,-13.5]],\
'ე':[[200,405,610,815,2455,2660,2865],[-7.7,-6.2,-16.9,-24.3,-22.8,-27.6,-26]],\
'ი':[[200,405,610,2455,2660,3275,3480,3890],[-6.0,-15.9,-44.0,-31.6,-30.6,-34.7,-36.0,-36.8,-29.6]],\
'ო':[[200,405,610,815,1020,1225],[-11,-6.1,-15.2,-15.8,-15.5,-44.6]],\
'უ':[[200,405,610,815,1020,1225],[-3.5,-11.4,-14.5,-30.3,-34.1,-40.2]]\
}


def აჯამე(ხმ,დრო,დისკ):
	სიხ,სიძ=ხმ
	global ხმა
	ხმა=[]
	ბიჯ=0 #ითვლის ბიჯებს, არცთუ გამოუსადეგარია 
	if isinstance(სიხ, list): #ვამოწმებთ არის თუ არა სია
		for x in სიხ:
			#ამპლიტუდა, მოცემული დეციბელებში, არის კვეთა, რომელიც გამოითვლება ფორმულით
			#ა/ბ=10^(დეციბელი/10).
			#ვიღებთ დამრგვალებულს რადგან,
			#არც არის საჭირო იდეალური სიზუსტე და პროგრამაც უფრო სწრაფია.
#			print(სიძ[ბიჯ])			
			ამპლიტუდა=10**(round(float(სიძ[ბიჯ]),1)/10)
			
			#ამას ბევრი ახსნა არ სჭირდება, დამრგვალებული ანალოგიური მიზეზით
			გრადუსი=2*np.pi*np.arange(დისკ*დრო)*round(float(x),1)/დისკ
			#მოკლედ, ხმის სიაში ვაგდებთ სინუსოიდებს გამრავლებული ამპლიტუდაზე
			ხმა.append((np.sin(გრადუსი)*ამპლიტუდა).astype(np.float32))
			ბიჯ+=1
#			print(ბიჯ/len(სიხ)*100,"%")
		#ვჯამავთ სინუსოიდებს სიაში
		ხმა=sum(ხმა)
		
	else:	#ეს არავის ანაღვლებს
		ხმა=(np.sin(2*np.pi*np.arange(სიხ*დრო)*სიხ/დისკ)).astype(np.float32)
		ხმა=np.asarray(ხმა)
	return ხმა

სიტყვა = sys.argv[1]

მდებარეობა='/home/clever/სამუშაო მაგიდა/ხმა-სინთეტიკური'
ნათქვამი=[]
ნაბიჯი=0
დურ=float(sys.argv[2])
for x in სიტყვა:
	print(x)
	გენერირებული=[]
	ხმის_თავი=[]
	ხმის_შუა=[]
	ხმის_ბოლო=[]
	ასო,სიმძ=ხმოვნები[x]
	#ასო=[ყ+ნაბიჯი for ყ in ასო[:2]]
	გასაგზავნი=ასო,სიმძ
	გენერირებული=2*აჯამე(გასაგზავნი,დურ,დისკ_სიხშირე) #ვიძახებთ აჯამვის ფუნქციას

	if ნაბიჯი ==0:		
		ნათქვამი=გენერირებული
	else:
		ზომა=int(len(გენერირებული)/2)
		print(len(ნათქვამი))
		print(ზომა)
		ხმის_თავი=ნათქვამი[:-ზომა]
		ხმის_შუა.append(ნათქვამი[-ზომა:])
		ხმის_შუა.append(გენერირებული[:ზომა])
		print(len(ხმის_შუა[0])," ",len(ხმის_შუა[1]))
		ხმის_ბოლო=გენერირებული[-ზომა:]
		for y in range(ზომა):
			a=20/დურ
			ფორმულა=1/(a/10000*y+1)
			ხმის_შუა[0][y]=ხმის_შუა[0][y]*ფორმულა #რიცხვი გაყოფილი იქსს პლუს ცვლადი
			ხმის_შუა[1][y]=ხმის_შუა[1][y]*(1-ფორმულა)
		ხმის_შუა=np.add(ხმის_შუა[0],ხმის_შუა[1])
		ნათქვამი=ხმის_თავი
		ნათქვამი=np.append(ნათქვამი,ხმის_შუა).astype(np.float32)
		ნათქვამი=np.append(ნათქვამი,ხმის_ბოლო).astype(np.float32)
#		wavfile.write(მდებარეობა+"_"+x,დისკ_სიხშირე,ნათქვამი)


	ნაბიჯი+=1

	#print(len(გენერირებული))

"""for x in სიტყვა:
	წინადადება=[]
	ბგერა=ას.from_wav(მდებარეობა+x)
	წინადადება.append(
"""

გენერირებული=ნათქვამი
wavfile.write(მდებარეობა,დისკ_სიხშირე,გენერირებული)























