Microsoft Zira Desktopを使う方法を教えてください。

解決


AS  2018-02-23 04:09:03  No: 48999  IP: 192.*.*.*

以前、音声合成のプログラムを紹介していただきましたが、
in the middle of 1990s.
を発音させると1990を日本語で読んで、これは駄目だと諦めていました。
ところが、今日、Vectorからダウンロードしたソフトはこれをきちんと
読みました。
Microsoft Zira Desktop  という音声なんですが、
ネットを探してもC言語の解説ばかりで、全く分かりません。

Microsoft Haruka DesktopとMicrosoft Zira Desktopのdelphiでの
使い方を詳しく教えてください。

使っているのは、Win8,10でdelphiはXE5です。
よろしくお願いします。

編集 削除
take  2018-02-23 10:35:49  No: 49000  IP: 192.*.*.*

Microsoft Haruka Desktopは日本語読み上げ用なのでそもそも英語読まないかと
Microsoft Zira Desktopは英語読み上げようなので期待通り読み上げると思います。
(読み間違える単語は辞書を作るそうですが)
どちらもSAPI(Speech Application Programming Interface)に対応していますので
SAPI経由で制御すれば良いかと思います。

SAPIをDelphiで使う方法
http://netakiri.net/labo/rcg_index.shtml

音声合成だけじゃなくて音声認識にも使えるみたいですね

余談ですが音声合成で選べる「声質」も古くから規格化されているようで
使用するPCのメーカ−によっては多数の声質が選べる場合があります。

編集 削除
AS  2018-02-23 18:31:41  No: 49001  IP: 192.*.*.*

takeさん、ありがとうございました。

http://support.microsoft.com/kb/320207/ja  から
SpeechSDK51.exe
SpeechSDK51LangPack.xe
をダウンロードして、それぞれのフォルダ内で実行・解凍した後
それぞれのsetup.exeを実行して、Installしました。
その後コントロールパネルの音声認識をクリックして、
音声合成の中の音声を選択したら、英語らしい発音になりました。

ただ、Ziraを使うとHarukaが使えません。
プログラムからどっちを使うか設定できる方法が知りたいです。
というか、
Vectorからダウンロードしたプログラムは、Ziraやharukaが交互に話しました。
この方法が知りたいのです。

分かる人がいたら、よろしくお願いします。

編集 削除
AS  2018-02-25 09:17:24  No: 49002  IP: 192.*.*.*

音声を選ぶselectVoiveというのがあって、声を選べるのだそうです。
コンパイルするときは問題ないのですが、実行時に
'selectVoice'はオートメーションオブジェクトでサポートしていません
というが出て、うまくいきません。
Delphi10.2でもだめでした。

あきらめなくてはなりませんかね??

  tts := CreateOleObject('SAPI.SpVoice');
  tts.selectVoice('Haruka');
  tts.Speak(WD);
  tts.Dispose();

編集 削除
igy  2018-02-27 00:40:27  No: 49003  IP: 192.*.*.*

Delphi Speech Application Program Interface (SAPI) Example
https://delphi.uz/delphi-windows-development/delphi-speech-application-program-interface-sapi-example/

で試したところ、TSpVoiceのVoiceプロパティで、
Microsoft Haruka Desktop、Microsoft Zira Desktop の切り替えができるみたいです。

編集 削除
AS  2018-03-02 12:15:16  No: 49004  IP: 192.*.*.*

igyさん、ありがとうございます。
行ってみたところ、下記の文とvideoがあるのは分かりましたが、
言語の切り替えは分かりませんでした。
私が何か見落としてますかね??



Delphi Speech Application Program Interface (SAPI) Example

SAPI (Speech Application Program Interface) is an application program interface (API) provided with the Microsoft Windows operating system that allows programmers to write programs that offer text-to-speech and speech recognition capabilities. Interfaces are provided for the C, C++, Visual Basic, C# and Delphi programming languages. Using Microsoft’s COM (Component Object Model) architecture, SAPI is the most widely used speech application program interface used today. In the future, Microsoft plans to embed speech technology using SAPI into their operating system.

SAPI has seven main components:
◾Voice Command
◾Voice Dictation
◾Voice Text
◾Voice Telephony
◾Direct Speech Recognition
◾Direct Text To Speech
◾Audio Objects

OK! Now we need to use Microsoft SAPI in our Delphi application. So, Let’s start with video tutorial.

編集 削除
igy  2018-03-02 15:25:00  No: 49005  IP: 192.*.*.*

> 私が何か見落としてますかね?? 

あのExampleのページには、Voiceプロパティの説明はないですが、
SpVoice Voice
とかで、検索すると情報が得られるのではないかと・・・

編集 削除
AS  2018-03-04 15:10:24  No: 49006  IP: 192.*.*.*

igyさん、ありがとうございます。

いろいろと調べてみます。

編集 削除
AS  2018-03-19 11:16:29  No: 49007  IP: 192.*.*.*

VBnetで作成して、winexecで使うという方針で、プログラムしました。

Imports System.Speech.Synthesis

Public Class Form1
    Dim WD As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Form1_TextGet()
        Dim sp As New System.Speech.Synthesis.SpeechSynthesizer
        sp.SelectVoice("Microsoft Haruka Desktop")
        sp.Speak(WD)
        sp.Dispose()
        Close()
    End Sub

    Private Sub Form1_TextGet()
        FileOpen(1, "c:\希望の国\日本語文.txt", OpenMode.Input)
        Input(1, Name)
        WD = Name
        FileClose()
    End Sub
End Class

で、下のように使ってみましたが、反応がありません。
procedure TForm1.ESpeak(WD:string);
var
  s:string;
begin
  s := 'c:\希望の国\EnglishSpeak.exe';
  WinExec(PAnsiChar(s), SW_SHOW);
end;

漢字がいけないのだろうと、
procedure TForm1.JSpeak(WD:string);
var
  s:string;
  res:boolean;
  Si: TStartupInfo;
  Pi: TProcessInformation;
begin
  s := 'c:\希望の国\JapaneseSpeak.exe';
  Res := CreateProcess(PChar(s),nil,nil,nil,False, CREATE_DEFAULT_ERROR_MODE,
                                                                nil,nil,SI, PI);
end;
としたら、「アプリケーションが正しく起動できません」と出ます。

また、いろいろと考えてみたいと思います。

delphiでは「System.Speech.Synthesis」を使用することはできないでしょうか?

編集 削除
過去ログ  2018-03-19 11:23:28  No: 49008  IP: 192.*.*.*


https://www.petitmonte.com/bbs/answers?question_id=6789

編集 削除
過去ログ  2018-03-19 11:31:56  No: 49009  IP: 192.*.*.*

間違えました。
DLL呼び出しではないのですね...

編集 削除
igy  2018-03-22 22:21:37  No: 49010  IP: 192.*.*.*

同じような質問が、Answers にもされているようです。

I want to use SelectVoice
https://community.embarcadero.com/answers/i-want-to-use-selectvoice

編集 削除
igy  2018-03-22 22:52:04  No: 49011  IP: 192.*.*.*

> I want to use SelectVoice 
https://community.embarcadero.com/answers/i-want-to-use-selectvoice 

は、削除されたようです。

編集 削除
igy  2018-03-22 23:56:03  No: 49012  IP: 192.*.*.*

そして、改めて、投稿されたようです。

How to use SelctVoice 
https://community.embarcadero.com/answers/how-to-use-selctvoice

編集 削除
AS  2018-03-24 07:18:21  No: 49013  IP: 192.*.*.*

igyさん、ありがとうございます。
ひょっとしたら、それは私の知人(弟子、後継者)かも知れません。

VBnetでプログラムしていたので、遅くなりましたが、
CreateProcessの方が上手くいきましたので、解決にします。
皆さん、ありがとうございました。


var
  s:string;
  res:boolean;
  Si: TStartupInfo;
  Pi: TProcessInformation;
begin
  s := 'c:\希望の国\JapaneseSpeak.exe';
  FillChar(SI, SizeOf(SI), #0);
  SI.cb := SizeOf(SI);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.wShowWindow := 1;
  Res := CreateProcess(PChar(s),nil,nil,nil,False, CREATE_DEFAULT_ERROR_MODE,
                                                                nil,nil,SI, PI);
end;

編集 削除