audex 1.0.7a3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. audex/__init__.py +9 -0
  2. audex/__main__.py +7 -0
  3. audex/cli/__init__.py +189 -0
  4. audex/cli/apis/__init__.py +12 -0
  5. audex/cli/apis/init/__init__.py +34 -0
  6. audex/cli/apis/init/gencfg.py +130 -0
  7. audex/cli/apis/init/setup.py +330 -0
  8. audex/cli/apis/init/vprgroup.py +125 -0
  9. audex/cli/apis/serve.py +141 -0
  10. audex/cli/args.py +356 -0
  11. audex/cli/exceptions.py +44 -0
  12. audex/cli/helper/__init__.py +0 -0
  13. audex/cli/helper/ansi.py +193 -0
  14. audex/cli/helper/display.py +288 -0
  15. audex/config/__init__.py +64 -0
  16. audex/config/core/__init__.py +30 -0
  17. audex/config/core/app.py +29 -0
  18. audex/config/core/audio.py +45 -0
  19. audex/config/core/logging.py +163 -0
  20. audex/config/core/session.py +11 -0
  21. audex/config/helper/__init__.py +1 -0
  22. audex/config/helper/client/__init__.py +1 -0
  23. audex/config/helper/client/http.py +28 -0
  24. audex/config/helper/client/websocket.py +21 -0
  25. audex/config/helper/provider/__init__.py +1 -0
  26. audex/config/helper/provider/dashscope.py +13 -0
  27. audex/config/helper/provider/unisound.py +18 -0
  28. audex/config/helper/provider/xfyun.py +23 -0
  29. audex/config/infrastructure/__init__.py +31 -0
  30. audex/config/infrastructure/cache.py +51 -0
  31. audex/config/infrastructure/database.py +48 -0
  32. audex/config/infrastructure/recorder.py +32 -0
  33. audex/config/infrastructure/store.py +19 -0
  34. audex/config/provider/__init__.py +18 -0
  35. audex/config/provider/transcription.py +109 -0
  36. audex/config/provider/vpr.py +99 -0
  37. audex/container.py +40 -0
  38. audex/entity/__init__.py +468 -0
  39. audex/entity/doctor.py +109 -0
  40. audex/entity/doctor.pyi +51 -0
  41. audex/entity/fields.py +401 -0
  42. audex/entity/segment.py +115 -0
  43. audex/entity/segment.pyi +38 -0
  44. audex/entity/session.py +133 -0
  45. audex/entity/session.pyi +47 -0
  46. audex/entity/utterance.py +142 -0
  47. audex/entity/utterance.pyi +48 -0
  48. audex/entity/vp.py +68 -0
  49. audex/entity/vp.pyi +35 -0
  50. audex/exceptions.py +157 -0
  51. audex/filters/__init__.py +692 -0
  52. audex/filters/generated/__init__.py +21 -0
  53. audex/filters/generated/doctor.py +987 -0
  54. audex/filters/generated/segment.py +723 -0
  55. audex/filters/generated/session.py +978 -0
  56. audex/filters/generated/utterance.py +939 -0
  57. audex/filters/generated/vp.py +815 -0
  58. audex/helper/__init__.py +1 -0
  59. audex/helper/hash.py +33 -0
  60. audex/helper/mixin.py +65 -0
  61. audex/helper/net.py +19 -0
  62. audex/helper/settings/__init__.py +830 -0
  63. audex/helper/settings/fields.py +317 -0
  64. audex/helper/stream.py +153 -0
  65. audex/injectors/__init__.py +1 -0
  66. audex/injectors/config.py +12 -0
  67. audex/injectors/lifespan.py +7 -0
  68. audex/lib/__init__.py +1 -0
  69. audex/lib/cache/__init__.py +383 -0
  70. audex/lib/cache/inmemory.py +513 -0
  71. audex/lib/database/__init__.py +83 -0
  72. audex/lib/database/sqlite.py +406 -0
  73. audex/lib/exporter.py +189 -0
  74. audex/lib/injectors/__init__.py +1 -0
  75. audex/lib/injectors/cache.py +25 -0
  76. audex/lib/injectors/container.py +47 -0
  77. audex/lib/injectors/exporter.py +26 -0
  78. audex/lib/injectors/recorder.py +33 -0
  79. audex/lib/injectors/server.py +17 -0
  80. audex/lib/injectors/session.py +18 -0
  81. audex/lib/injectors/sqlite.py +24 -0
  82. audex/lib/injectors/store.py +13 -0
  83. audex/lib/injectors/transcription.py +42 -0
  84. audex/lib/injectors/usb.py +12 -0
  85. audex/lib/injectors/vpr.py +65 -0
  86. audex/lib/injectors/wifi.py +7 -0
  87. audex/lib/recorder.py +844 -0
  88. audex/lib/repos/__init__.py +149 -0
  89. audex/lib/repos/container.py +23 -0
  90. audex/lib/repos/database/__init__.py +1 -0
  91. audex/lib/repos/database/sqlite.py +672 -0
  92. audex/lib/repos/decorators.py +74 -0
  93. audex/lib/repos/doctor.py +286 -0
  94. audex/lib/repos/segment.py +302 -0
  95. audex/lib/repos/session.py +285 -0
  96. audex/lib/repos/tables/__init__.py +70 -0
  97. audex/lib/repos/tables/doctor.py +137 -0
  98. audex/lib/repos/tables/segment.py +113 -0
  99. audex/lib/repos/tables/session.py +140 -0
  100. audex/lib/repos/tables/utterance.py +131 -0
  101. audex/lib/repos/tables/vp.py +102 -0
  102. audex/lib/repos/utterance.py +288 -0
  103. audex/lib/repos/vp.py +286 -0
  104. audex/lib/restful.py +251 -0
  105. audex/lib/server/__init__.py +97 -0
  106. audex/lib/server/auth.py +98 -0
  107. audex/lib/server/handlers.py +248 -0
  108. audex/lib/server/templates/index.html.j2 +226 -0
  109. audex/lib/server/templates/login.html.j2 +111 -0
  110. audex/lib/server/templates/static/script.js +68 -0
  111. audex/lib/server/templates/static/style.css +579 -0
  112. audex/lib/server/types.py +123 -0
  113. audex/lib/session.py +503 -0
  114. audex/lib/store/__init__.py +238 -0
  115. audex/lib/store/localfile.py +411 -0
  116. audex/lib/transcription/__init__.py +33 -0
  117. audex/lib/transcription/dashscope.py +525 -0
  118. audex/lib/transcription/events.py +62 -0
  119. audex/lib/usb.py +554 -0
  120. audex/lib/vpr/__init__.py +38 -0
  121. audex/lib/vpr/unisound/__init__.py +185 -0
  122. audex/lib/vpr/unisound/types.py +469 -0
  123. audex/lib/vpr/xfyun/__init__.py +483 -0
  124. audex/lib/vpr/xfyun/types.py +679 -0
  125. audex/lib/websocket/__init__.py +8 -0
  126. audex/lib/websocket/connection.py +485 -0
  127. audex/lib/websocket/pool.py +991 -0
  128. audex/lib/wifi.py +1146 -0
  129. audex/lifespan.py +75 -0
  130. audex/service/__init__.py +27 -0
  131. audex/service/decorators.py +73 -0
  132. audex/service/doctor/__init__.py +652 -0
  133. audex/service/doctor/const.py +36 -0
  134. audex/service/doctor/exceptions.py +96 -0
  135. audex/service/doctor/types.py +54 -0
  136. audex/service/export/__init__.py +236 -0
  137. audex/service/export/const.py +17 -0
  138. audex/service/export/exceptions.py +34 -0
  139. audex/service/export/types.py +21 -0
  140. audex/service/injectors/__init__.py +1 -0
  141. audex/service/injectors/container.py +53 -0
  142. audex/service/injectors/doctor.py +34 -0
  143. audex/service/injectors/export.py +27 -0
  144. audex/service/injectors/session.py +49 -0
  145. audex/service/session/__init__.py +754 -0
  146. audex/service/session/const.py +34 -0
  147. audex/service/session/exceptions.py +67 -0
  148. audex/service/session/types.py +91 -0
  149. audex/types.py +39 -0
  150. audex/utils.py +287 -0
  151. audex/valueobj/__init__.py +81 -0
  152. audex/valueobj/common/__init__.py +1 -0
  153. audex/valueobj/common/auth.py +84 -0
  154. audex/valueobj/common/email.py +16 -0
  155. audex/valueobj/common/ops.py +22 -0
  156. audex/valueobj/common/phone.py +84 -0
  157. audex/valueobj/common/version.py +72 -0
  158. audex/valueobj/session.py +19 -0
  159. audex/valueobj/utterance.py +15 -0
  160. audex/view/__init__.py +51 -0
  161. audex/view/container.py +17 -0
  162. audex/view/decorators.py +303 -0
  163. audex/view/pages/__init__.py +1 -0
  164. audex/view/pages/dashboard/__init__.py +286 -0
  165. audex/view/pages/dashboard/wifi.py +407 -0
  166. audex/view/pages/login.py +110 -0
  167. audex/view/pages/recording.py +348 -0
  168. audex/view/pages/register.py +202 -0
  169. audex/view/pages/sessions/__init__.py +196 -0
  170. audex/view/pages/sessions/details.py +224 -0
  171. audex/view/pages/sessions/export.py +443 -0
  172. audex/view/pages/settings.py +374 -0
  173. audex/view/pages/voiceprint/__init__.py +1 -0
  174. audex/view/pages/voiceprint/enroll.py +195 -0
  175. audex/view/pages/voiceprint/update.py +195 -0
  176. audex/view/static/css/dashboard.css +452 -0
  177. audex/view/static/css/glass.css +22 -0
  178. audex/view/static/css/global.css +541 -0
  179. audex/view/static/css/login.css +386 -0
  180. audex/view/static/css/recording.css +439 -0
  181. audex/view/static/css/register.css +293 -0
  182. audex/view/static/css/sessions/styles.css +501 -0
  183. audex/view/static/css/settings.css +186 -0
  184. audex/view/static/css/voiceprint/enroll.css +43 -0
  185. audex/view/static/css/voiceprint/styles.css +209 -0
  186. audex/view/static/css/voiceprint/update.css +44 -0
  187. audex/view/static/images/logo.svg +95 -0
  188. audex/view/static/js/recording.js +42 -0
  189. audex-1.0.7a3.dist-info/METADATA +361 -0
  190. audex-1.0.7a3.dist-info/RECORD +192 -0
  191. audex-1.0.7a3.dist-info/WHEEL +4 -0
  192. audex-1.0.7a3.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,209 @@
1
+ @import "../global.css";
2
+ @import "../glass.css";
3
+
4
+ /* ==================== Background ==================== */
5
+ .bg-white {
6
+ background: #ffffff !important;
7
+ padding: 40px 60px !important;
8
+ margin: 0 !important;
9
+ box-sizing: border-box !important;
10
+ overflow: visible !important;
11
+ min-height: auto !important;
12
+ height: auto !important;
13
+ }
14
+
15
+ /* ==================== Voiceprint Container ==================== */
16
+ .voiceprint-container {
17
+ position: fixed !important;
18
+ top: 0 !important;
19
+ left: 0 !important;
20
+ right: 0 !important;
21
+ bottom: 0 !important;
22
+ display: flex !important;
23
+ align-items: center !important;
24
+ justify-content: center !important;
25
+ padding: 60px 80px !important;
26
+ padding-top: calc(108px + 30px) !important;
27
+ box-sizing: border-box !important;
28
+ overflow: auto !important;
29
+ background: #ffffff !important;
30
+ }
31
+
32
+ /* ==================== Voiceprint Content ==================== */
33
+ .voiceprint-content {
34
+ display: flex !important;
35
+ gap: 60px !important;
36
+ align-items: center !important;
37
+ max-width: 100% !important;
38
+ width: 100% !important;
39
+ justify-content: center !important;
40
+ }
41
+
42
+ /* ==================== Left: Steps ==================== */
43
+ .voiceprint-steps {
44
+ width: 280px !important;
45
+ flex-shrink: 1 !important;
46
+ min-width: 200px !important;
47
+ }
48
+
49
+ /* ==================== Center: Text ==================== */
50
+ .voiceprint-text {
51
+ flex: 1 !important;
52
+ display: flex !important;
53
+ flex-direction: column !important;
54
+ gap: 1rem !important;
55
+ min-width: 50px !important;
56
+ max-width: 500px !important;
57
+ }
58
+
59
+ /* ==================== Right: Button ==================== */
60
+ .voiceprint-button {
61
+ width: 280px !important;
62
+ flex-shrink: 1 !important;
63
+ min-width: 220px !important;
64
+ display: flex !important;
65
+ flex-direction: column !important;
66
+ align-items: center !important;
67
+ gap: 2rem !important;
68
+ }
69
+
70
+ /* ==================== Timer ==================== */
71
+ .timer {
72
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;
73
+ font-size: 4rem;
74
+ font-weight: 700;
75
+ color: #1f2937;
76
+ letter-spacing: 0.05em;
77
+ text-align: center;
78
+ }
79
+
80
+ /* ==================== Recording Button ==================== */
81
+ .record-button {
82
+ width: 180px !important;
83
+ height: 180px !important;
84
+ border-radius: 50% !important;
85
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
86
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15) !important;
87
+ }
88
+
89
+ .record-button:hover:not(:disabled) {
90
+ transform: scale(1.05);
91
+ }
92
+
93
+ .record-button:active:not(:disabled) {
94
+ transform: scale(0.98);
95
+ }
96
+
97
+ .record-button:disabled {
98
+ opacity: 0.7 !important;
99
+ cursor: not-allowed !important;
100
+ }
101
+
102
+ /* ==================== Recording Rings ==================== */
103
+ @keyframes pulse-ring {
104
+ 0% {
105
+ transform: scale(1);
106
+ opacity: 0.4;
107
+ }
108
+ 100% {
109
+ transform: scale(1.6);
110
+ opacity: 0;
111
+ }
112
+ }
113
+
114
+ .recording-ring {
115
+ position: absolute;
116
+ width: 180px;
117
+ height: 180px;
118
+ border-radius: 50%;
119
+ pointer-events: none;
120
+ background: radial-gradient(
121
+ circle,
122
+ transparent 45%,
123
+ rgba(200, 200, 200, 0.3) 50%,
124
+ rgba(160, 160, 160, 0.15) 55%,
125
+ transparent 60%
126
+ );
127
+ filter: blur(8px);
128
+ animation: pulse-ring 2.4s ease-out infinite;
129
+ }
130
+
131
+ /* ==================== Responsive Design ==================== */
132
+
133
+ @media (max-width: 1400px) {
134
+ .voiceprint-container {
135
+ padding: 40px 60px !important;
136
+ padding-top: calc(108px + 20px) !important;
137
+ }
138
+
139
+ .voiceprint-content {
140
+ gap: 40px !important;
141
+ }
142
+
143
+ .voiceprint-steps {
144
+ width: 240px !important;
145
+ }
146
+
147
+ .voiceprint-button {
148
+ width: 240px !important;
149
+ }
150
+ }
151
+
152
+ @media (max-width: 1200px) {
153
+ .voiceprint-container {
154
+ padding: 30px 40px !important;
155
+ }
156
+
157
+ .voiceprint-content {
158
+ gap: 30px !important;
159
+ }
160
+
161
+ .voiceprint-steps {
162
+ width: 200px !important;
163
+ min-width: 180px !important;
164
+ }
165
+
166
+ .voiceprint-button {
167
+ width: 220px !important;
168
+ min-width: 200px !important;
169
+ }
170
+
171
+ .timer {
172
+ font-size: 3rem !important;
173
+ }
174
+
175
+ .record-button {
176
+ width: 150px !important;
177
+ height: 150px !important;
178
+ }
179
+
180
+ .recording-ring {
181
+ width: 150px !important;
182
+ height: 150px !important;
183
+ }
184
+ }
185
+
186
+ @media (max-width: 768px) {
187
+ .voiceprint-container {
188
+ padding: 20px !important;
189
+ padding-top: calc(108px + 10px) !important;
190
+ }
191
+
192
+ .voiceprint-content {
193
+ gap: 20px !important;
194
+ }
195
+
196
+ .timer {
197
+ font-size: 2.5rem !important;
198
+ }
199
+
200
+ .record-button {
201
+ width: 120px !important;
202
+ height: 120px !important;
203
+ }
204
+
205
+ .recording-ring {
206
+ width: 120px !important;
207
+ height: 120px !important;
208
+ }
209
+ }
@@ -0,0 +1,44 @@
1
+ @import "./styles.css";
2
+
3
+ /* ==================== Update Theme Variables ==================== */
4
+
5
+ :root {
6
+ --color-update-primary: #8b5cf6;
7
+ --color-update-secondary: #7c3aed;
8
+ --color-update-light: #a78bfa;
9
+ }
10
+
11
+ /* Recording button - elegant purple theme */
12
+ .record-button {
13
+ background: linear-gradient(135deg, var(--color-update-primary) 0%, var(--color-update-secondary) 100%) !important;
14
+ box-shadow: 0 8px 32px rgba(139, 92, 246, 0.3),
15
+ 0 4px 16px rgba(124, 58, 237, 0.2),
16
+ inset 0 -2px 8px rgba(0, 0, 0, 0.1) !important;
17
+ }
18
+
19
+ .record-button:hover:not(:disabled) {
20
+ background: linear-gradient(135deg, var(--color-update-light) 0%, var(--color-update-primary) 100%) !important;
21
+ box-shadow: 0 12px 40px rgba(139, 92, 246, 0.4),
22
+ 0 6px 20px rgba(124, 58, 237, 0.25),
23
+ inset 0 -2px 8px rgba(0, 0, 0, 0.1) !important;
24
+ }
25
+
26
+ .record-button:active:not(:disabled) {
27
+ box-shadow: 0 6px 24px rgba(139, 92, 246, 0.35),
28
+ 0 3px 12px rgba(124, 58, 237, 0.2),
29
+ inset 0 2px 8px rgba(0, 0, 0, 0.15) !important;
30
+ }
31
+
32
+ /* Performance mode - pure purple */
33
+ :root[data-theme="performance"] .record-button {
34
+ background: var(--color-update-primary) !important;
35
+ box-shadow: none !important;
36
+ }
37
+
38
+ :root[data-theme="performance"] .record-button:hover:not(:disabled) {
39
+ background: var(--color-update-secondary) !important;
40
+ }
41
+
42
+ :root[data-theme="performance"] .record-button:active:not(:disabled) {
43
+ background: #6d28d9 !important;
44
+ }
@@ -0,0 +1,95 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="120mm"
6
+ height="120.00001mm"
7
+ viewBox="0 0 120 120.00001"
8
+ version="1.1"
9
+ id="svg1"
10
+ inkscape:export-filename="logo.svg"
11
+ inkscape:export-xdpi="108.37333"
12
+ inkscape:export-ydpi="108.37333"
13
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
14
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
15
+ xmlns="http://www.w3.org/2000/svg"
16
+ xmlns:svg="http://www.w3.org/2000/svg">
17
+ <sodipodi:namedview
18
+ id="namedview1"
19
+ pagecolor="#ffffff"
20
+ bordercolor="#000000"
21
+ borderopacity="0.25"
22
+ inkscape:showpageshadow="2"
23
+ inkscape:pageopacity="0.0"
24
+ inkscape:pagecheckerboard="0"
25
+ inkscape:deskcolor="#d1d1d1"
26
+ inkscape:document-units="mm"
27
+ showgrid="false">
28
+ <inkscape:grid
29
+ id="grid5"
30
+ units="mm"
31
+ originx="-39.999999"
32
+ originy="-39.999996"
33
+ spacingx="0.99999998"
34
+ spacingy="1"
35
+ empcolor="#0099e5"
36
+ empopacity="0.30196078"
37
+ color="#0099e5"
38
+ opacity="0.14901961"
39
+ empspacing="5"
40
+ enabled="true"
41
+ visible="false" />
42
+ <inkscape:page
43
+ x="0"
44
+ y="0"
45
+ width="120"
46
+ height="120.00001"
47
+ id="page2"
48
+ margin="0"
49
+ bleed="0" />
50
+ </sodipodi:namedview>
51
+ <defs
52
+ id="defs1" />
53
+ <g
54
+ inkscape:label="Layer 1"
55
+ inkscape:groupmode="layer"
56
+ id="layer1"
57
+ transform="translate(-40,-39.999995)">
58
+ <a
59
+ id="a4"
60
+ transform="translate(-11.424503,-11.98388)">
61
+ <rect
62
+ style="opacity:0;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke-width:7.28718;stroke-dasharray:none"
63
+ id="rect7"
64
+ width="120"
65
+ height="120"
66
+ x="51.424503"
67
+ y="51.983879"
68
+ ry="0" />
69
+ <g
70
+ id="g5-6"
71
+ transform="translate(42.826257,27.443227)" />
72
+ <path
73
+ d="m 111.4245,66.564319 a 49.999952,50.000105 0 0 0 -49.999997,50.000161 49.999952,50.000105 0 0 0 49.999997,50.00015 49.999952,50.000105 0 0 0 50,-50.00015 49.999952,50.000105 0 0 0 -50,-50.000161 z"
74
+ style="fill:#183d4d;fill-opacity:1;fill-rule:evenodd;stroke-width:9.871;stroke-dasharray:none"
75
+ id="path3" />
76
+ <ellipse
77
+ style="fill:#3c5b75;fill-opacity:0.465565;stroke-width:8.34183"
78
+ id="path2"
79
+ cy="116.56448"
80
+ cx="111.42451"
81
+ inkscape:label="path2"
82
+ rx="34.999966"
83
+ ry="35.000072" />
84
+ <rect
85
+ style="fill:#183d4d;fill-opacity:1;fill-rule:evenodd;stroke-width:9.2624;stroke-dasharray:none"
86
+ id="rect6"
87
+ width="15"
88
+ height="20"
89
+ x="103.9245"
90
+ y="57.40313"
91
+ ry="6.0470963"
92
+ rx="7.5" />
93
+ </a>
94
+ </g>
95
+ </svg>
@@ -0,0 +1,42 @@
1
+ let autoScrollEnabled = true;
2
+
3
+ function forceScrollToBottom() {
4
+ if (!autoScrollEnabled) return;
5
+
6
+ const container = document.getElementById("lyrics-container");
7
+ if (container) {
8
+ // Force scroll to bottom multiple ways
9
+ container.scrollTop = container.scrollHeight;
10
+ setTimeout(() => {
11
+ container.scrollTop = container.scrollHeight;
12
+ }, 50);
13
+ }
14
+ }
15
+
16
+ // Watch for DOM changes and auto-scroll
17
+ const observer = new MutationObserver(() => {
18
+ if (autoScrollEnabled) {
19
+ forceScrollToBottom();
20
+ }
21
+ });
22
+
23
+ // Start observing when page loads
24
+ document.addEventListener('DOMContentLoaded', () => {
25
+ const container = document.getElementById("lyrics-container");
26
+ if (container) {
27
+ observer.observe(container, {
28
+ childList: true,
29
+ subtree: true,
30
+ attributes: true,
31
+ characterData: true
32
+ });
33
+ }
34
+ });
35
+
36
+ // Manual scroll to bottom function
37
+ function scrollToBottom() {
38
+ const container = document.getElementById("lyrics-container");
39
+ if (container) {
40
+ container.scrollTop = container.scrollHeight;
41
+ }
42
+ }