/// <summary> /// /// </summary> /// <param name="settings"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public override Task <IStreamingRecognition> StartStreamingRecognitionAsync(AudioSettings?settings = null, CancellationToken cancellationToken = default) { settings ??= SupportedStreamingSettings.First(); return(Task.FromResult <IStreamingRecognition>( new WitAiStreamingRecognition(settings, Token))); }
/// <summary> /// /// </summary> /// <param name="settings"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public override async Task <IStreamingRecognition> StartStreamingRecognitionAsync( AudioSettings?settings = null, CancellationToken cancellationToken = default) { settings ??= SupportedStreamingSettings.First(); IamToken ??= await RequestIamTokenByOAuthTokenAsync(OAuthToken, cancellationToken).ConfigureAwait(false); var channel = new Channel("stt.api.cloud.yandex.net", 443, new SslCredentials()); var client = new SttService.SttServiceClient(channel); var call = client.StreamingRecognize(new Metadata { { "authorization", $"Bearer {IamToken}" } }, cancellationToken: cancellationToken); await call.RequestStream.WriteAsync(new StreamingRecognitionRequest { Config = new RecognitionConfig { Specification = new RecognitionSpec { LanguageCode = Lang, ProfanityFilter = ProfanityFilter, Model = Topic, AudioEncoding = settings.Format switch { AudioFormat.Ogg => RecognitionSpec.Types.AudioEncoding.OggOpus, AudioFormat.Raw => RecognitionSpec.Types.AudioEncoding.Linear16Pcm, _ => RecognitionSpec.Types.AudioEncoding.Unspecified, },
/// <summary> /// /// </summary> public WitAiRecognizer() { AddSetting(nameof(Token), o => Token = o, NoEmpty, string.Empty); SupportedSettings.Add(new AudioSettings(AudioFormat.Wav)); SupportedStreamingSettings.Add(new AudioSettings(AudioFormat.Wav)); }
/// <summary> /// /// </summary> public YandexRecognizer() { AddSetting(nameof(FolderId), o => FolderId = o, Any, string.Empty); AddSetting(nameof(OAuthToken), o => OAuthToken = o, NoEmpty, string.Empty); AddEnumerableSetting(nameof(Lang), o => Lang = o, NoEmpty, new[] { "ru-RU", "en-US", "uk-UK", "tr-TR" }); AddEnumerableSetting(nameof(Topic), o => Topic = o, NoEmpty, new[] { "general", "maps", "dates", "names", "numbers" }); AddEnumerableSetting(nameof(ProfanityFilter), o => ProfanityFilter = o == "true", NoEmpty, new[] { "false", "true" }); SupportedSettings.Add(new AudioSettings()); SupportedSettings.Add(new AudioSettings(rate: 48000)); SupportedSettings.Add(new AudioSettings(rate: 16000)); SupportedSettings.Add(new AudioSettings(AudioFormat.Ogg)); SupportedStreamingSettings.Add(new AudioSettings()); SupportedStreamingSettings.Add(new AudioSettings(rate: 48000)); SupportedStreamingSettings.Add(new AudioSettings(rate: 16000)); SupportedStreamingSettings.Add(new AudioSettings(AudioFormat.Ogg)); }