入力した文字を読み上げる ~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がしゃべります。
