ブログ

割とコンピュータよりの情報をお届けします。

2018/6/22

Windows 10で.NET FrameworkからSAPIを使って音声合成

WIndows 10ならCefsharpで音声合成が使えない場合にも,日本語音声合成がC#などから使える。

COMオブジェクトのMicrosoft Speech Object Libraryを参照に追加するとSpeechLib名前空間に読み込まれるのでそれを用いれば簡単に音声合成ができる。

遅延バインディングでも良いがコード補完などの機能が使えなくなるので開発の効率が大きく損なわれる。

例えば以下のようなコード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SpeechLib;

namespace VoiceTEST
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            SpVoice sp = new SpeechLib.SpVoice();
            sp.Speak("テスト");
        }
    }
}

Windows 10なら音声合成使えるのに...

≫ Read More

2018/06/22 コンピュータ   TakeMe

Electronなら音声合成ができるようだ

Cefsharpで音声合成ができなかったようだったのでいろいろ調べていたらElectronならできそう。

参考ページを見て追加で,以下のコードを<body>内にある<script>の中に入れて様子を見ていると,読み上げができている。

var synthes = new SpeechSynthesisUtterance();
synthes.text  = 'こんにちは';
synthes.rate  = 1.0; 
synthes.pitch = 1.0;  
synthes.lang  = "ja-JP"; 
speechSynthesis.speak(synthes);

ElectronはCEFでなかったかな?

なかなかわからない。
もちろんC#でもWindows 10であればSAPIを使用して音声合成できるようなので問題ないのだが,幾分Windows 7を使っているユーザがいるのでCEFの側でできていたら良いなぁと思っていたが ...

もう少し検討が必要だ。

≫ Read More

2018/06/22 コンピュータ   TakeMe

GeckoFX45.64の仕様?

CefSharpで音声合成が使えなかったので他の方法を探っている途中で見つけた仕様。

NuGetでGeckofx45.64 バージョン45.0.34パッケージをインストールして以下のようなコードを書いてみたところ,どうもうまくいかなかった。そもそも起動しない。

using Gecko;

namespace GeckoFXTest
{
    public partial class Form1 : Form
    {
        private GeckoWebBrowser geckoWebBrowser;
        public Form1()
        {
            InitializeComponent();

            Xpcom.Initialize("Firefox64");
            geckoWebBrowser = new GeckoWebBrowser { Dock = DockStyle.Fill };
            this.Controls.Add(geckoWebBrowser);
            geckoWebBrowser.Dock = DockStyle.Fill;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            geckoWebBrowser.Navigate("file:///C:/GeckoFXTest/html-resources/html/index.html");
        }
    }
}

パッケージインストールでできるFirefoxフォルダを実行ファイルのあるフォルダにFirefox64としてコピーしなければいけない仕様だった。

わかりにくい仕様だ(しかも標準では32ビット優先になっているから起動時にエラーが出てしまうので32ビット優先を解かなければならない)

ただGeckofx45も入れておけば起動時にx86とx64を切り替えられそう(両方のフォルダをコピーしておいて起動時に切り替えできるか?)。

それは後にして,音声合成の方だがまず使い始めの標準的な設定では使えなかった。こちらも調査中

≫ Read More

2018/06/22 コンピュータ   TakeMe