入力した文字を読み上げる ~Delphiソースコード集
~Delphiで入力したテキスト文字列を読み上げてWindows10が喋る(Windows10が喋る、話す)
1.Delphiを起動
Delphiを起動して「ファイル」⇒「新規作成」⇒「Windows VCL アプリケーション -Delphi」をクリックしてVCLプロジェクトを作成します。フォームにTButtonを1つ、TEditを1つ配置します。
「ファイル」⇒「すべて保存」をクリックして、プロジェクトとユニットを保存します。
2.タイプライブラリの取り込み
「コンポーネント」⇒「コンポーネントのインポート」をクリックします。「タイプライブラリの取り込み」を選択して「次へ」をクリックします。
「Microsoft Speech Object Library 5.4 C:\WINDOWS\System32\Speech_OneCore\Common\sapi_onecore.dll」を選択して「次へ」をクリックします。
ユニットディレクトリ名を、上記で「すべて保存」を行った時のプロジェクトの保存先フォルダを指定して「次へ」をクリックします。
「xxxx.dproj プロジェクトにユニットを追加」を選択して「完了」をクリックします。
タイプライブラリ「xxxx.dproj」が作成されましたのでフォームのユニット(デフォルトの場合は[Unit1])タブをクリックします。
フォームが表示されます。
3.ソースコードの記述
Button1ダブルクリックしてソースを記述します。unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation uses SpeechLib_TLB; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Voice: ISpVoice; ObjectTokenCategory: ISpObjectTokenCategory; ObjectTokens: IEnumSpObjectTokens; ObjectToken : ISpObjectToken; StreamNumber: Cardinal; n: Cardinal; begin Voice := CoSpVoice.Create(); Voice.GetVoice(ObjectToken); ObjectToken.GetCategory(ObjectTokenCategory); //411:日本語 male:男性の声 の場合 ObjectTokenCategory.EnumTokens( 'language=411;gender=male', '', ObjectTokens ); //411:日本語 female:女性の声 の場合 // ObjectTokenCategory.EnumTokens( // 'language=411;gender=female', '', ObjectTokens // ); ObjectTokens.GetCount(n); if n > 0 then begin ObjectTokens.Item(0, ObjectToken); Voice.SetVoice(ObjectToken); end; Voice.SetRate(0);//-10~10 話す速度 Voice.SetVolume(50);//0~100 音量 Voice.Speak(PWideChar(Edit1.Text), 0, StreamNumber); end; end.
4.実行する
「実行」⇒「実行(F9)」などからコンパイルして実行します。Edit1に話させたい文字列を入力してButton1をクリックするとWindows10がしゃべります。