startTalk method

Future startTalk({
  1. required TTSModel dataParam,
})

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;
}