forked from Vocab-Apps/anki-hyper-tts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvoice.py
91 lines (69 loc) · 2.26 KB
/
voice.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import sys
import abc
constants = __import__('constants', globals(), locals(), [], sys._addon_import_level_base)
languages = __import__('languages', globals(), locals(), [], sys._addon_import_level_base)
class VoiceBase(abc.ABC):
"""
abstract base class which defines all the mandatory properties
"""
@abc.abstractproperty
def name():
pass
@abc.abstractproperty
def gender() -> constants.Gender:
pass
@abc.abstractproperty
def language() -> languages.AudioLanguage:
pass
@abc.abstractproperty
def service():
pass
@abc.abstractproperty
def voice_key():
pass
@abc.abstractproperty
def options():
pass
def serialize(self):
return {
'name': self.name,
'gender': self.gender.name,
'language': self.language.name,
'service': self.service.name,
'voice_key': self.voice_key
}
def __str__(self):
return f'{self.language.audio_lang_name}, {self.gender.name}, {self.name}, {self.service.name}'
def __eq__(self, other):
return self.service.name == other.service.name and self.voice_key == other.voice_key
class Voice(VoiceBase):
"""
this basic implementation can be used by services which don't have a particular requirement
"""
def __init__(self, name, gender, language, service, voice_key, options):
self._name = name
self._gender = gender
self._language = language
self._service = service
self._voice_key = voice_key
self._options = options
def _get_name(self):
return self._name
def _get_gender(self):
return self._gender
def _get_language(self):
return self._language
def _get_service(self):
return self._service
def _get_voice_key(self):
return self._voice_key
def _get_options(self):
return self._options
def __repr__(self):
return f'{self.service} {self.name}, {self.language}'
name = property(fget=_get_name)
gender = property(fget=_get_gender)
language = property(fget=_get_language)
service = property(fget=_get_service)
voice_key = property(fget=_get_voice_key)
options = property(fget=_get_options)