Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 20:13   #1
ArcaN0id
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 62
По умолчанию Воспроизведение текста с отслеживанием

Подскажите! Есть пример программы воспроизведения текста. Как ее дополнить так, чтобы можно было отслеживать текст и например, если читаемое слово "привет", то выполнять какое-нибудь событие(например showmessage) без прерывания читаемого текста?
Вложения
Тип файла: rar SpeechTest.rar (177.5 Кб, 23 просмотров)
ArcaN0id вне форума Ответить с цитированием
Старый 28.02.2012, 20:41   #2
ArcaN0id
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 62
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, ToolWin, ComCtrls, ExtCtrls, StdCtrls, Speech, ActiveX, ComObj;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    ControlBar1: TControlBar;
    ToolBar1: TToolBar;
    Speak: TSpeedButton;
    PauseSpeak: TSpeedButton;
    Stop: TSpeedButton;
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure SpeakClick(Sender: TObject);
    procedure PauseSpeakClick(Sender: TObject);
    procedure StopClick(Sender: TObject);
  private
    { Private declarations }
    fITTSCentral: ITTSCentral; 
    fIAMM: IAudioMultimediaDevice;
    aTTSEnum: ITTSEnum;
 
    fpModeInfo: PTTSModeInfo;
     
    Pause: Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  NumFound : DWord;
  ModeInfo : TTSModeInfo;
begin
  try
  
    CoCreateInstance(CLSID_MMAudioDest, Nil, CLSCTX_ALL,
           IID_IAudioMultiMediaDevice, fIAMM);
  except
  end;
 
  CoCreateInstance(CLSID_TTSEnumerator, Nil, CLSCTX_ALL, IID_ITTSEnum, aTTSEnum);
  aTTSEnum.Reset;
  aTTSEnum.Next(1, ModeInfo, @NumFound); 
  While NumFound > 0 do
   begin
     ComboBox1.Items.Add(String(ModeInfo.szModeName));
     aTTSEnum.Next(1, ModeInfo, @NumFound); 
   end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
 NumFound: DWord;
 ModeInfo : TTSModeInfo;
begin
   try
     CoCreateInstance(CLSID_MMAudioDest, Nil, CLSCTX_ALL,
          IID_IAudioMultiMediaDevice, fIAMM);
     CoCreateInstance(CLSID_TTSEnumerator, Nil, CLSCTX_ALL, IID_ITTSEnum, aTTSEnum);
     aTTSEnum.Reset;
    
     Form1.aTTSEnum.skip(ComboBox1.ItemIndex);
     aTTSEnum.Next(1, ModeInfo, @NumFound);
     if assigned(fpModeInfo) then
  
      dispose(fpModeInfo);
     new(fpModeInfo);
     fpModeInfo^:=ModeInfo;
   
     aTTSEnum.Select(fpModeInfo^.gModeID, fITTSCentral, IUnknown(fIAMM));
   except
   end;
end;

procedure TForm1.SpeakClick(Sender: TObject);
var
  SData: TSData;
  BufRich: string;
begin
  if not assigned(fITTSCentral) then
   begin
    ShowMessage('Íåâûáðàí äâèæîê!');
    exit;
   end;
  BufRich:=copy(RichEdit1.Text, RichEdit1.SelStart,
                        length(RichEdit1.Text)-RichEdit1.SelStart);
  SData.dwSize := length(BufRich) + 1;
  SData.pData := pChar(BufRich);
  if pause then
   begin
    try
      fITTSCentral.AudioResume;
      Pause:=False;
    except
      exit;
    end;
   end
  else
   begin
    try
      fITTSCentral.TextData(CHARSET_TEXT, 0, SData, nil,
                                            IID_ITTSBufNotifySink);
    except
    end;
   end;
end;

procedure TForm1.PauseSpeakClick(Sender: TObject);
begin
  if not assigned(fITTSCentral) then
   begin
    ShowMessage('Íåâûáðàí äâèæîê!');
    exit;
   end;
  if Pause then
    exit;
  try
    fITTSCentral.AudioPause;
    pause:=True;
  except
  end;
end;

procedure TForm1.StopClick(Sender: TObject);
begin
  if not assigned(fITTSCentral) then
   begin
    showmessage('Íåâûáðàí äâèæîê!');
    exit;
   end;
  try
    fITTSCentral.AudioReset;
    Pause:=False;
  except
  end;
end;

end.
ArcaN0id вне форума Ответить с цитированием
Старый 29.02.2012, 01:37   #3
ArcaN0id
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 62
По умолчанию

или может есть другой вариант реализации задачи?
ArcaN0id вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
воспроизведение видео ZhekON Мультимедиа в Delphi 20 11.08.2016 08:32
MediaPlayer воспроизведение Simon..14 Общие вопросы C/C++ 9 19.03.2009 17:19
Воспроизведение SLIMMUS Общие вопросы Delphi 1 13.09.2008 15:45
Воспроизведение видеофайла Airou Мультимедиа в Delphi 5 16.05.2008 11:28
Воспроизведение звука John_chek Общие вопросы Delphi 5 05.06.2007 15:18