Ответ может быть немного запоздалым, но вот как я это сделал:
Config = new RecognitionConfig()
{
Encoding =
RecognitionConfig.Types.AudioEncoding.Linear16,
SampleRateHertz = 16000,
LanguageCode = "tr-TR",
},
InterimResults = false,
SingleUtterance = true,
1) Вы устанавливаете флаг единственное высказывание = true, как указано выше.
2) Создайте переменную, например, var translationEnded = false;перед выполнением задачи
3) В цикле результатов захватить событие (пример ниже)
Task printResponses = Task.Run(async () =>
{
while (await streamingCall.ResponseStream.MoveNext(
default(CancellationToken)))
{
if (streamingCall.ResponseStream.Current.SpeechEventType ==
StreamingRecognizeResponse.Types.SpeechEventType.EndOfSingleUtterance)
{
recognitionEnded = true;
Debug.WriteLine("End of detection");
}
foreach (var result in streamingCall.ResponseStream
.Current.Results)
{
foreach (var alternative in result.Alternatives)
{
Debug.WriteLine(alternative.Transcript);
}
}
}
});
4) После StartRecording просто подождать, пока Параметр translationEnded установит значение true (пример ниже)
Debug.WriteLine("Speak now.");
waveIn.StartRecording();
while(!recognitionEnded) {; }
waveIn.StopRecording();
Debug.WriteLine("End of recording");