start method
Start recording audio.
Implementation
Future<void> start() async {
if (_isRecording) return;
_buffer.clear();
_startTime = DateTime.now();
_isRecording = true;
// Use platform-appropriate recording command.
if (Platform.isMacOS) {
_process = await Process.start('rec', [
'-q', // Quiet
'-r', '$sampleRate', // Sample rate
'-c', '1', // Mono
'-b', '16', // 16-bit
'-t', _formatExtension(), // Output format
'-', // Stdout
]);
} else if (Platform.isLinux) {
_process = await Process.start('arecord', [
'-q',
'-r',
'$sampleRate',
'-c',
'1',
'-f',
'S16_LE',
'-t',
_formatExtension(),
'-',
]);
} else {
throw UnsupportedError(
'Audio recording not supported on ${Platform.operatingSystem}',
);
}
// Collect audio data and compute levels.
_process!.stdout.listen((data) {
_buffer.addAll(data);
// Compute audio level from PCM data.
if (data.length >= 2) {
final level = _computeLevel(data);
_levelController.add(level);
}
});
_process!.stderr.listen((_) {}); // Ignore stderr.
}