chore: save voice in TTS events and re-request if requested voice doesn't match saved voice
This commit is contained in:
parent
2397a733f1
commit
2701f74759
3 changed files with 21 additions and 5 deletions
|
|
@ -109,6 +109,7 @@ class ModelKey {
|
|||
|
||||
static const String transcription = "transcription";
|
||||
static const String botTranscription = 'bot_transcription';
|
||||
static const String voice = "voice";
|
||||
|
||||
// bot options
|
||||
static const String languageLevel = "difficulty";
|
||||
|
|
|
|||
|
|
@ -303,7 +303,11 @@ class PangeaMessageEvent {
|
|||
return null;
|
||||
}
|
||||
|
||||
Event? getTextToSpeechLocal(String langCode, String text) {
|
||||
Event? getTextToSpeechLocal(
|
||||
String langCode,
|
||||
String text,
|
||||
String? voice,
|
||||
) {
|
||||
for (final audio in allAudio) {
|
||||
final dataMap = audio.content.tryGetMap(ModelKey.transcription);
|
||||
if (dataMap == null || !dataMap.containsKey(ModelKey.tokens)) continue;
|
||||
|
|
@ -313,7 +317,9 @@ class PangeaMessageEvent {
|
|||
dataMap as dynamic,
|
||||
);
|
||||
|
||||
if (audioData.langCode == langCode && audioData.text == text) {
|
||||
if (audioData.langCode == langCode &&
|
||||
audioData.text == text &&
|
||||
audioData.voice == voice) {
|
||||
return audio;
|
||||
}
|
||||
} catch (e, s) {
|
||||
|
|
@ -368,7 +374,7 @@ class PangeaMessageEvent {
|
|||
String langCode,
|
||||
String? voice,
|
||||
) async {
|
||||
final local = getTextToSpeechLocal(langCode, messageDisplayText);
|
||||
final local = getTextToSpeechLocal(langCode, messageDisplayText, voice);
|
||||
if (local != null) {
|
||||
final file = await local.getPangeaAudioFile();
|
||||
if (file != null) return file;
|
||||
|
|
@ -424,7 +430,7 @@ class PangeaMessageEvent {
|
|||
'waveform': response.waveform,
|
||||
},
|
||||
ModelKey.transcription: response
|
||||
.toPangeaAudioEventData(rep?.text ?? body, langCode)
|
||||
.toPangeaAudioEventData(rep?.text ?? body, langCode, voice)
|
||||
.toJson(),
|
||||
},
|
||||
).then((eventId) async {
|
||||
|
|
|
|||
|
|
@ -41,11 +41,16 @@ class TextToSpeechResponseModel {
|
|||
"tts_tokens": List<dynamic>.from(ttsTokens.map((x) => x.toJson())),
|
||||
};
|
||||
|
||||
PangeaAudioEventData toPangeaAudioEventData(String text, String langCode) {
|
||||
PangeaAudioEventData toPangeaAudioEventData(
|
||||
String text,
|
||||
String langCode,
|
||||
String? voice,
|
||||
) {
|
||||
return PangeaAudioEventData(
|
||||
text: text,
|
||||
langCode: langCode,
|
||||
tokens: ttsTokens,
|
||||
voice: voice,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -91,11 +96,13 @@ class PangeaAudioEventData {
|
|||
final String text;
|
||||
final String langCode;
|
||||
final List<TTSToken> tokens;
|
||||
final String? voice;
|
||||
|
||||
PangeaAudioEventData({
|
||||
required this.text,
|
||||
required this.langCode,
|
||||
required this.tokens,
|
||||
this.voice,
|
||||
});
|
||||
|
||||
factory PangeaAudioEventData.fromJson(dynamic json) => PangeaAudioEventData(
|
||||
|
|
@ -106,6 +113,7 @@ class PangeaAudioEventData {
|
|||
.map((x) => TTSToken.fromJson(x))
|
||||
.toList(),
|
||||
),
|
||||
voice: json[ModelKey.voice] as String?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
|
|
@ -113,5 +121,6 @@ class PangeaAudioEventData {
|
|||
ModelKey.langCode: langCode,
|
||||
ModelKey.tokens:
|
||||
List<Map<String, dynamic>>.from(tokens.map((x) => x.toJson())),
|
||||
if (voice != null) ModelKey.voice: voice,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue