[C#] Windowsでの音声合成についてのデータ

色々情報を集めたので、まとめておこう。

1.Windows7では日本語非対応で、正式対応はWindows8以上。

2.Windows7でもSpeechlib ver11.0を入れれば日本語が使える。ただしこれを前提にプログラミングすると、Windows8でも同様のインストールが必須となる。
(using SpeechLib)

ライブラリ(x86用を使う事): http://www.microsoft.com/download/en/details.aspx?id=27225
日本語音声(ja-JP:haruka): http://www.microsoft.com/download/en/details.aspx?id=27224

3.正式対応後の書き方(System.Speech…)の場合、Windows7では日本語は再生されない。

4.ただし、以下のレジストリをいじって再生可能とする方法もある(Windows7)
(参考にさせていただいたサイト: http://qiita.com/Tsutomu-KKE@github/items/181994cb8afbdf698be2)

追加:http://plaza.harmonix.ne.jp/~fakira/turedure/addHaruka.reg
削除:http://plaza.harmonix.ne.jp/~fakira/turedure/delHaruka.reg

正式な書き方とは、たとえば以下。

using System.Speech.Synthesis;

namespace talktest
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            runTalk();
        }

        private void runTalk()
        {
            // Initialize a new instance of the SpeechSynthesizer.
            SpeechSynthesizer synth = new SpeechSynthesizer();

            // Configure the audio output. 
            synth.SetOutputToDefaultAudioDevice();

            ReadOnlyCollection<InstalledVoice> SynthList = synth.GetInstalledVoices();
            listVoice.Items.Clear();
            foreach (InstalledVoice voice in SynthList)
            {
                listVoice.Items.Add(voice.VoiceInfo.Name);
            }

			// 日本語非対応なら、これを実行しようとしたところで例外。
            //synth.SelectVoice("Microsoft Server Speech Text to Speech Voice (ja-JP, Haruka)");

            // 日本語非対応なら「Seventeen」と数字だけ英語で読み上げるだろう。
            synth.Speak("読み上げテストをしています。17");
        }
    }
}

ちなみに、11.0な書き方とは以下になる。

using SpeechLib;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        SpVoice h = new SpVoice();

        public Form1()
        {
            InitializeComponent();
            
            runTalk();
        }
        
        private void runTalk(){
            h.Speak(x);
        }

}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)