@@ -73,15 +73,28 @@ public async Task<SpeechClip> GetSpeechAsync(SpeechRequest request, Action<Speec
73
73
74
74
Rest . TryGetDownloadCacheItem ( clipName , out var cachedPath ) ;
75
75
76
- var part = 0 ;
77
- var pcmResponse = await Rest . PostAsync ( GetUrl ( "/speech" ) , payload , StreamCallback , 8192 , new RestParameters ( client . DefaultRequestHeaders ) , cancellationToken ) ;
78
- pcmResponse . Validate ( EnableDebug ) ;
79
- await File . WriteAllBytesAsync ( cachedPath , pcmResponse . Data , cancellationToken ) . ConfigureAwait ( true ) ;
80
- return new SpeechClip ( clipName , cachedPath , new ReadOnlyMemory < byte > ( pcmResponse . Data ) ) ;
81
-
82
- void StreamCallback ( Response partialResponse )
76
+ switch ( request . ResponseFormat )
83
77
{
84
- partialClipCallback ? . Invoke ( new SpeechClip ( $ "{ clipName } _{ ++ part } ", null , partialResponse . Data ) ) ;
78
+ case SpeechResponseFormat . PCM :
79
+ {
80
+ var part = 0 ;
81
+ var pcmResponse = await Rest . PostAsync ( GetUrl ( "/speech" ) , payload , partialResponse =>
82
+ {
83
+ partialClipCallback ? . Invoke ( new SpeechClip ( $ "{ clipName } _{ ++ part } ", null , partialResponse . Data ) ) ;
84
+ } , 8192 , new RestParameters ( client . DefaultRequestHeaders ) , cancellationToken ) ;
85
+ pcmResponse . Validate ( EnableDebug ) ;
86
+ await File . WriteAllBytesAsync ( cachedPath , pcmResponse . Data , cancellationToken ) . ConfigureAwait ( true ) ;
87
+ return new SpeechClip ( clipName , cachedPath , new ReadOnlyMemory < byte > ( pcmResponse . Data ) ) ;
88
+ }
89
+ default :
90
+ {
91
+ var audioResponse = await Rest . PostAsync ( GetUrl ( "/speech" ) , payload , new RestParameters ( client . DefaultRequestHeaders ) , cancellationToken ) ;
92
+ audioResponse . Validate ( EnableDebug ) ;
93
+ await File . WriteAllBytesAsync ( cachedPath , audioResponse . Data , cancellationToken ) . ConfigureAwait ( true ) ;
94
+ var audioType = request . ResponseFormat == SpeechResponseFormat . MP3 ? AudioType . MPEG : AudioType . WAV ;
95
+ var finalClip = await Rest . DownloadAudioClipAsync ( cachedPath , audioType , fileName : clipName , cancellationToken : cancellationToken ) ;
96
+ return new SpeechClip ( clipName , cachedPath , finalClip ) ;
97
+ }
85
98
}
86
99
}
87
100
@@ -91,6 +104,7 @@ void StreamCallback(Response partialResponse)
91
104
/// <param name="request"><see cref="AudioTranscriptionRequest"/>.</param>
92
105
/// <param name="cancellationToken">Optional, <see cref="CancellationToken"/>.</param>
93
106
/// <returns>The transcribed text.</returns>
107
+ [ Function ( "Transcribes audio into the input language. Returns transcribed text." ) ]
94
108
public async Task < string > CreateTranscriptionTextAsync ( AudioTranscriptionRequest request , CancellationToken cancellationToken = default )
95
109
{
96
110
var response = await Internal_CreateTranscriptionAsync ( request , cancellationToken ) ;
@@ -106,6 +120,7 @@ public async Task<string> CreateTranscriptionTextAsync(AudioTranscriptionRequest
106
120
/// <param name="request"><see cref="AudioTranscriptionRequest"/>.</param>
107
121
/// <param name="cancellationToken">Optional, <see cref="CancellationToken"/>.</param>
108
122
/// <returns><see cref="AudioResponse"/>.</returns>
123
+ [ Function ( "Transcribes audio into the input language. Returns Json parsed AudioResponse." ) ]
109
124
public async Task < AudioResponse > CreateTranscriptionJsonAsync ( AudioTranscriptionRequest request , CancellationToken cancellationToken = default )
110
125
{
111
126
if ( request . ResponseFormat is not ( AudioResponseFormat . Json or AudioResponseFormat . Verbose_Json ) )
@@ -170,6 +185,7 @@ private async Task<string> Internal_CreateTranscriptionAsync(AudioTranscriptionR
170
185
/// <param name="request"></param>
171
186
/// <param name="cancellationToken"></param>
172
187
/// <returns>The translated text.</returns>
188
+ [ Function ( "Translates audio into English. Returns translated text." ) ]
173
189
public async Task < string > CreateTranslationTextAsync ( AudioTranslationRequest request , CancellationToken cancellationToken = default )
174
190
{
175
191
var responseAsString = await Internal_CreateTranslationAsync ( request , cancellationToken ) ;
@@ -185,6 +201,7 @@ public async Task<string> CreateTranslationTextAsync(AudioTranslationRequest req
185
201
/// <param name="cancellationToken"></param>
186
202
/// <returns></returns>
187
203
/// <exception cref="ArgumentException"></exception>
204
+ [ Function ( "Translates audio into English. Returns Json parsed AudioResponse." ) ]
188
205
public async Task < AudioResponse > CreateTranslationJsonAsync ( AudioTranslationRequest request , CancellationToken cancellationToken = default )
189
206
{
190
207
if ( request . ResponseFormat is not ( AudioResponseFormat . Json or AudioResponseFormat . Verbose_Json ) )
0 commit comments