generateSpeechStream method
Generate speech with streaming output
request
- The TTS request configuration
Returns a stream of audio events
Implementation
@override
Stream<GoogleTTSStreamEvent> generateSpeechStream(
GoogleTTSRequest request) async* {
try {
final requestBody = request.toJson();
// Use the appropriate TTS model if not specified
final model = request.model ?? _config.model;
final stream = _client.postStream(
'models/$model:streamGenerateContent',
data: requestBody,
);
await for (final chunk in stream) {
try {
final data = chunk.data;
if (data is Map<String, dynamic>) {
// Check if this chunk contains audio data
final candidate = data['candidates']?[0];
final content = candidate?['content'];
final parts = content?['parts'];
final inlineData = parts?[0]?['inlineData'];
final audioData = inlineData?['data'] as String?;
if (audioData != null) {
// Decode base64 audio data
final audioBytes = base64.decode(audioData);
yield GoogleTTSAudioDataEvent(data: audioBytes);
}
// Check for completion
if (candidate?['finishReason'] != null) {
final response = GoogleTTSResponse.fromApiResponse(data);
yield GoogleTTSCompletionEvent(response);
}
}
} catch (e) {
yield GoogleTTSErrorEvent(
message: 'Error processing stream chunk: $e');
}
}
} catch (e) {
yield GoogleTTSErrorEvent(message: 'Google TTS streaming failed: $e');
}
}