handleVoiceRecord method

Future<void> handleVoiceRecord()

Implementation

Future<void> handleVoiceRecord() async {
  processTimer = true;
  var continue_record = false;
  try{
    await audioWavController.record();
    continue_record = true;
  }
  catch(_){
    if(_onProcessError!=null){
      _onProcessError!("Microphone is not available");
    }
    dispose();
  }
  if(continue_record){
    if (_onVoiceRecordingStarted != null) {
      _onVoiceRecordingStarted!();
    }
    try {
      streamTimer.cancel();
    } catch (e) {
      print("time not initiated");
    }
    streamTimer = Timer.periodic(const Duration(seconds: 1), (timer) async {
      if (processTimer == true) {
        if (isRecording == false) {
          var filterdSound = audioWavController.waveData
              .sublist(audioWavController.waveData.length - 9,
              audioWavController.waveData.length)
              .where((element) => element >= 0.15);
          if (filterdSound.length > 0) {
            isRecording = true;
          }
        } else if (isRecording == true) {
          var filterdSielence = audioWavController.waveData
              .sublist(audioWavController.waveData.length - 9,
              audioWavController.waveData.length)
              .where((element) => element >= 0.0 && element < 0.15);
          if (filterdSielence.length > 0 && bufferTimer == 1) {
            isRecording = false;
            processTimer = false;
            bufferTimer = 0;
            streamTimer.cancel();
            final path = await audioWavController.stop();
            audioWavController.refresh();
            if (_onvoiceRecordingStopped != null) {
              _onvoiceRecordingStopped!();
            }
            if (path != null) {
              isRecording = false;
              buffer = await File(path).readAsBytes();
              channel.sink.add(buffer);
              if (_onBufferSent != null) {
                _onBufferSent!();
              }
              processTimer = false;
            } else {
              handleVoiceRecord();
            }
          } else if (filterdSielence.length > 0 && bufferTimer == 0) {
            bufferTimer = 1;
          }
        }
      }
    });
  }

}