public Task <Transcription> CreateTranscriptionAsync(Transcription transcription) { if (transcription == null) { throw new ArgumentNullException(nameof(transcription)); } var path = $"{this.speechToTextBasePath}transcriptions/"; return(this.PostAsJsonAsync <Transcription, Transcription>(path, transcription)); }
static async Task TranscribeAsync() { Console.WriteLine("Starting transcriptions client..."); // Create the client object and authenticate var client = new HttpClient { Timeout = TimeSpan.FromMinutes(25), BaseAddress = new UriBuilder(Uri.UriSchemeHttps, $"{Region}.cris.ai", Port).Uri, DefaultRequestHeaders = { { "Ocp-Apim-Subscription-Key", SubscriptionKey } } }; var transcriptionDefinition = TranscriptionDefinition.Create( Name, Description, Locale, new Uri(RecordingsBlobUri)); var res = JsonConvert.SerializeObject(transcriptionDefinition); var sc = new StringContent(res); sc.Headers.ContentType = JsonMediaTypeFormatter.DefaultMediaType; Uri transcriptionLocation = null; using (var response = await client.PostAsync($"{SpeechToTextBasePath}Transcriptions/", sc)) { if (!response.IsSuccessStatusCode) { Console.WriteLine("Error {0} starting transcription.", response.StatusCode); return; } transcriptionLocation = response.Headers.Location; } Console.WriteLine($"Created transcription at location {transcriptionLocation}."); Console.WriteLine("Checking status."); var completed = false; // Check for the status of our transcriptions periodically while (!completed) { Transcription transcription = null; // Get all transcriptions for the user using (var response = await client.GetAsync(transcriptionLocation.AbsolutePath)) { var contentType = response.Content.Headers.ContentType; if (response.IsSuccessStatusCode && string.Equals(contentType.MediaType, "application/json", StringComparison.OrdinalIgnoreCase)) { transcription = await response.Content.ReadAsAsync <Transcription>(); } else { Console.WriteLine("Error with status {0} getting transcription result", response.StatusCode); continue; } } // For each transcription in the list we check the status switch (transcription.Status) { case "Failed": completed = true; Console.WriteLine("Transcription failed. Status: {0}", transcription.StatusMessage); break; case "Succeeded": completed = true; var webClient = new WebClient(); var filename = Path.GetTempFileName(); webClient.DownloadFile(transcription.ResultsUrls["channel_0"], filename); var results = File.ReadAllText(filename); Console.WriteLine($"Transcription succeeded. Results: {Environment.NewLine}{results}"); File.Delete(filename); break; case "Running": Console.WriteLine("Transcription is still running."); break; case "NotStarted": Console.WriteLine("Transcription has not started."); break; } await Task.Delay(TimeSpan.FromSeconds(5)); } Console.WriteLine("Press any key..."); Console.ReadKey(); }
private async static Task TranscribeAsync(BatchClient client) { Console.WriteLine("Deleting all existing completed transcriptions."); // get all transcriptions for the subscription PaginatedTranscriptions paginatedTranscriptions = null; do { if (paginatedTranscriptions == null) { paginatedTranscriptions = await client.GetTranscriptionsAsync().ConfigureAwait(false); } else { paginatedTranscriptions = await client.GetTranscriptionsAsync(paginatedTranscriptions.NextLink).ConfigureAwait(false); } // delete all pre-existing completed transcriptions. If transcriptions are still running or not started, they will not be deleted foreach (var transcriptionToDelete in paginatedTranscriptions.Values) { // delete a transcription await client.DeleteTranscriptionAsync(transcriptionToDelete.Self).ConfigureAwait(false); Console.WriteLine($"Deleted transcription {transcriptionToDelete.Self}"); } }while (paginatedTranscriptions.NextLink != null); // <transcriptiondefinition> var newTranscription = new Transcription { DisplayName = DisplayName, Locale = Locale, ContentUrls = new[] { RecordingsBlobUri }, //ContentContainerUrl = ContentAzureBlobContainer, Model = CustomModel, Properties = new TranscriptionProperties { IsWordLevelTimestampsEnabled = true, TimeToLive = TimeSpan.FromDays(1) } }; newTranscription = await client.CreateTranscriptionAsync(newTranscription).ConfigureAwait(false); Console.WriteLine($"Created transcription {newTranscription.Self}"); // </transcriptiondefinition> // get the transcription Id from the location URI var createdTranscriptions = new List <Uri> { newTranscription.Self }; Console.WriteLine("Checking status."); // get the status of our transcriptions periodically and log results int completed = 0, running = 0, notStarted = 0; while (completed < 1) { completed = 0; running = 0; notStarted = 0; // get all transcriptions for the user paginatedTranscriptions = null; do { // <transcriptionstatus> if (paginatedTranscriptions == null) { paginatedTranscriptions = await client.GetTranscriptionsAsync().ConfigureAwait(false); } else { paginatedTranscriptions = await client.GetTranscriptionsAsync(paginatedTranscriptions.NextLink).ConfigureAwait(false); } // delete all pre-existing completed transcriptions. If transcriptions are still running or not started, they will not be deleted foreach (var transcription in paginatedTranscriptions.Values) { switch (transcription.Status) { case "Failed": case "Succeeded": // we check to see if it was one of the transcriptions we created from this client. if (!createdTranscriptions.Contains(transcription.Self)) { // not created form here, continue continue; } completed++; // if the transcription was successful, check the results if (transcription.Status == "Succeeded") { var paginatedfiles = await client.GetTranscriptionFilesAsync(transcription.Links.Files).ConfigureAwait(false); var resultFile = paginatedfiles.Values.FirstOrDefault(f => f.Kind == ArtifactKind.Transcription); var result = await client.GetTranscriptionResultAsync(new Uri(resultFile.Links.ContentUrl)).ConfigureAwait(false); Console.WriteLine("Transcription succeeded. Results: "); Console.WriteLine(JsonConvert.SerializeObject(result, SpeechJsonContractResolver.WriterSettings)); } else { Console.WriteLine("Transcription failed. Status: {0}", transcription.Properties.Error.Message); } break; case "Running": running++; break; case "NotStarted": notStarted++; break; } } // for each transcription in the list we check the status Console.WriteLine(string.Format("Transcriptions status: {0} completed, {1} running, {2} not started yet", completed, running, notStarted)); }while (paginatedTranscriptions.NextLink != null); // </transcriptionstatus> // check again after 1 minute await Task.Delay(TimeSpan.FromMinutes(1)).ConfigureAwait(false); } Console.WriteLine("Press any key..."); Console.ReadKey(); }