startRecording method
Start a raw PCM16 chunk stream (no file). The canonical streaming-STT
input: chunks feed straight into RunAnywhere.transcribeStream(...).
Mirrors Swift's tap onAudioData Int16 PCM callback as a Dart stream.
Returns null when microphone permission is missing or capture fails.
Implementation
Future<Stream<Uint8List>?> startRecording({
int sampleRate = 16000,
int numChannels = 1,
}) async {
if (_isRecording) {
await stopRecording();
}
if (!await _recorder.hasPermission()) {
_logger.warning('Microphone permission not granted');
return null;
}
try {
final stream = await _recorder.startStream(RecordConfig(
encoder: AudioEncoder.pcm16bits,
sampleRate: sampleRate,
numChannels: numChannels,
));
_isRecording = true;
_currentRecordingPath = null;
_startAudioLevelMonitoring();
return stream;
} catch (e) {
_logger.error('Failed to start PCM capture: $e');
_isRecording = false;
return null;
}
}