startTalk method
Implementation
Future startTalk({required TTSModel dataParam}) async {
data = StateOfTalk.talking;
print('Final audio URL: ${dataParam.toString()}');
if (dataParam.isRun == 1 &&
dataParam.voice != null &&
isNotBlank(dataParam.voice)) {
final uri = Uri.parse(dataParam.voice ?? '');
await wordPlayer.setAudioSource(AudioSource.uri(uri));
await wordPlayer.play();
wordPlayer.playerStateStream.listen((state) {
print("wordPlayer.playerStateStream:$state");
// if (state.playing) {
// } else {
switch (state.processingState) {
case ProcessingState.idle:
data = StateOfTalk.stopped;
case ProcessingState.loading:
data = StateOfTalk.talking;
case ProcessingState.buffering:
data = StateOfTalk.talking;
case ProcessingState.ready:
data = StateOfTalk.talking;
case ProcessingState.completed:
data = StateOfTalk.stopped;
// }
}
});
return;
}
final session = await audio.AudioSession.instance;
await session.configure(audio.AudioSessionConfiguration.music());
await session.setActive(true);
print('object:${dataParam.text}');
log('object:${dataParam.text}');
log('dataParam.isArabic:${dataParam.isArabic}');
if (Platform.isAndroid) {
String currentEngine = await flutterTts.getDefaultEngine;
if (currentEngine != mainEnginUse) {
await flutterTts.setEngine(mainEnginUse);
}
}
if (dataParam.isArabic == true) {
await flutterTts.setLanguage("ar");
} else {
await flutterTts.setLanguage("en-US");
}
flutterTts.setPitch(1.0);
flutterTts.setSpeechRate(0.4);
flutterTts.setStartHandler(() {
data = StateOfTalk.talking;
if (dataParam.actionOfStart != null) {
dataParam.actionOfStart!();
}
});
flutterTts.setCompletionHandler(() {
data = StateOfTalk.stopped;
if (dataParam.actionComplete != null) {
dataParam.actionComplete!();
}
});
flutterTts.setCancelHandler(() {
data = StateOfTalk.stopped;
if (dataParam.actionCancel != null) {
dataParam.actionCancel!();
}
});
flutterTts.setPauseHandler(() {
data = StateOfTalk.stopped;
if (dataParam.actionPause != null) {
dataParam.actionPause!();
}
});
flutterTts.awaitSpeakCompletion(true);
await flutterTts.speak(dataParam.text);
data = StateOfTalk.stopped;
}