WebView2なら音声読み上げを入れることができる.SAPIの代わりに使いたい場合には動的にJavaScriptを実行するようにならないといけないな。と思って修正.
SAPIの代わりに使う場合には,WebView2.CoreWebView2.ExecuteScriptAsyncを使えばよい.
例えとして下にサンプルを示す.
ただし,この例では毎回var synthes = new SpeechSynthesisUtterance()とやっているので注意して.オーバーヘッドが大きい.
もともとWindows 10の場合にはすでにSAPIがあるので読み上げ機能を使うだけでやるのは意味はない.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); string path = Directory.GetCurrentDirectory(); path = path + @"\\index.html"; this.webView21.Source = new Uri(path); } private async void button1_Click(object sender, EventArgs e) { string text = "var synthes = new SpeechSynthesisUtterance('こんにちは');" + "speechSynthesis.speak(synthes);"; await this.webView21.CoreWebView2.ExecuteScriptAsync(text); } } }
WebView2.CoreWebView2.ExecuteScriptAsyncがつかえるのはページを読み終わって表示し終わってからだと思う.その前に実行すると例外が発生すると思う.
SAPIだけでやる場合には以下のように行うのです.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { class Program { static void Main(string[] args) { SpeechLib.SpVoice sp = new SpeechLib.SpVoice(); sp.Speak("アレクサ。今なんじ"); } } }