1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct StyleCharacteristics {
9 pub speaking_style: SpeakingStyleCategory,
11
12 pub emotional_characteristics: EmotionalCharacteristics,
14
15 pub prosodic_characteristics: ProsodicCharacteristics,
17
18 pub articulation_characteristics: ArticulationCharacteristics,
20
21 pub voice_quality_characteristics: VoiceQualityCharacteristics,
23
24 pub cultural_characteristics: CulturalCharacteristics,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
30pub enum SpeakingStyleCategory {
31 Conversational,
33
34 Formal,
36
37 Storytelling,
39
40 NewsReading,
42
43 Dramatic,
45
46 Whispering,
48
49 Singing,
51
52 Custom(String),
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct EmotionalCharacteristics {
59 pub primary_emotion: EmotionType,
61
62 pub intensity: f32,
64
65 pub stability: f32,
67
68 pub emotional_range: Vec<EmotionType>,
70
71 pub transition_patterns: Vec<EmotionalTransition>,
73}
74
75#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
77pub enum EmotionType {
78 Neutral,
80
81 Happy,
83
84 Sad,
86
87 Angry,
89
90 Fearful,
92
93 Surprised,
95
96 Disgusted,
98
99 Excited,
101
102 Calm,
104
105 Confident,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize)]
111pub struct EmotionalTransition {
112 pub from_emotion: EmotionType,
114
115 pub to_emotion: EmotionType,
117
118 pub duration: f32,
120
121 pub transition_curve: TransitionCurve,
123}
124
125#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
127pub enum TransitionCurve {
128 Linear,
130
131 Exponential,
133
134 Sigmoid,
136
137 Custom,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize)]
143pub struct ProsodicCharacteristics {
144 pub f0_characteristics: F0Characteristics,
146
147 pub rhythm_characteristics: RhythmCharacteristics,
149
150 pub stress_characteristics: StressCharacteristics,
152
153 pub intonation_patterns: Vec<IntonationPattern>,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize)]
159pub struct F0Characteristics {
160 pub mean_f0: f32,
162
163 pub f0_range: (f32, f32),
165
166 pub f0_variability: f32,
168
169 pub contour_patterns: Vec<F0ContourPattern>,
171
172 pub pitch_accent_patterns: Vec<PitchAccentPattern>,
174}
175
176#[derive(Debug, Clone, Serialize, Deserialize)]
178pub struct F0ContourPattern {
179 pub name: String,
181
182 pub contour_points: Vec<(f32, f32)>,
184
185 pub frequency: f32,
187
188 pub context_conditions: Vec<String>,
190}
191
192#[derive(Debug, Clone, Serialize, Deserialize)]
194pub struct PitchAccentPattern {
195 pub accent_type: AccentType,
197
198 pub strength: f32,
200
201 pub timing: AccentTiming,
203
204 pub frequency_characteristics: AccentFrequencyCharacteristics,
206}
207
208#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
210pub enum AccentType {
211 Rising,
213
214 Falling,
216
217 High,
219
220 Low,
222
223 Complex,
225}
226
227#[derive(Debug, Clone, Serialize, Deserialize)]
229pub struct AccentTiming {
230 pub onset: f32,
232
233 pub peak: f32,
235
236 pub duration: f32,
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct AccentFrequencyCharacteristics {
243 pub peak_frequency: f32,
245
246 pub frequency_excursion: f32,
248
249 pub frequency_slope: f32,
251}
252
253#[derive(Debug, Clone, Serialize, Deserialize)]
255pub struct RhythmCharacteristics {
256 pub speaking_rate: f32,
258
259 pub rate_variability: f32,
261
262 pub pause_patterns: Vec<PausePattern>,
264
265 pub rhythmic_patterns: Vec<RhythmicPattern>,
267
268 pub tempo_characteristics: TempoCharacteristics,
270}
271
272#[derive(Debug, Clone, Serialize, Deserialize)]
274pub struct PausePattern {
275 pub pause_type: PauseType,
277
278 pub average_duration: f32,
280
281 pub duration_variability: f32,
283
284 pub frequency: f32,
286
287 pub context_conditions: Vec<String>,
289}
290
291#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
293pub enum PauseType {
294 Breath,
296
297 Hesitation,
299
300 Syntactic,
302
303 Emphatic,
305
306 Silent,
308}
309
310#[derive(Debug, Clone, Serialize, Deserialize)]
312pub struct RhythmicPattern {
313 pub name: String,
315
316 pub beat_pattern: Vec<f32>,
318
319 pub strength: f32,
321
322 pub regularity: f32,
324}
325
326#[derive(Debug, Clone, Serialize, Deserialize)]
328pub struct TempoCharacteristics {
329 pub base_tempo: f32,
331
332 pub tempo_variations: Vec<TempoVariation>,
334
335 pub acceleration_patterns: Vec<AccelerationPattern>,
337
338 pub rubato_characteristics: RubatoCharacteristics,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize)]
344pub struct TempoVariation {
345 pub variation_type: TempoVariationType,
347
348 pub amount: f32,
350
351 pub duration: f32,
353
354 pub context_conditions: Vec<String>,
356}
357
358#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
360pub enum TempoVariationType {
361 Accelerando,
363
364 Ritardando,
366
367 Sudden,
369
370 Cyclical,
372}
373
374#[derive(Debug, Clone, Serialize, Deserialize)]
376pub struct AccelerationPattern {
377 pub name: String,
379
380 pub curve: Vec<(f32, f32)>, pub frequency: f32,
385}
386
387#[derive(Debug, Clone, Serialize, Deserialize)]
389pub struct RubatoCharacteristics {
390 pub strength: f32,
392
393 pub patterns: Vec<RubatoPattern>,
395
396 pub context_sensitivity: f32,
398}
399
400#[derive(Debug, Clone, Serialize, Deserialize)]
402pub struct RubatoPattern {
403 pub name: String,
405
406 pub timing_adjustments: Vec<f32>,
408
409 pub scope: RubatoScope,
411}
412
413#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
415pub enum RubatoScope {
416 Note,
418
419 Phrase,
421
422 Sentence,
424
425 Global,
427}
428
429#[derive(Debug, Clone, Serialize, Deserialize)]
431pub struct StressCharacteristics {
432 pub stress_patterns: Vec<StressPattern>,
434
435 pub stress_marking: Vec<StressMarkingMethod>,
437
438 pub stress_hierarchy: StressHierarchy,
440}
441
442#[derive(Debug, Clone, Serialize, Deserialize)]
444pub struct StressPattern {
445 pub name: String,
447
448 pub stress_levels: Vec<StressLevel>,
450
451 pub regularity: f32,
453
454 pub context_dependency: f32,
456}
457
458#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
460pub enum StressLevel {
461 Unstressed,
463
464 Secondary,
466
467 Primary,
469
470 Emphatic,
472}
473
474#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
476pub enum StressMarkingMethod {
477 Pitch,
479
480 Duration,
482
483 Intensity,
485
486 Combined,
488}
489
490#[derive(Debug, Clone, Serialize, Deserialize)]
492pub struct StressHierarchy {
493 pub levels: Vec<StressHierarchyLevel>,
495
496 pub interaction_patterns: Vec<StressInteractionPattern>,
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize)]
502pub struct StressHierarchyLevel {
503 pub name: String,
505
506 pub importance: f32,
508
509 pub acoustic_correlates: Vec<AcousticCorrelate>,
511}
512
513#[derive(Debug, Clone, Serialize, Deserialize)]
515pub struct AcousticCorrelate {
516 pub correlate_type: AcousticCorrelateType,
518
519 pub strength: f32,
521
522 pub direction: CorrelateDirection,
524}
525
526#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
528pub enum AcousticCorrelateType {
529 F0,
531
532 Duration,
534
535 Intensity,
537
538 Formant,
540
541 SpectralTilt,
543}
544
545#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
547pub enum CorrelateDirection {
548 Positive,
550
551 Negative,
553
554 NonLinear,
556}
557
558#[derive(Debug, Clone, Serialize, Deserialize)]
560pub struct StressInteractionPattern {
561 pub name: String,
563
564 pub levels: Vec<String>,
566
567 pub interaction_type: InteractionType,
569
570 pub strength: f32,
572}
573
574#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
576pub enum InteractionType {
577 Additive,
579
580 Multiplicative,
582
583 Competitive,
585
586 Cooperative,
588}
589
590#[derive(Debug, Clone, Serialize, Deserialize)]
592pub struct IntonationPattern {
593 pub name: String,
595
596 pub pattern_type: IntonationPatternType,
598
599 pub f0_contour: Vec<(f32, f32)>, pub frequency: f32,
604
605 pub context_conditions: Vec<String>,
607
608 pub communicative_function: CommunicativeFunction,
610}
611
612#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
614pub enum IntonationPatternType {
615 Declarative,
617
618 Interrogative,
620
621 Exclamatory,
623
624 Imperative,
626
627 Continuation,
629
630 Final,
632}
633
634#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
636pub enum CommunicativeFunction {
637 Statement,
639
640 Question,
642
643 Command,
645
646 Emphasis,
648
649 Contrast,
651
652 Focus,
654}
655
656#[derive(Debug, Clone, Serialize, Deserialize)]
658pub struct ArticulationCharacteristics {
659 pub consonant_articulation: ConsonantArticulation,
661
662 pub vowel_articulation: VowelArticulation,
664
665 pub coarticulation_patterns: Vec<CoarticulationPattern>,
667
668 pub articulatory_precision: ArticulatoryPrecision,
670}
671
672#[derive(Debug, Clone, Serialize, Deserialize)]
674pub struct ConsonantArticulation {
675 pub place_preferences: HashMap<String, f32>,
677
678 pub manner_preferences: HashMap<String, f32>,
680
681 pub voicing_characteristics: VoicingCharacteristics,
683
684 pub cluster_handling: ConsonantClusterHandling,
686}
687
688#[derive(Debug, Clone, Serialize, Deserialize)]
690pub struct VoicingCharacteristics {
691 pub vot_patterns: HashMap<String, VOTPattern>,
693
694 pub assimilation_patterns: Vec<VoicingAssimilationPattern>,
696
697 pub devoicing_patterns: Vec<DevoicingPattern>,
699}
700
701#[derive(Debug, Clone, Serialize, Deserialize)]
703pub struct VOTPattern {
704 pub mean_vot: f32,
706
707 pub variability: f32,
709
710 pub context_dependencies: Vec<VOTContext>,
712}
713
714#[derive(Debug, Clone, Serialize, Deserialize)]
716pub struct VOTContext {
717 pub context: String,
719
720 pub adjustment: f32,
722}
723
724#[derive(Debug, Clone, Serialize, Deserialize)]
726pub struct VoicingAssimilationPattern {
727 pub name: String,
729
730 pub source_voicing: bool,
732
733 pub target_voicing: bool,
735
736 pub strength: f32,
738
739 pub conditions: Vec<String>,
741}
742
743#[derive(Debug, Clone, Serialize, Deserialize)]
745pub struct DevoicingPattern {
746 pub name: String,
748
749 pub affected_phonemes: Vec<String>,
751
752 pub strength: f32,
754
755 pub conditions: Vec<String>,
757}
758
759#[derive(Debug, Clone, Serialize, Deserialize)]
761pub struct ConsonantClusterHandling {
762 pub simplification_patterns: Vec<ClusterSimplificationPattern>,
764
765 pub epenthesis_patterns: Vec<EpenthesisPattern>,
767
768 pub deletion_patterns: Vec<DeletionPattern>,
770}
771
772#[derive(Debug, Clone, Serialize, Deserialize)]
774pub struct ClusterSimplificationPattern {
775 pub name: String,
777
778 pub input_cluster: Vec<String>,
780
781 pub output_cluster: Vec<String>,
783
784 pub probability: f32,
786
787 pub conditions: Vec<String>,
789}
790
791#[derive(Debug, Clone, Serialize, Deserialize)]
793pub struct EpenthesisPattern {
794 pub name: String,
796
797 pub epenthetic_segment: String,
799
800 pub position: InsertionPosition,
802
803 pub probability: f32,
805
806 pub conditions: Vec<String>,
808}
809
810#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
812pub enum InsertionPosition {
813 Before,
815
816 Within,
818
819 After,
821}
822
823#[derive(Debug, Clone, Serialize, Deserialize)]
825pub struct DeletionPattern {
826 pub name: String,
828
829 pub deleted_segment: String,
831
832 pub position: DeletionPosition,
834
835 pub probability: f32,
837
838 pub conditions: Vec<String>,
840}
841
842#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
844pub enum DeletionPosition {
845 Initial,
847
848 Medial,
850
851 Final,
853}
854
855#[derive(Debug, Clone, Serialize, Deserialize)]
857pub struct VowelArticulation {
858 pub vowel_space: VowelSpaceCharacteristics,
860
861 pub reduction_patterns: Vec<VowelReductionPattern>,
863
864 pub harmony_patterns: Vec<VowelHarmonyPattern>,
866
867 pub diphthongization_patterns: Vec<DiphthongizationPattern>,
869}
870
871#[derive(Debug, Clone, Serialize, Deserialize)]
873pub struct VowelSpaceCharacteristics {
874 pub formant_space: HashMap<String, FormantValues>,
876
877 pub dispersion: f32,
879
880 pub centralization_tendency: f32,
882
883 pub dynamic_range: f32,
885}
886
887#[derive(Debug, Clone, Serialize, Deserialize)]
889pub struct FormantValues {
890 pub f1: f32,
892
893 pub f2: f32,
895
896 pub f3: f32,
898
899 pub f4: Option<f32>,
901}
902
903#[derive(Debug, Clone, Serialize, Deserialize)]
905pub struct VowelReductionPattern {
906 pub name: String,
908
909 pub source_vowel: String,
911
912 pub target_vowel: String,
914
915 pub probability: f32,
917
918 pub conditions: Vec<String>,
920}
921
922#[derive(Debug, Clone, Serialize, Deserialize)]
924pub struct VowelHarmonyPattern {
925 pub name: String,
927
928 pub harmony_type: VowelHarmonyType,
930
931 pub feature_spreading: FeatureSpreading,
933
934 pub strength: f32,
936}
937
938#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
940pub enum VowelHarmonyType {
941 FrontBack,
943
944 HighLow,
946
947 RoundUnround,
949
950 ATR,
952}
953
954#[derive(Debug, Clone, Serialize, Deserialize)]
956pub struct FeatureSpreading {
957 pub direction: SpreadingDirection,
959
960 pub distance: usize,
962
963 pub blocking_segments: Vec<String>,
965}
966
967#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
969pub enum SpreadingDirection {
970 LeftToRight,
972
973 RightToLeft,
975
976 Bidirectional,
978}
979
980#[derive(Debug, Clone, Serialize, Deserialize)]
982pub struct DiphthongizationPattern {
983 pub name: String,
985
986 pub source_monophthong: String,
988
989 pub target_diphthong: String,
991
992 pub probability: f32,
994
995 pub conditions: Vec<String>,
997}
998
999#[derive(Debug, Clone, Serialize, Deserialize)]
1001pub struct CoarticulationPattern {
1002 pub name: String,
1004
1005 pub coarticulation_type: CoarticulationType,
1007
1008 pub affected_segments: Vec<String>,
1010
1011 pub strength: f32,
1013
1014 pub temporal_extent: TemporalExtent,
1016}
1017
1018#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1020pub enum CoarticulationType {
1021 Anticipatory,
1023
1024 Carryover,
1026
1027 Bidirectional,
1029}
1030
1031#[derive(Debug, Clone, Serialize, Deserialize)]
1033pub struct TemporalExtent {
1034 pub extent_ms: f32,
1036
1037 pub extent_segments: usize,
1039
1040 pub variability: f32,
1042}
1043
1044#[derive(Debug, Clone, Serialize, Deserialize)]
1046pub struct ArticulatoryPrecision {
1047 pub overall_precision: f32,
1049
1050 pub consonant_precision: f32,
1052
1053 pub vowel_precision: f32,
1055
1056 pub precision_variability: f32,
1058
1059 pub context_effects: Vec<PrecisionContextEffect>,
1061}
1062
1063#[derive(Debug, Clone, Serialize, Deserialize)]
1065pub struct PrecisionContextEffect {
1066 pub context: String,
1068
1069 pub adjustment: f32,
1071
1072 pub strength: f32,
1074}
1075
1076#[derive(Debug, Clone, Serialize, Deserialize)]
1078pub struct VoiceQualityCharacteristics {
1079 pub phonation_type: PhonationType,
1081
1082 pub breathiness: BreathinessCharacteristics,
1084
1085 pub roughness: RoughnessCharacteristics,
1087
1088 pub creakiness: CreakynessCharacteristics,
1090
1091 pub tenseness: TensenessCharacteristics,
1093
1094 pub resonance: ResonanceCharacteristics,
1096}
1097
1098#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1100pub enum PhonationType {
1101 Modal,
1103
1104 Breathy,
1106
1107 Creaky,
1109
1110 Harsh,
1112
1113 Falsetto,
1115
1116 Mixed,
1118}
1119
1120#[derive(Debug, Clone, Serialize, Deserialize)]
1122pub struct BreathinessCharacteristics {
1123 pub level: f32,
1125
1126 pub variability: f32,
1128
1129 pub context_dependencies: Vec<BreathinessContext>,
1131
1132 pub acoustic_correlates: BreathinessAcousticCorrelates,
1134}
1135
1136#[derive(Debug, Clone, Serialize, Deserialize)]
1138pub struct BreathinessContext {
1139 pub context: String,
1141
1142 pub adjustment: f32,
1144}
1145
1146#[derive(Debug, Clone, Serialize, Deserialize)]
1148pub struct BreathinessAcousticCorrelates {
1149 pub hnr: f32,
1151
1152 pub spectral_tilt: f32,
1154
1155 pub f1_bandwidth: f32,
1157
1158 pub aspiration_noise: f32,
1160}
1161
1162#[derive(Debug, Clone, Serialize, Deserialize)]
1164pub struct RoughnessCharacteristics {
1165 pub level: f32,
1167
1168 pub variability: f32,
1170
1171 pub roughness_type: RoughnessType,
1173
1174 pub acoustic_correlates: RoughnessAcousticCorrelates,
1176}
1177
1178#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1180pub enum RoughnessType {
1181 Periodic,
1183
1184 Aperiodic,
1186
1187 Mixed,
1189}
1190
1191#[derive(Debug, Clone, Serialize, Deserialize)]
1193pub struct RoughnessAcousticCorrelates {
1194 pub jitter: f32,
1196
1197 pub shimmer: f32,
1199
1200 pub nhr: f32,
1202
1203 pub f0_irregularity: f32,
1205}
1206
1207#[derive(Debug, Clone, Serialize, Deserialize)]
1209pub struct CreakynessCharacteristics {
1210 pub level: f32,
1212
1213 pub variability: f32,
1215
1216 pub distribution: CreakDistribution,
1218
1219 pub acoustic_correlates: CreakyAcousticCorrelates,
1221}
1222
1223#[derive(Debug, Clone, Serialize, Deserialize)]
1225pub struct CreakDistribution {
1226 pub phrase_initial: f32,
1228
1229 pub phrase_final: f32,
1231
1232 pub stressed_syllable: f32,
1234
1235 pub vowel_specific: HashMap<String, f32>,
1237}
1238
1239#[derive(Debug, Clone, Serialize, Deserialize)]
1241pub struct CreakyAcousticCorrelates {
1242 pub f0_characteristics: CreakyF0Characteristics,
1244
1245 pub spectral_characteristics: CreakySpectralCharacteristics,
1247
1248 pub temporal_characteristics: CreakyTemporalCharacteristics,
1250}
1251
1252#[derive(Debug, Clone, Serialize, Deserialize)]
1254pub struct CreakyF0Characteristics {
1255 pub mean_f0: f32,
1257
1258 pub f0_irregularity: f32,
1260
1261 pub subharmonics: f32,
1263}
1264
1265#[derive(Debug, Clone, Serialize, Deserialize)]
1267pub struct CreakySpectralCharacteristics {
1268 pub spectral_tilt: f32,
1270
1271 pub high_frequency_energy: f32,
1273
1274 pub formant_damping: f32,
1276}
1277
1278#[derive(Debug, Clone, Serialize, Deserialize)]
1280pub struct CreakyTemporalCharacteristics {
1281 pub pulse_irregularity: f32,
1283
1284 pub inter_pulse_intervals: Vec<f32>,
1286
1287 pub duration_patterns: Vec<f32>,
1289}
1290
1291#[derive(Debug, Clone, Serialize, Deserialize)]
1293pub struct TensenessCharacteristics {
1294 pub level: f32,
1296
1297 pub variability: f32,
1299
1300 pub distribution: TensenessDistribution,
1302
1303 pub acoustic_correlates: TensenessAcousticCorrelates,
1305}
1306
1307#[derive(Debug, Clone, Serialize, Deserialize)]
1309pub struct TensenessDistribution {
1310 pub context_tenseness: HashMap<String, f32>,
1312
1313 pub emotion_tenseness: HashMap<String, f32>,
1315
1316 pub stress_tenseness: HashMap<String, f32>,
1318}
1319
1320#[derive(Debug, Clone, Serialize, Deserialize)]
1322pub struct TensenessAcousticCorrelates {
1323 pub f0_elevation: f32,
1325
1326 pub formant_shifts: HashMap<String, f32>,
1328
1329 pub spectral_energy: f32,
1331
1332 pub voice_source: VoiceSourceCharacteristics,
1334}
1335
1336#[derive(Debug, Clone, Serialize, Deserialize)]
1338pub struct VoiceSourceCharacteristics {
1339 pub open_quotient: f32,
1341
1342 pub closing_quotient: f32,
1344
1345 pub spectral_tilt: f32,
1347
1348 pub flow_derivative: f32,
1350}
1351
1352#[derive(Debug, Clone, Serialize, Deserialize)]
1354pub struct ResonanceCharacteristics {
1355 pub vocal_tract_length: f32,
1357
1358 pub formant_frequencies: HashMap<String, f32>,
1360
1361 pub formant_bandwidths: HashMap<String, f32>,
1363
1364 pub resonance_coupling: ResonanceCoupling,
1366
1367 pub nasality: NasalityCharacteristics,
1369}
1370
1371#[derive(Debug, Clone, Serialize, Deserialize)]
1373pub struct ResonanceCoupling {
1374 pub oral_nasal_coupling: f32,
1376
1377 pub pharyngeal_coupling: f32,
1379
1380 pub coupling_variability: f32,
1382}
1383
1384#[derive(Debug, Clone, Serialize, Deserialize)]
1386pub struct NasalityCharacteristics {
1387 pub level: f32,
1389
1390 pub variability: f32,
1392
1393 pub distribution: NasalityDistribution,
1395
1396 pub acoustic_correlates: NasalityAcousticCorrelates,
1398}
1399
1400#[derive(Debug, Clone, Serialize, Deserialize)]
1402pub struct NasalityDistribution {
1403 pub consonant_nasality: HashMap<String, f32>,
1405
1406 pub vowel_nasality: HashMap<String, f32>,
1408
1409 pub context_effects: Vec<NasalityContextEffect>,
1411}
1412
1413#[derive(Debug, Clone, Serialize, Deserialize)]
1415pub struct NasalityContextEffect {
1416 pub context: String,
1418
1419 pub adjustment: f32,
1421}
1422
1423#[derive(Debug, Clone, Serialize, Deserialize)]
1425pub struct NasalityAcousticCorrelates {
1426 pub nasal_formants: Vec<f32>,
1428
1429 pub anti_formants: Vec<f32>,
1431
1432 pub coupling_bandwidth: f32,
1434
1435 pub spectral_zeros: Vec<f32>,
1437}
1438
1439#[derive(Debug, Clone, Serialize, Deserialize)]
1441pub struct CulturalCharacteristics {
1442 pub regional_features: Vec<RegionalFeature>,
1444
1445 pub sociolinguistic_markers: Vec<SociolinguisticMarker>,
1447
1448 pub speaking_norms: SpeakingNorms,
1450
1451 pub code_switching: CodeSwitchingPatterns,
1453}
1454
1455#[derive(Debug, Clone, Serialize, Deserialize)]
1457pub struct RegionalFeature {
1458 pub name: String,
1460
1461 pub feature_type: RegionalFeatureType,
1463
1464 pub strength: f32,
1466
1467 pub distribution: Vec<String>,
1469}
1470
1471#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1473pub enum RegionalFeatureType {
1474 Phonological,
1476
1477 Lexical,
1479
1480 Prosodic,
1482
1483 Pragmatic,
1485}
1486
1487#[derive(Debug, Clone, Serialize, Deserialize)]
1489pub struct SociolinguisticMarker {
1490 pub name: String,
1492
1493 pub social_dimension: SocialDimension,
1495
1496 pub salience: f32,
1498
1499 pub contexts: Vec<String>,
1501}
1502
1503#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1505pub enum SocialDimension {
1506 Age,
1508
1509 Gender,
1511
1512 Class,
1514
1515 Ethnicity,
1517
1518 Education,
1520
1521 Occupation,
1523}
1524
1525#[derive(Debug, Clone, Serialize, Deserialize)]
1527pub struct SpeakingNorms {
1528 pub turn_taking: TurnTakingPatterns,
1530
1531 pub politeness_strategies: Vec<PolitenessStrategy>,
1533
1534 pub discourse_markers: Vec<DiscourseMarker>,
1536
1537 pub cultural_taboos: Vec<CulturalTaboo>,
1539}
1540
1541#[derive(Debug, Clone, Serialize, Deserialize)]
1543pub struct TurnTakingPatterns {
1544 pub overlap_tolerance: f32,
1546
1547 pub pause_expectations: Vec<PauseExpectation>,
1549
1550 pub interruption_patterns: Vec<InterruptionPattern>,
1552}
1553
1554#[derive(Debug, Clone, Serialize, Deserialize)]
1556pub struct PauseExpectation {
1557 pub context: String,
1559
1560 pub expected_duration: f32,
1562
1563 pub tolerance: f32,
1565}
1566
1567#[derive(Debug, Clone, Serialize, Deserialize)]
1569pub struct InterruptionPattern {
1570 pub name: String,
1572
1573 pub interruption_type: InterruptionType,
1575
1576 pub acceptability: f32,
1578
1579 pub conditions: Vec<String>,
1581}
1582
1583#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1585pub enum InterruptionType {
1586 Cooperative,
1588
1589 Competitive,
1591
1592 Supportive,
1594
1595 Corrective,
1597}
1598
1599#[derive(Debug, Clone, Serialize, Deserialize)]
1601pub struct PolitenessStrategy {
1602 pub name: String,
1604
1605 pub politeness_type: PolitenessType,
1607
1608 pub frequency: f32,
1610
1611 pub appropriateness: HashMap<String, f32>,
1613}
1614
1615#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1617pub enum PolitenessType {
1618 Positive,
1620
1621 Negative,
1623
1624 BaldOnRecord,
1626
1627 OffRecord,
1629}
1630
1631#[derive(Debug, Clone, Serialize, Deserialize)]
1633pub struct DiscourseMarker {
1634 pub text: String,
1636
1637 pub function: DiscourseFunction,
1639
1640 pub frequency: f32,
1642
1643 pub prosody: DiscourseMarkerProsody,
1645}
1646
1647#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1649pub enum DiscourseFunction {
1650 TopicShift,
1652
1653 Emphasis,
1655
1656 Hesitation,
1658
1659 Confirmation,
1661
1662 Elaboration,
1664
1665 Contrast,
1667}
1668
1669#[derive(Debug, Clone, Serialize, Deserialize)]
1671pub struct DiscourseMarkerProsody {
1672 pub f0_pattern: Vec<f32>,
1674
1675 pub duration: f32,
1677
1678 pub intensity: f32,
1680
1681 pub pause_patterns: Vec<f32>,
1683}
1684
1685#[derive(Debug, Clone, Serialize, Deserialize)]
1687pub struct CulturalTaboo {
1688 pub description: String,
1690
1691 pub strength: f32,
1693
1694 pub context_specificity: Vec<String>,
1696
1697 pub consequences: Vec<String>,
1699}
1700
1701#[derive(Debug, Clone, Serialize, Deserialize)]
1703pub struct CodeSwitchingPatterns {
1704 pub languages: Vec<String>,
1706
1707 pub triggers: Vec<SwitchingTrigger>,
1709
1710 pub switching_points: Vec<SwitchingPoint>,
1712
1713 pub strategies: Vec<SwitchingStrategy>,
1715}
1716
1717#[derive(Debug, Clone, Serialize, Deserialize)]
1719pub struct SwitchingTrigger {
1720 pub trigger_type: TriggerType,
1722
1723 pub strength: f32,
1725
1726 pub conditions: Vec<String>,
1728}
1729
1730#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1732pub enum TriggerType {
1733 TopicChange,
1735
1736 EmotionalState,
1738
1739 AudienceChange,
1741
1742 Emphasis,
1744
1745 Quotation,
1747}
1748
1749#[derive(Debug, Clone, Serialize, Deserialize)]
1751pub struct SwitchingPoint {
1752 pub level: LinguisticLevel,
1754
1755 pub frequency: f32,
1757
1758 pub constraints: Vec<SwitchingConstraint>,
1760}
1761
1762#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1764pub enum LinguisticLevel {
1765 Phoneme,
1767
1768 Morpheme,
1770
1771 Word,
1773
1774 Phrase,
1776
1777 Clause,
1779
1780 Sentence,
1782}
1783
1784#[derive(Debug, Clone, Serialize, Deserialize)]
1786pub struct SwitchingConstraint {
1787 pub name: String,
1789
1790 pub constraint_type: ConstraintType,
1792
1793 pub strength: f32,
1795}
1796
1797#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1799pub enum ConstraintType {
1800 Syntactic,
1802
1803 Phonological,
1805
1806 Semantic,
1808
1809 Pragmatic,
1811}
1812
1813#[derive(Debug, Clone, Serialize, Deserialize)]
1815pub struct SwitchingStrategy {
1816 pub name: String,
1818
1819 pub strategy_type: StrategyType,
1821
1822 pub frequency: f32,
1824
1825 pub effectiveness: f32,
1827}
1828
1829#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
1831pub enum StrategyType {
1832 Insertion,
1834
1835 Alternation,
1837
1838 CongruentLexicalization,
1840
1841 FlaggedSwitching,
1843}