Я работаю над речевым переводом, используя когнитивные службы Azure для речевого перевода. когда вызывающий абонент звонит на номер nexmo, я получаю его через веб-сокеты. Затем я использую лазурный речевой перевод для перевода текста в речь и записываю его в сокет для ответа на вызов nexmo, который просто отключается. Вот код, который я использую в веб-сокете:
var configWait = SpeechConfig.FromSubscription(_appSettings.azurecognitiveservicespeech_subscriptionkey, "centralus");
using (var audioOutputStream = AudioOutputStream.CreatePullStream())
using (var output = AudioConfig.FromStreamOutput(audioOutputStream))
using (var synthesizer1 = new SpeechSynthesizer(configWait, output))
using (var resultWait = await synthesizer1.SpeakTextAsync("Please Wait while next representative is available."))
{
if (resultWait.Reason == ResultReason.SynthesizingAudioCompleted)
{
var ttsAudio = resultWait.AudioData;
const int chunkSize = 320;
var chunkCount = 1;
var offset = 0;
var lastFullChunck = ttsAudio.Length < (offset + chunkSize);
try
{
while (!lastFullChunck)
{
await socket.SendAsync(new ArraySegment<byte>(ttsAudio, offset, chunkSize), result.MessageType, false, CancellationToken.None);
offset = chunkSize * chunkCount;
lastFullChunck = ttsAudio.Length < (offset + chunkSize);
chunkCount++;
}
var lastMessageSize = ttsAudio.Length - offset;
await socket.SendAsync(new ArraySegment<byte>(ttsAudio, offset, lastMessageSize), result.MessageType, true, CancellationToken.None);
}
catch (Exception ex)
{
}
}
}