transcribe static method
Transcribe audio data to text.
audioData - Raw audio bytes (PCM16 at 16kHz mono expected).
Returns the transcribed text.
Example:
final text = await RunAnywhere.transcribe(audioBytes);
Matches Swift: RunAnywhere.transcribe(_:)
Implementation
static Future<String> transcribe(Uint8List audioData) async {
if (!_isInitialized) {
throw SDKError.notInitialized();
}
if (!DartBridge.stt.isLoaded) {
throw SDKError.sttNotAvailable(
'No STT model loaded. Call loadSTTModel() first.',
);
}
final logger = SDKLogger('RunAnywhere.Transcribe');
logger.debug('Transcribing ${audioData.length} bytes of audio...');
final startTime = DateTime.now().millisecondsSinceEpoch;
final modelId = currentSTTModelId ?? 'unknown';
// Get model name for telemetry
final modelInfo =
await DartBridgeModelRegistry.instance.getPublicModel(modelId);
final modelName = modelInfo?.name;
// Calculate audio duration from bytes (PCM16 at 16kHz mono)
// Duration = bytes / 2 (16-bit = 2 bytes) / 16000 Hz * 1000 ms
final calculatedDurationMs = (audioData.length / 32).round();
try {
final result = await DartBridge.stt.transcribe(audioData);
final latencyMs = DateTime.now().millisecondsSinceEpoch - startTime;
// Use calculated duration if C++ returns 0
final audioDurationMs =
result.durationMs > 0 ? result.durationMs : calculatedDurationMs;
// Count words in transcription
final wordCount = result.text.trim().isEmpty
? 0
: result.text.trim().split(RegExp(r'\s+')).length;
// Track transcription success with full metrics
TelemetryService.shared.trackTranscription(
modelId: modelId,
modelName: modelName,
audioDurationMs: audioDurationMs,
latencyMs: latencyMs,
wordCount: wordCount,
confidence: result.confidence,
language: result.language,
isStreaming: false, // Batch transcription
);
logger.info(
'Transcription complete: ${result.text.length} chars, confidence: ${result.confidence}');
return result.text;
} catch (e) {
// Track transcription failure
TelemetryService.shared.trackError(
errorCode: 'transcription_failed',
errorMessage: e.toString(),
context: {'model_id': modelId},
);
logger.error('Transcription failed: $e');
rethrow;
}
}