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