@@ -3,7 +3,15 @@ use crate::v1::error::APIError;
33use crate :: v1:: helpers:: file_from_disk_to_form_part;
44use crate :: v1:: resources:: audio:: AudioSpeechParameters ;
55use crate :: v1:: resources:: audio:: AudioSpeechResponse ;
6+ #[ cfg( feature = "stream" ) ]
7+ use crate :: v1:: resources:: audio:: AudioSpeechResponseChunkResponse ;
68use crate :: v1:: resources:: audio:: { AudioTranscriptionParameters , AudioTranslationParameters } ;
9+ #[ cfg( feature = "stream" ) ]
10+ use futures:: Stream ;
11+ #[ cfg( feature = "stream" ) ]
12+ use futures:: StreamExt ;
13+ #[ cfg( feature = "stream" ) ]
14+ use std:: pin:: Pin ;
715
816pub struct Audio < ' a > {
917 pub client : & ' a Client ,
@@ -94,4 +102,35 @@ impl Audio<'_> {
94102
95103 Ok ( response)
96104 }
105+
106+ #[ cfg( feature = "stream" ) ]
107+ /// Generates audio from the input text.
108+ pub async fn create_speech_stream (
109+ & self ,
110+ parameters : AudioSpeechParameters ,
111+ ) -> Result <
112+ Pin < Box < dyn Stream < Item = Result < AudioSpeechResponseChunkResponse , APIError > > + Send > > ,
113+ APIError ,
114+ > {
115+ use crate :: v1:: resources:: audio:: StreamAudioSpeechParameters ;
116+
117+ let stream_parameters = StreamAudioSpeechParameters {
118+ model : parameters. model ,
119+ input : parameters. input ,
120+ voice : parameters. voice ,
121+ response_format : parameters. response_format ,
122+ speed : parameters. speed ,
123+ stream : true ,
124+ } ;
125+
126+ let stream = Box :: pin (
127+ self . client
128+ . post_stream_raw ( "/audio/speech" , & stream_parameters)
129+ . await
130+ . unwrap ( )
131+ . map ( |item| item. map ( |bytes| AudioSpeechResponseChunkResponse { bytes } ) ) ,
132+ ) ;
133+
134+ Ok ( stream)
135+ }
97136}
0 commit comments