textToSpeech method
Convert text to speech with full configuration support
Throws UnsupportedError if not supported. Check supportedFeatures first.
Implementation
@override
Future<TTSResponse> textToSpeech(TTSRequest request) async {
// Basic validation - let the provider handle specific limits
if (request.text.isEmpty) {
throw const InvalidRequestError('Text input cannot be empty');
}
final requestBody = <String, dynamic>{
'model': request.model ?? ProviderDefaults.openaiDefaultTTSModel,
'input': request.text,
'voice': request.voice ?? ProviderDefaults.openaiDefaultVoice,
if (request.format != null) 'response_format': request.format,
if (request.speed != null) 'speed': request.speed,
};
final audioData = await client.postRaw('audio/speech', requestBody);
// Determine content type based on format
String contentType = 'audio/mpeg'; // Default for mp3
if (request.format != null) {
switch (request.format!.toLowerCase()) {
case 'mp3':
contentType = 'audio/mpeg';
break;
case 'opus':
contentType = 'audio/opus';
break;
case 'aac':
contentType = 'audio/aac';
break;
case 'flac':
contentType = 'audio/flac';
break;
case 'wav':
contentType = 'audio/wav';
break;
case 'pcm':
contentType = 'audio/pcm';
break;
default:
contentType = 'audio/mpeg';
}
}
return TTSResponse(
audioData: audioData,
contentType: contentType,
voice: request.voice,
model: request.model,
duration: null, // OpenAI doesn't provide duration
sampleRate: null, // OpenAI doesn't provide sample rate
usage: null,
);
}