Esempio n. 1
0
        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, "");
        }
Esempio n. 2
0
        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;
     }
 }