Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.28 KB | None | 0 0
  1. from pydub import AudioSegment
  2.  
  3. samples = {1 : "один",
  4. 2 : "два",
  5. 3 : "три",
  6. 4 : "четыре",
  7. 5 : "пять",
  8. 6 : "шесть",
  9. 7 : "семь",
  10. 8 : "восемь",
  11. 9 : "девять",
  12. 10 : "десять",
  13. 11 : "одиннадцать",
  14. 12 : "двенадцать",
  15. 13 : "тринадцать",
  16. 14 : "четырнадцать",
  17. 15 : "пятнадцать",
  18. 16 : "шестнадцать",
  19. 17 : "семнадцать",
  20. 18 : "восемнадцать",
  21. 19 : "девятнадцать",
  22. 20 : "двадцать",
  23. 30 : "тридцать",
  24. 40 : "сорок",
  25. 50 : "пятьдесят",
  26. 60 : "шестьдесят",
  27. 70 : "семьдесят",
  28. 80 : "восемдесят",
  29. 90 : "девяносто",
  30. 100 : "сто",
  31. 200 : "двести",
  32. 300 : "триста",
  33. 400 : "четыреста",
  34. 500 : "пятьсот",
  35. 600 : "шестьсот",
  36. 700 : "семьсот",
  37. 800 : "восемьсот",
  38. 900 : "девятьсот",
  39. "odna" : "одна",
  40. "dve" : "две"
  41. }
  42.  
  43. manuls = ["манулов", "манул", "манула"] # 0 - родительный множ, 1 - именительный ед, 2 - родительный ед
  44. thousands = ["тысяч", "тысяча", "тысячи"] # 0 - родительный множ, 1 - именительный ед, 2 - родительный ед
  45.  
  46. tts = {samples[i] : None for i in samples}
  47. tts.update({i : None for i in manuls})
  48. tts.update({i : None for i in thousands})
  49. stn = {samples[i] : i for i in samples}
  50. stn.update({"манула" : "manula", "манулов" : "manulov", "манул" : "manul", "тысяч" : "tysach", "тысяча" : "tysacha", "тысячи" : "tysachi"})
  51.  
  52. def word2sample(word):
  53. return tts[word]
  54.  
  55. def hundreds(n):
  56. speech = ""
  57. if n // 100 > 0:
  58. speech = speech + samples[n // 100 * 100] + ' '
  59. if (n // 10 % 10 * 10 + n % 10) == 0:
  60. return speech
  61. if n // 10 % 10 * 10 + n % 10 < 20:
  62. speech = speech + samples[n // 10 % 10 * 10 + n % 10] + ' '
  63. else:
  64. speech = speech + samples[n // 10 % 10 * 10] + ' '
  65. if n % 10 > 0:
  66. speech = speech + samples[n % 10] + ' '
  67. return speech
  68.  
  69. def hundreds_th(n):
  70. speech = ""
  71. if n // 100 > 0:
  72. speech = speech + samples[n // 100 * 100] + ' '
  73. if (n // 10 % 10 * 10 + n % 10) == 0:
  74. return speech
  75. if n // 10 % 10 * 10 + n % 10 < 20:
  76. if n // 10 % 10 * 10 + n % 10 == 1:
  77. pass
  78. elif n // 10 % 10 * 10 + n % 10 == 2:
  79. speech = speech + samples["dve"] + ' '
  80. else:
  81. speech = speech + samples[n // 10 % 10 * 10 + n % 10] + ' '
  82. else:
  83. speech = speech + samples[n // 10 % 10 * 10] + ' '
  84. if n % 10 > 0:
  85. if n % 10 == 1:
  86. speech = speech + samples["odna"] + ' '
  87. elif n % 10 == 2:
  88. speech = speech + samples["dve"] + ' '
  89. else:
  90. speech = speech + samples[n % 10] + ' '
  91. return speech
  92.  
  93. def ending(n): # 0 - родительный множ, 1 - именительный ед, 2 - родительный ед
  94. if 4 < n // 10 % 10 * 10 + n % 10 < 20:
  95. return 0
  96. elif n % 10 == 1:
  97. return 1
  98. elif 0 < n % 10 < 5:
  99. return 2
  100. else:
  101. return 0
  102.  
  103. def ntt(n):
  104. speech = ""
  105. speech = speech + hundreds(n % 1000)
  106. speech = speech + manuls[ending(n)] + ' '
  107. n //= 1000
  108. if n == 0:
  109. return speech
  110. speech2 = hundreds_th(n % 1000) + thousands[ending(n)] + ' '
  111. return speech2 + speech
  112.  
  113. def load_samples():
  114. print("Loading samples...", end = '')
  115. for i in tts:
  116. tts[i] = AudioSegment.from_wav(f"samples/{stn[i]}.wav")
  117. print("complete!")
  118.  
  119. def ttts(text):
  120. wave = AudioSegment.empty()
  121. for word in text.split():
  122. wave = wave + word2sample(word)
  123. wave.export(text + ".wav", format="wav")
  124.  
  125. load_samples()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement