Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from pydub import AudioSegment
- samples = {1 : "один",
- 2 : "два",
- 3 : "три",
- 4 : "четыре",
- 5 : "пять",
- 6 : "шесть",
- 7 : "семь",
- 8 : "восемь",
- 9 : "девять",
- 10 : "десять",
- 11 : "одиннадцать",
- 12 : "двенадцать",
- 13 : "тринадцать",
- 14 : "четырнадцать",
- 15 : "пятнадцать",
- 16 : "шестнадцать",
- 17 : "семнадцать",
- 18 : "восемнадцать",
- 19 : "девятнадцать",
- 20 : "двадцать",
- 30 : "тридцать",
- 40 : "сорок",
- 50 : "пятьдесят",
- 60 : "шестьдесят",
- 70 : "семьдесят",
- 80 : "восемдесят",
- 90 : "девяносто",
- 100 : "сто",
- 200 : "двести",
- 300 : "триста",
- 400 : "четыреста",
- 500 : "пятьсот",
- 600 : "шестьсот",
- 700 : "семьсот",
- 800 : "восемьсот",
- 900 : "девятьсот",
- "odna" : "одна",
- "dve" : "две"
- }
- manuls = ["манулов", "манул", "манула"] # 0 - родительный множ, 1 - именительный ед, 2 - родительный ед
- thousands = ["тысяч", "тысяча", "тысячи"] # 0 - родительный множ, 1 - именительный ед, 2 - родительный ед
- tts = {samples[i] : None for i in samples}
- tts.update({i : None for i in manuls})
- tts.update({i : None for i in thousands})
- stn = {samples[i] : i for i in samples}
- stn.update({"манула" : "manula", "манулов" : "manulov", "манул" : "manul", "тысяч" : "tysach", "тысяча" : "tysacha", "тысячи" : "tysachi"})
- def word2sample(word):
- return tts[word]
- def hundreds(n):
- speech = ""
- if n // 100 > 0:
- speech = speech + samples[n // 100 * 100] + ' '
- if (n // 10 % 10 * 10 + n % 10) == 0:
- return speech
- if n // 10 % 10 * 10 + n % 10 < 20:
- speech = speech + samples[n // 10 % 10 * 10 + n % 10] + ' '
- else:
- speech = speech + samples[n // 10 % 10 * 10] + ' '
- if n % 10 > 0:
- speech = speech + samples[n % 10] + ' '
- return speech
- def hundreds_th(n):
- speech = ""
- if n // 100 > 0:
- speech = speech + samples[n // 100 * 100] + ' '
- if (n // 10 % 10 * 10 + n % 10) == 0:
- return speech
- if n // 10 % 10 * 10 + n % 10 < 20:
- if n // 10 % 10 * 10 + n % 10 == 1:
- pass
- elif n // 10 % 10 * 10 + n % 10 == 2:
- speech = speech + samples["dve"] + ' '
- else:
- speech = speech + samples[n // 10 % 10 * 10 + n % 10] + ' '
- else:
- speech = speech + samples[n // 10 % 10 * 10] + ' '
- if n % 10 > 0:
- if n % 10 == 1:
- speech = speech + samples["odna"] + ' '
- elif n % 10 == 2:
- speech = speech + samples["dve"] + ' '
- else:
- speech = speech + samples[n % 10] + ' '
- return speech
- def ending(n): # 0 - родительный множ, 1 - именительный ед, 2 - родительный ед
- if 4 < n // 10 % 10 * 10 + n % 10 < 20:
- return 0
- elif n % 10 == 1:
- return 1
- elif 0 < n % 10 < 5:
- return 2
- else:
- return 0
- def ntt(n):
- speech = ""
- speech = speech + hundreds(n % 1000)
- speech = speech + manuls[ending(n)] + ' '
- n //= 1000
- if n == 0:
- return speech
- speech2 = hundreds_th(n % 1000) + thousands[ending(n)] + ' '
- return speech2 + speech
- def load_samples():
- print("Loading samples...", end = '')
- for i in tts:
- tts[i] = AudioSegment.from_wav(f"samples/{stn[i]}.wav")
- print("complete!")
- def ttts(text):
- wave = AudioSegment.empty()
- for word in text.split():
- wave = wave + word2sample(word)
- wave.export(text + ".wav", format="wav")
- load_samples()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement