startRecording method

Future<Stream<Uint8List>?> startRecording({
  1. int sampleRate = 16000,
  2. int numChannels = 1,
})

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