Я пытаюсь получить окончательный результат транскрипции / распознавания речи из аудиопотока Fleck websocket. Метод OnOpen
выполняет код при первом установлении соединения через веб-сокет, а метод OnBinary
выполняет код при получении двоичных данных от клиента. Я проверил веб-сокет, повторив голос в веб-сокет и записав те же двоичные данные обратно в веб-сокет с той же скоростью. Этот тест сработал, поэтому я знаю, что двоичные данные отправляются правильно (640-байтовые сообщения с размером кадра 20 мс).
Поэтому мой код не работает, а не служба. Моя цель - сделать следующее:
- Когда соединение с веб-сокетом создано, отправьте начальный запрос аудиоконфигурации в API с помощью
SingleUtterance == true
- Запустить фоновую задачу, которая прослушивает результаты потоковой передачи, ожидая
isFinal == true
- Отправлять каждое полученное двоичное сообщение в API для транскрипции
- Когда фоновая задача распознает
isFinal == true
, остановите текущий потоковый запрос и создайте новый запрос - повторите шаги с 1 по 4
Контекст этого проекта транскрибирует все отдельные высказывания в прямом телефонном звонке.
socket.OnOpen = () =>
{
firstMessage = true;
};
socket.OnBinary = async binary =>
{
var speech = SpeechClient.Create();
var streamingCall = speech.StreamingRecognize();
if (firstMessage == true)
{
await streamingCall.WriteAsync(
new StreamingRecognizeRequest()
{
StreamingConfig = new StreamingRecognitionConfig()
{
Config = new RecognitionConfig()
{
Encoding = RecognitionConfig.Types.AudioEncoding.Linear16,
SampleRateHertz = 16000,
LanguageCode = "en",
},
SingleUtterance = true,
}
});
Task getUtterance = Task.Run(async () =>
{
while (await streamingCall.ResponseStream.MoveNext(
default(CancellationToken)))
{
foreach (var result in streamingCall.ResponseStream.Current.Results)
{
if (result.IsFinal == true)
{
Console.WriteLine("This test finally worked");
}
}
}
});
firstMessage = false;
}
else if (firstMessage == false)
{
streamingCall.WriteAsync(new StreamingRecognizeRequest()
{
AudioContent = Google.Protobuf.ByteString.CopyFrom(binary, 0, 640)
}).Wait();
}
};