/// <summary> /// 关闭语音合成方法 /// </summary> /// <param name="provider"></param> /// <param name="callback"></param> /// <returns></returns> public static async Task CloseAsync(this ISynthesizerProvider provider, Func <SynthesizerStatus, Task>?callback = null) { var option = new SynthesizerOption() { MethodName = "bb_baidu_close_synthesizer", Callback = callback }; await provider.InvokeAsync(option); }
/// <summary> /// 关闭语音合成方法 /// </summary> /// <param name="service"></param> /// <param name="callback"></param> /// <returns></returns> public static async Task CloseAsync(this SynthesizerService service, Func <SynthesizerStatus, Task>?callback = null) { var option = new SynthesizerOption() { MethodName = "bb_baidu_close_synthesizer", Callback = callback }; await service.InvokeAsync(option); }
/// <summary> /// 语音合成方法 /// </summary> /// <param name="provider"></param> /// <param name="text"></param> /// <param name="callback"></param> /// <returns></returns> public static async Task SynthesizerOnceAsync(this ISynthesizerProvider provider, string?text, Func <SynthesizerStatus, Task>?callback = null) { var option = new SynthesizerOption() { Text = text, MethodName = "bb_baidu_speech_synthesizerOnce", Callback = callback }; await provider.InvokeAsync(option); }
/// <summary> /// 语音合成方法 /// </summary> /// <param name="service"></param> /// <param name="text"></param> /// <param name="callback"></param> /// <returns></returns> public static async Task SynthesizerOnceAsync(this SynthesizerService service, string?text, Func <SynthesizerStatus, Task> callback) { var option = new SynthesizerOption() { Text = text, MethodName = "bb_azure_speech_synthesizerOnce", Callback = callback }; await service.InvokeAsync(option); }
public async Task InvokeAsync(SynthesizerOption option) { var method = option.MethodName; var language = option.SpeechSynthesisLanguage; var recognitionLanguage = option.SpeechSynthesisVoiceName; var text = option.Text; if (option.Callback != null) { await option.Callback(SynthesizerStatus.Finished); } }
/// <summary> /// InvokeAsync 方法 /// </summary> /// <param name="option"></param> /// <returns></returns> public async Task InvokeAsync(SynthesizerOption option) { Option = option; if (Module == null) { Module = await JSRuntime.InvokeAsync <IJSObjectReference>("import", "./_content/BootstrapBlazor.AzureSpeech/js/speech.js"); } Interop ??= DotNetObjectReference.Create(this); if (Option.MethodName == "bb_azure_speech_synthesizerOnce" && !string.IsNullOrEmpty(Option.Text)) { // 通过 SubscriptionKey 交换 Token var token = await ExchangeToken(); await Module.InvokeVoidAsync(Option.MethodName, Interop, nameof(Callback), token, SpeechOption.Region, Option.SpeechSynthesisLanguage, Option.SpeechSynthesisVoiceName, Option.Text); } else if (Option.MethodName == "bb_azure_close_synthesizer") { // 停止语音 await Module.InvokeVoidAsync(Option.MethodName, Interop, nameof(Callback)); } }
/// <summary> /// /// </summary> /// <param name="option"></param> /// <returns></returns> public async Task InvokeAsync(SynthesizerOption option) { Option = option; // 加载模块 if (Module == null) { var moduleName = "./_content/BootstrapBlazor.BaiduSpeech/js/synthesizer.js"; Logger.LogInformation($"load module {moduleName}"); Module = await JSRuntime.InvokeAsync <IJSObjectReference>("import", moduleName); } Interop ??= DotNetObjectReference.Create(this); if (Option.MethodName == "bb_baidu_speech_synthesizerOnce" && !string.IsNullOrEmpty(Option.Text)) { var result = Client.Synthesis(Option.Text); if (result.Success) { await Module.InvokeVoidAsync(Option.MethodName, Interop, nameof(Callback), result.Data); } else { } Logger.LogInformation($"bb_baidu_speech_synthesizerOnce {result.Success}"); if (!result.Success) { Logger.LogError($"{result.ErrorCode}: {result.ErrorMsg}"); } } else if (Option.MethodName == "bb_baidu_close_synthesizer") { // 停止语音 await Module.InvokeVoidAsync(Option.MethodName, Interop, nameof(Callback)); Logger.LogInformation("bb_baidu_close_synthesizer"); } }
/// <summary> /// 语音合成回调方法 /// </summary> /// <param name="option"></param> /// <returns></returns> public Task InvokeAsync(SynthesizerOption option) => Provider.InvokeAsync(option);