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

解決


AS  2018-02-23 13:09:03  No: 48999

以前、音声合成のプログラムを紹介していただきましたが、
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 19:35:49  No: 49000

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-24 03:31:41  No: 49001

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

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

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

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


AS  2018-02-25 18:17:24  No: 49002

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

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

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


igy  2018-02-27 09:40:27  No: 49003

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 21:15:16  No: 49004

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-03 00:25:00  No: 49005

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

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


AS  2018-03-05 00:10:24  No: 49006

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

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


AS  2018-03-19 20:16:29  No: 49007

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 20:23:28  No: 49008


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


過去ログ  2018-03-19 20:31:56  No: 49009

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


igy  2018-03-23 07:21:37  No: 49010

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

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


igy  2018-03-23 07:52:04  No: 49011

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

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


igy  2018-03-23 08:56:03  No: 49012

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

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


AS  2018-03-24 16:18:21  No: 49013

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;


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加