DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: fiscan1
今日帖子: 1
在线用户: 2
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 lyp8899 (lyp8899) ★☆☆☆☆ -
盒子活跃会员
2018/11/30 12:49:47
标题:
delphi xe10 android 判断TTS播放完成问题 浏览:2105
加入我的收藏
楼主: 不知怎么弄了,请高人有空出手

{setSpeechRate : 设置语速。1.0正常语速;0.5慢一半的语速;2.0;快一倍的语速。
setPitch : 设置音调。1.0正常音调;低于1.0的为低音;高于1.0的为高音。
speak : 开始对指定文本进行语音朗读。
synthesizeToFile : 把指定文本的朗读语音输出到文件。
stop : 停止朗读。
shutdown : 关闭语音引擎。
isSpeaking : 判断是否在语音朗读。
getLanguage : 获取当前的语言。
getCurrentEngine : 获取当前的语音引擎。
getEngines : 获取系统支持的所有语音引擎。
tts.setPitch()          //音调
tts.getEngines ;         //取得引擎
tts.setDefaultEngine(10);  //设置引擎
tts.setSpeechRate()      //语速
          //音量 .Volume
}
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  Androidapi.JNI.TTS, FMX.StdCtrls, FMX.Layouts, FMX.Memo, AndroidAPI.JNIBridge,
  FMX.Controls.Presentation, FMX.ScrollBox,

  Androidapi.JNI.JavaTypes, FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText,
  Androidapi.Helpers;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo2: TMemo;
    Button4: TButton;

    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button4Click(Sender: TObject);

   type
    TttsOnUtteranceCompletedListener = class(TJavaLocal, JTextToSpeech_OnUtteranceCompletedListener)
    private
      [weak] FParent : TForm1;
    public
      constructor Create(AParent : TForm1);
      procedure onUtteranceCompleted(utteranceID: JString); cdecl;
    end;

  type
    TttsOnInitListener = class(TJavaLocal, JTextToSpeech_OnInitListener)
    private
      [weak] FParent : TForm1;
    public
      constructor Create(AParent : TForm1);
      procedure onInit(status: Integer); cdecl;
    end;

  private
    { Private declarations }

    ttsListener : TttsOnInitListener;
    tts : JTextToSpeech;
    procedure SpeakOut;
  public
    { Public declarations }
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;

  end;

var
  Form1: TForm1;
  CListener:JTextToSpeech_OnUtteranceCompletedListener;
  uID,J:JString;
  ttsOptions: JHashMap;
implementation

{$R *.fmx}


procedure TForm1.Button1Click(Sender: TObject);
begin
  SpeakOut;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  tts := TJTextToSpeech.JavaClass.init(SharedActivityContext, ttsListener);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  EnginesList:JList;
  I: Integer;
begin
  J:=tts.getDefaultEngine;
  Memo1.Lines.Add('默认Engine:'+JStringToString(J));

  EnginesList := TTS.getEngines;
  for I := 0 to EnginesList.size - 1 do
  begin
    Memo1.Lines.Add(JStringToString(EnginesList.get(I).toString));
  end
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
   //ttsOptions.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utterance");
end;

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited;
  ttsListener := TttsOnInitListener.Create(self);
  CListener := TttsOnUtteranceCompletedListener.Create(self);
end;

destructor TForm1.Destroy;
begin
  if Assigned(tts) then
  begin
    tts.stop;
    tts.shutdown;
    tts := nil;
  end;
  ttsListener := nil;
  inherited;
end;

procedure TForm1.SpeakOut;
var
  text : JString;
begin
  text := StringToJString(Memo1.Lines.Text);
  tts.speak(text, TJTextToSpeech.JavaClass.QUEUE_FLUSH, nil); //JHashMap
  tts.setOnUtteranceCompletedListener(CListener);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
end;


{ TForm1.TttsOnInitListener }

constructor TForm1.TttsOnInitListener.Create(AParent: TForm1);
begin
  inherited Create;
  FParent := AParent
end;

procedure TForm1.TttsOnInitListener.onInit(status: Integer);
var
  Result : Integer;
begin
  if (status = TJTextToSpeech.JavaClass.SUCCESS) then
  begin
   result := FParent.tts.setLanguage(TJLocale.JavaClass.US);
   if (result = TJTextToSpeech.JavaClass.LANG_MISSING_DATA) or
      (result = TJTextToSpeech.JavaClass.LANG_NOT_SUPPORTED) then
     ShowMessage('This Language is not supported')
   else
   begin
     FParent.Button1.Enabled := true;
     FParent.button2.Enabled := false;
   end;
  end
  else
    ShowMessage('Initilization Failed!');
end;


constructor TForm1.TttsOnUtteranceCompletedListener.Create(AParent: TForm1);
begin
  inherited Create;
  FParent := AParent
end;

procedure TForm1.TttsOnUtteranceCompletedListener.onUtteranceCompleted(utteranceID: JString);
var
  Result : Integer;
begin
  //这里怎么写。。。
  form1.memo2.lines.add('Speak Over!');
end;


end.
此帖子包含附件:lyp8899_20181130124947.rar 大小:10.7K
----------------------------------------------
▄︻┻┳═
作者:
男 lyp8899 (lyp8899) ★☆☆☆☆ -
盒子活跃会员
2018/11/30 12:51:56
1楼: 可参考这里:https://www.cnblogs.com/FKdelphi/p/4633779.html
----------------------------------------------
▄︻┻┳═
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行78.125毫秒 RSS