private async Task QueueText(string text, int index, AWSSpeechRequest request, AWSSpeechResult result) { var synthesizeSpeechRequest = new StartSpeechSynthesisTaskRequest { OutputFormat = request.OutputFormat, VoiceId = request.VoiceId, Text = text, OutputS3BucketName = _translationOptions.Bucket, OutputS3KeyPrefix = Guid.NewGuid().ToString() }; var response = await _pollyClient.StartSpeechSynthesisTaskAsync(synthesizeSpeechRequest); using (var waitHandle = new AutoResetEvent(false)) using (new Timer( callback: async(e) => { await CheckSynthesisTask(response.SynthesisTask.TaskId, waitHandle); }, state: null, dueTime: TimeSpan.Zero, period: TimeSpan.FromSeconds(_translationOptions.PollRate) ) ) { waitHandle.WaitOne(); } var task = await _pollyClient.GetSpeechSynthesisTaskAsync(new GetSpeechSynthesisTaskRequest { TaskId = response.SynthesisTask.TaskId }); if (task.SynthesisTask.TaskStatus == Amazon.Polly.TaskStatus.Failed) { throw new InvalidOperationException(); } var key = task.SynthesisTask.OutputUri.Split('/').Last(); var fileResult = await _fileClient.DownloadAsync(key, ""); using (var stream = await fileResult.OpenStreamAsync()) { await result.DigestBytes(index, stream); } if (request.CallBack != null) { await request.CallBack(text.Length); } await _fileClient.DeleteAsync(key, ""); }
public override async Task ProcessMessageAsync(QueueEvent queueEvent) { LogInfo($"queueEvent {JsonConvert.SerializeObject(queueEvent)}"); if (queueEvent.Event != null) { LogInfo($"testEvent {JsonConvert.SerializeObject(queueEvent)}"); return; } // read results from s3 bucket var bucket = queueEvent.Records.FirstOrDefault()?.S3.Bucket.Name; var plaintextFile = queueEvent.Records.FirstOrDefault()?.S3.Object.Key; var jobId = plaintextFile.Split('/')[1]; var getPlaintextRequest = new GetObjectRequest { Key = plaintextFile, BucketName = bucket }; var getPlaintextResponse = await _s3Client.GetObjectAsync(getPlaintextRequest); var plaintextList = new List <string>(); using (var streamReader = new StreamReader(getPlaintextResponse.ResponseStream)) { plaintextList = (streamReader.ReadToEnd()).SplitInParts(100000).ToList(); } LogInfo($"plaintextList {JsonConvert.SerializeObject(plaintextList)}"); foreach (var plaintextString in plaintextList) { // send text to polly var startPollyRequest = new StartSpeechSynthesisTaskRequest { Text = plaintextString, VoiceId = VoiceId.Kendra, OutputFormat = OutputFormat.Mp3, OutputS3BucketName = bucket, OutputS3KeyPrefix = $"mp3/{jobId}/", SnsTopicArn = _topicArn }; var response = await _pollyClient.StartSpeechSynthesisTaskAsync(startPollyRequest); LogInfo($"response {JsonConvert.SerializeObject(response)}"); } }
private Amazon.Polly.Model.StartSpeechSynthesisTaskResponse CallAWSServiceOperation(IAmazonPolly client, Amazon.Polly.Model.StartSpeechSynthesisTaskRequest request) { Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "Amazon Polly", "StartSpeechSynthesisTask"); try { #if DESKTOP return(client.StartSpeechSynthesisTask(request)); #elif CORECLR return(client.StartSpeechSynthesisTaskAsync(request).GetAwaiter().GetResult()); #else #error "Unknown build edition" #endif } catch (AmazonServiceException exc) { var webException = exc.InnerException as System.Net.WebException; if (webException != null) { throw new Exception(Utils.Common.FormatNameResolutionFailureMessage(client.Config, webException.Message), webException); } throw; } }