Merge pull request #197 from pangeachat/words-per-minute

adding words per minute to speech to text feedback
pull/1183/head
ggurdin 2 years ago committed by GitHub
commit 0884f08c13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -3945,5 +3945,6 @@
"accuracy": "Accuracy", "accuracy": "Accuracy",
"points": "Points", "points": "Points",
"noPaymentInfo": "No payment info necessary!", "noPaymentInfo": "No payment info necessary!",
"updatePhoneOS": "You may need to update your device's OS version." "updatePhoneOS": "You may need to update your device's OS version.",
"wordsPerMinute": "Words per minute"
} }

@ -4587,5 +4587,52 @@
"refresh": "Actualizar", "refresh": "Actualizar",
"joinToView": "Únete a esta sala para ver los detalles", "joinToView": "Únete a esta sala para ver los detalles",
"autoPlayTitle": "Reproducción automática de mensajes", "autoPlayTitle": "Reproducción automática de mensajes",
"autoPlayDesc": "Cuando está activado, el audio de texto a voz de los mensajes se reproducirá automáticamente cuando se seleccione." "autoPlayDesc": "Cuando está activado, el audio de texto a voz de los mensajes se reproducirá automáticamente cuando se seleccione.",
} "presenceStyle": "Presencia:",
"presencesToggle": "Mostrar mensajes de estado de otros usuarios",
"writeAMessageFlag": "Escribe un mensaje en {l1flag} o {l2flag}...",
"@writeAMessageFlag": {
"type": "text",
"placeholders": {
"l1flag": {},
"l2flag": {}
}
},
"youInvitedToBy": "📩 Has sido invitado a través de un enlace a:\n{alias}",
"@youInvitedToBy": {
"placeholders": {
"alias": {}
}
},
"hidePresences": "¿Ocultar la lista de estados?",
"sendReadReceipts": "Enviar recibos de lectura",
"sendTypingNotificationsDescription": "Los demás participantes en un chat pueden ver cuándo estás escribiendo un nuevo mensaje.",
"sendReadReceiptsDescription": "Los demás participantes en un chat pueden ver cuándo has leído un mensaje.",
"formattedMessages": "Mensajes con formato",
"formattedMessagesDescription": "Mostrar contenido de mensajes enriquecido como texto en negrita utilizando markdown.",
"verifyOtherUser": "🔐 Verificar otro usuario",
"verifyOtherUserDescription": "Si verificas a otro usuario, puedes estar seguro de saber a quién estás escribiendo realmente. 💪\n\nCuando inicies una verificación, tú y el otro usuario veréis una ventana emergente en la aplicación. Allí veréis una serie de emojis o números que tendréis que comparar entre vosotros.\n\nLa mejor forma de hacerlo es quedar o iniciar una videollamada. 👭",
"verifyOtherDevice": "🔐 Verificar otro dispositivo",
"verifyOtherDeviceDescription": "Cuando verificas otro dispositivo, esos dispositivos pueden intercambiar claves, aumentando tu seguridad general. 💪 Cuando inicies una verificación, aparecerá una ventana emergente en la app de ambos dispositivos. Allí verás entonces una serie de emojis o números que tienes que comparar entre sí. Lo mejor es que tengas ambos dispositivos a mano antes de iniciar la verificación. 🤳",
"transparent": "Transparente",
"incomingMessages": "Mensajes entrantes",
"stickers": "Pegatinas",
"commandHint_ignore": "Ignorar el ID de matriz dado",
"commandHint_unignore": "Designorar el ID de matriz dado",
"unreadChatsInApp": "{appname}: {unread} chats no leídos",
"@unreadChatsInApp": {
"type": "text",
"placeholders": {
"appname": {},
"unread": {}
}
},
"messageAnalytics": "Análisis de mensajes",
"words": "Palabras",
"score": "Puntuación",
"accuracy": "Precisión",
"points": "Puntos",
"noPaymentInfo": "No se necesitan datos de pago.",
"updatePhoneOS": "Puede que necesites actualizar la versión del sistema operativo de tu dispositivo.",
"wordsPerMinute": "Palabras por minuto"
}

@ -29,6 +29,8 @@ abstract class AppConfig {
static const Color primaryColorLight = Color(0xFFDBC9FF); static const Color primaryColorLight = Color(0xFFDBC9FF);
static const Color secondaryColor = Color(0xFF41a2bc); static const Color secondaryColor = Color(0xFF41a2bc);
static const Color activeToggleColor = Color(0xFF33D057); static const Color activeToggleColor = Color(0xFF33D057);
static const Color success = Color(0xFF33D057);
static const Color warning = Color.fromARGB(255, 210, 124, 12);
// static String _privacyUrl = // static String _privacyUrl =
// 'https://gitlab.com/famedly/fluffychat/-/blob/main/PRIVACY.md'; // 'https://gitlab.com/famedly/fluffychat/-/blob/main/PRIVACY.md';
static String _privacyUrl = "https://www.pangeachat.com/privacy"; static String _privacyUrl = "https://www.pangeachat.com/privacy";

@ -1,11 +1,14 @@
import 'dart:convert'; import 'dart:convert';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/enum/audio_encoding_enum.dart'; import 'package:fluffychat/pangea/enum/audio_encoding_enum.dart';
import 'package:fluffychat/pangea/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/models/pangea_token_model.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
const int THRESHOLD_FOR_GREEN = 80;
class SpeechToTextAudioConfigModel { class SpeechToTextAudioConfigModel {
final AudioEncodingEnum encoding; final AudioEncodingEnum encoding;
final int sampleRateHertz; final int sampleRateHertz;
@ -93,13 +96,10 @@ class STTToken {
? Colors.white ? Colors.white
: Colors.black); : Colors.black);
} }
if (confidence! > 80) { if (confidence! > THRESHOLD_FOR_GREEN) {
return const Color.fromARGB(255, 0, 152, 0); return AppConfig.success;
}
if (confidence! > 50) {
return const Color.fromARGB(255, 184, 142, 43);
} }
return Colors.red; return AppConfig.warning;
} }
factory STTToken.fromJson(Map<String, dynamic> json) { factory STTToken.fromJson(Map<String, dynamic> json) {
@ -148,6 +148,7 @@ class STTToken {
class Transcript { class Transcript {
final String text; final String text;
final int confidence; final int confidence;
final double? wordsPerMinute;
final List<STTToken> sttTokens; final List<STTToken> sttTokens;
final String langCode; final String langCode;
@ -156,6 +157,7 @@ class Transcript {
required this.confidence, required this.confidence,
required this.sttTokens, required this.sttTokens,
required this.langCode, required this.langCode,
required this.wordsPerMinute,
}); });
factory Transcript.fromJson(Map<String, dynamic> json) => Transcript( factory Transcript.fromJson(Map<String, dynamic> json) => Transcript(
@ -167,6 +169,7 @@ class Transcript {
.map((e) => STTToken.fromJson(e)) .map((e) => STTToken.fromJson(e))
.toList(), .toList(),
langCode: json['lang_code'], langCode: json['lang_code'],
wordsPerMinute: json['words_per_minute'],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
@ -174,7 +177,15 @@ class Transcript {
"confidence": confidence, "confidence": confidence,
"stt_tokens": sttTokens.map((e) => e.toJson()).toList(), "stt_tokens": sttTokens.map((e) => e.toJson()).toList(),
"lang_code": langCode, "lang_code": langCode,
"words_per_minute": wordsPerMinute,
}; };
Color color(BuildContext context) {
if (confidence > THRESHOLD_FOR_GREEN) {
return AppConfig.success;
}
return AppConfig.warning;
}
} }
class SpeechToTextResult { class SpeechToTextResult {

@ -133,6 +133,9 @@ class MessageSpeechToTextCardState extends State<MessageSpeechToTextCard> {
getSpeechToText(); getSpeechToText();
} }
String? get wordsPerMinuteString =>
speechToTextResponse?.transcript.wordsPerMinute?.toString();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (_fetchingTranscription) { if (_fetchingTranscription) {
@ -158,11 +161,11 @@ class MessageSpeechToTextCardState extends State<MessageSpeechToTextCard> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [ children: [
IconNumberWidget( // IconNumberWidget(
icon: Icons.abc, // icon: Icons.abc,
number: (selectedToken == null ? words : 1).toString(), // number: (selectedToken == null ? words : 1).toString(),
toolTip: L10n.of(context)!.words, // toolTip: L10n.of(context)!.words,
), // ),
IconNumberWidget( IconNumberWidget(
icon: Symbols.target, icon: Symbols.target,
number: number:
@ -171,8 +174,9 @@ class MessageSpeechToTextCardState extends State<MessageSpeechToTextCard> {
), ),
IconNumberWidget( IconNumberWidget(
icon: Icons.speed, icon: Icons.speed,
number: (selectedToken?.confidence ?? total).toString(), number:
toolTip: L10n.of(context)!.points, wordsPerMinuteString != null ? "$wordsPerMinuteString" : "??",
toolTip: L10n.of(context)!.wordsPerMinute,
), ),
], ],
), ),

@ -820,7 +820,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"be": [ "be": [
@ -2239,7 +2241,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"bn": [ "bn": [
@ -3120,7 +3124,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"bo": [ "bo": [
@ -4001,7 +4007,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ca": [ "ca": [
@ -4882,7 +4890,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"cs": [ "cs": [
@ -5763,7 +5773,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"de": [ "de": [
@ -6591,7 +6603,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"el": [ "el": [
@ -7472,7 +7486,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"eo": [ "eo": [
@ -8353,36 +8369,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
], "updatePhoneOS",
"wordsPerMinute"
"es": [
"presenceStyle",
"presencesToggle",
"writeAMessageFlag",
"youInvitedToBy",
"hidePresences",
"sendReadReceipts",
"sendTypingNotificationsDescription",
"sendReadReceiptsDescription",
"formattedMessages",
"formattedMessagesDescription",
"verifyOtherUser",
"verifyOtherUserDescription",
"verifyOtherDevice",
"verifyOtherDeviceDescription",
"transparent",
"incomingMessages",
"stickers",
"commandHint_ignore",
"commandHint_unignore",
"unreadChatsInApp",
"messageAnalytics",
"words",
"score",
"accuracy",
"points",
"noPaymentInfo"
], ],
"et": [ "et": [
@ -9206,7 +9195,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"eu": [ "eu": [
@ -10030,7 +10021,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"fa": [ "fa": [
@ -10911,7 +10904,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"fi": [ "fi": [
@ -11792,7 +11787,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"fr": [ "fr": [
@ -12673,7 +12670,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ga": [ "ga": [
@ -13554,7 +13553,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"gl": [ "gl": [
@ -14378,7 +14379,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"he": [ "he": [
@ -15259,7 +15262,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"hi": [ "hi": [
@ -16140,7 +16145,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"hr": [ "hr": [
@ -17008,7 +17015,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"hu": [ "hu": [
@ -17889,7 +17898,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ia": [ "ia": [
@ -19294,7 +19305,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"id": [ "id": [
@ -20175,7 +20188,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ie": [ "ie": [
@ -21056,7 +21071,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"it": [ "it": [
@ -21922,7 +21939,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ja": [ "ja": [
@ -22803,7 +22822,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ko": [ "ko": [
@ -23684,7 +23705,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"lt": [ "lt": [
@ -24565,7 +24588,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"lv": [ "lv": [
@ -25446,7 +25471,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"nb": [ "nb": [
@ -26327,7 +26354,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"nl": [ "nl": [
@ -27208,7 +27237,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"pl": [ "pl": [
@ -28089,7 +28120,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"pt": [ "pt": [
@ -28970,7 +29003,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"pt_BR": [ "pt_BR": [
@ -29820,7 +29855,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"pt_PT": [ "pt_PT": [
@ -30701,7 +30738,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ro": [ "ro": [
@ -31582,7 +31621,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ru": [ "ru": [
@ -32406,7 +32447,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"sk": [ "sk": [
@ -33287,7 +33330,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"sl": [ "sl": [
@ -34168,7 +34213,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"sr": [ "sr": [
@ -35049,7 +35096,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"sv": [ "sv": [
@ -35895,7 +35944,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"ta": [ "ta": [
@ -36776,7 +36827,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"th": [ "th": [
@ -37657,7 +37710,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"tr": [ "tr": [
@ -38523,7 +38578,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"uk": [ "uk": [
@ -39347,7 +39404,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"vi": [ "vi": [
@ -40228,7 +40287,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"zh": [ "zh": [
@ -41052,7 +41113,9 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
], ],
"zh_Hant": [ "zh_Hant": [
@ -41933,6 +41996,8 @@
"score", "score",
"accuracy", "accuracy",
"points", "points",
"noPaymentInfo" "noPaymentInfo",
"updatePhoneOS",
"wordsPerMinute"
] ]
} }

Loading…
Cancel
Save