各位大虾,tts到底怎么使用呀,怎么Speek,执行就出错呀
还望各位指点一二,
小弟感激不尽;
能写个例子将不胜感激;

解决方案 »

  1.   

    以下例子应该可以的,我就通过它作过一个简单的朗读器首 先 从 金 山 词 霸 的 光 盘 上\ciba 目 录 下 运 行 并 安 装mstts.exe(MS TTS engine) 和spchapi.exe(MS Speech API)。 ----再 在Delphi 里 新 建 一 个Application。 ----然 后 从Delphi 的 菜 单Project/Import Type Library... 中 选 击Add..., 浏 览 到Windows 目 录 下 的Speech 子 目 录 里, 打 开vtxtauto.tlb, 可 以 看 到 下 面Class names 中 会 出 现 我 们 需 要 的 接 口 的 包 装 类 的 名 字TVTxtAuto, 注 意 对 话 框 底 部 的Generate Component Wrapper 需 要 被 选 中, 点 击Create Unit 就 可 以 打 开 一 个 名 为VTxtAuto_TLB 的Unit。 ----至 此, 我 们 就 可 以 开 始 实 际 编 程 了。 ----首 先 在Form 的OnCreate 中 对 需 要 使 用 接 口 初 始 化 并 进 行 注 册:     ...
        procedure TfrmMain.FormCreate(Sender: TObject);
        begin
        FISpeech := CoVTxtAuto_.Create;
        FISpeech.Register(‘Demo Site', ‘Demo App');
        end;
    ...----由 于Delphi 对 接 口 进 行 了 良 好 的 包 装, 因 此 只 需 直 接 建 立 包 装 类, 其 他 后 台 的 操 作 如 接 口 的 查 询、 释 放 等 交 给Delphi 在 后 台 自 动 完 成。 ----注 意 这 里 的Register 操 作 是 必 不 可 少 的, 因 为 可 能 有 多 个 程 序 不 同 设 置 使 用TTS 引 擎。 ----然 后 在MainForm 上 放 一 个TMemo 和 若 干 个 TButton, 并 在 其OnClick 中 加 入 对 应 的 代 码。 Form 定 义 如 下:     object frmMain: TfrmMain
          Left = 296
          Top = 187
          BorderStyle = bsDialog
          Caption = ‘ 英 文 全 文 朗 读 演 示'
          ClientHeight = 185
          ClientWidth = 456
          Color = clBtnFace
          Font.Charset = GB2312_CHARSET
          Font.Color = clWindowText
          Font.Height = -12
          Font.Name = ‘ 宋 体'
          Font.Style = []
          OldCreateOrder = False
          Position = poDesktopCenter
          OnCreate = FormCreate
          PixelsPerInch = 96
          TextHeight = 12
          object memText: TMemo
            Left = 8
            Top = 8
            Width = 361
            Height = 169
            ScrollBars = ssVertical
            TabOrder = 0
          end
          object btnRead: TButton
            Left = 376
            Top = 8
            Width = 75
            Height = 25
            Caption = ‘ 朗 读( &R)'
            TabOrder = 1
            OnClick = btnReadClick
          end
          object btnPause: TButton
            Left = 376
            Top = 40
            Width = 75
            Height = 25
            Caption = ‘ 暂 停( &P)'
            Enabled = False
            TabOrder = 2
            OnClick = btnPauseClick
          end
          object btnStop: TButton
            Left = 376
            Top = 72
            Width = 75
            Height = 25
            Caption = ‘ 停 止( &S)'
            Enabled = False
            TabOrder = 3
            OnClick = btnStopClick
          end
          object btnForward: TButton
            Left = 376
            Top = 120
            Width = 75
            Height = 25
            Caption = ‘ 下 一 句( &N)'
            Enabled = False
            TabOrder = 4
            OnClick = btnForwardClick
          end
          object btnRewind: TButton
            Left = 376
            Top = 152
            Width = 75
            Height = 25
            Caption = ‘ 上 一 句( &W)'
            Enabled = False
            TabOrder = 5
            OnClick = btnRewindClick
          end
        end----关 键 代 码 段 如 下: ---- 1. 朗 读 与 停 止     ...
    procedure TfrmMain.btnReadClick(Sender: TObject);
        begin
          FISpeech.Speak(memText.Lines.Text, vtxtst_ 
    READING);
          btnPause.Enabled := True;
          btnStop.Enabled  := True;
        end;
        
    procedure TfrmMain.btnStopClick(Sender: TObject);
        begin
          FISpeech.StopSpeaking;
          btnPause.Enabled := False;
          btnStop.Enabled  := False;
          btnPause.Caption := ‘ 暂 停( &P)';
        end;
          ...----Speak 成 员 函 数 的 第 一 个 参 数 向TTS 引 擎 传 递 需 要 朗 读 的 文 字, 第 二 个 参 数 由 指 定 朗 读 时 使 用 的 语 气 和 优 先 级 的 两 个 符 号 合 并 而 成。  ---- 2. 暂 停 与 恢 复     ...
    procedure TfrmMain.btnPauseClick(Sender: TObject);
        begin
          with FISpeech do
          if IsSpeaking then
          begin
            AudioPause;
            btnPause.Caption := ‘ 恢 复( &R)';
          end
          else
          begin
            AudioResume;
            btnPause.Caption := ‘ 暂 停( &P)';
          end;
    end;
    ...----这 里 通 过IsSpeaking 属 性 可 以 取 得 当 前 状 态, 然 后 通 过AudioPause 和AudioResume 暂 停 和 恢 复 朗 读。 ----另 外 用 成 员 函 数AudioFastForward 和AudioRewind 可 以 向 前 和 后 跳 过 一 句 朗 读, 通 过 读 写Speed 属 性 还 可 以 取 得 或 设 置 朗 读 的 语 速, 单 位 是 字/ 分, 缺 省 值 为170。 ----注 意Speed 和Enabled 属 性 缺 省 设 置 是 只 写 的, 但 实 际 上IVTxtAuto 提 供 了Get_Speed 和Get_Enabled 函 数, 所 以 我 们 只 要 把VTxtAuto_TLB 单 元 中 的 声 明 修 改 一 下, 如:       ...
    IVTxtAuto = interface(IDispatch)
              ...
      property Speed: Integer read Get_Speed write Set_Speed;
      property Enabled: Integer read Get_Enabled write Set_Enabled;
              ...
    end;
          ...----即 可 正 常 使 用Speed 和Enabled 属 性 了