added multimedia support and STT. STT and photos are have bugs but are functional. file upload is conceptualized but will require additional backend work. video is on hold for now.

This commit is contained in:
Joshua
2024-07-10 19:15:03 -06:00
parent e5b69aa2b6
commit cbd040f57b
36 changed files with 742 additions and 137 deletions
@@ -0,0 +1,59 @@
import 'package:speech_to_text/speech_recognition_result.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;
import 'package:speech_to_text/speech_to_text.dart';
/// Handles standard Speech-To-Text using on-device processing.
class SpeechToText {
final stt.SpeechToText speechToText = stt.SpeechToText();
// TODO: User customizable STT??
final SpeechListenOptions options = stt.SpeechListenOptions(
partialResults: true,
onDevice: true,
);
bool speechEnabled = false;
String text = "";
// Check if speech recognition is enabled.
bool isSpeechEnabled() => speechEnabled;
Future<String> getTextWhenReady() async {
await speechToText.stop();
return text;
}
// Retrieve the text.
@Deprecated("TODO: Deprecated message for speechToText.getText")
String getText() => text;
// Reset either after saving the text or prior to using STT again.
void reset() => text = "";
/// Start a speech recognition session
void startListening() async {
await speechToText.listen(
onResult: onSpeechResult,
pauseFor: const Duration(seconds: 3),
// TODO: I think this is a bug with the speech_to_text library? The docs correctly identify the named parameter of SpeechListenOptions, but it's not recognized.
// SpeechListenOptions: options,
);
}
/// Manually stop the active speech recognition session
/// Note that there are also timeouts that each platform enforces
/// and the SpeechToText plugin supports setting timeouts on the
/// listen method.
void stopListening() async => await speechToText.stop();
SpeechToText() {
initSpeech();
}
/// This has to happen only once per app
void initSpeech() async => speechEnabled = await speechToText.initialize();
/// This is the callback that the SpeechToText plugin calls when
/// the platform returns recognized words.
void onSpeechResult(SpeechRecognitionResult result) => (text = result.recognizedWords);
}