/// <summary> /// テキストを読み上げる /// </summary> /// <param name="text">読み上げるテキスト</param> public async void Speak( string text, PlayDevices playDevice = PlayDevices.Both, VoicePalettes voicePalette = VoicePalettes.Default, bool isSync = false, float?volume = null) { if (string.IsNullOrWhiteSpace(text)) { return; } // 起動していなければ起動させる var err = await this.StartAsync(); if (!string.IsNullOrEmpty(err)) { this.GetLogger().Error($"VOICEROID Speeak error text={text}, err={err}"); return; } var process = this.Config.GetSelected()?.InnerProcess; if (process == null) { return; } // アクティブにさせないようにする this.SetNotActiveWindow(process.MainWindowHandle); if (this.Config.DirectSpeak) { // 直接再生する if (await process.SetTalkText(text)) { if (!await process.Play()) { this.GetLogger().Error($"VOICEROID Speeak error text={text}"); return; } } return; } // 現在の条件をハッシュ化してWAVEファイル名を作る var wave = this.GetCacheFileName( Settings.Default.TTS, text, this.Config.ToString()); if (!File.Exists(wave)) { // 音声waveファイルを生成する if (await process.SetTalkText(text)) { var result = await process.Save(wave); if (!result.IsSucceeded) { this.GetLogger().Error($"VOICEROID Speeak error text={text}, err={result.Error}, extra={result.ExtraMessage}"); return; } } } // 再生する SoundPlayerWrapper.Play(wave, playDevice, isSync, volume); }