Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Мультимедиа в Delphi
Регистрация

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

Ответ
 
Опции темы
Старый 20.07.2016, 20:06   #1
nobobic
Пользователь
 
Регистрация: 25.11.2013
Адрес: Internet
Сообщений: 17
Репутация: 10
По умолчанию speech api выбором голосовых движков

ребят помогите не могу понять почему когда выбираю последний движок из списка комбобокс выходит сообщение не выбран движок ? =(

а также когда выбираю движок нажимаю кнопку старт звучит только первая буква или вообще не звучит как это исправить помогите плиз...

Код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Vcl.StdCtrls, Vcl.Buttons, SpeechLib_TLB, Speech, COMobj, ActiveX;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
  fITTSCentral: ITTSCentral;
  fIAMM: IAudioMultimediaDevice;
  aTTSEnum: ITTSEnum;
  fpModeInfo: PTTSModeInfo;
  Pause:Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  SData: TSData;
  BufRich: string;
begin
  if not assigned(fITTSCentral) then
   begin
    ShowMessage('Невыбран движок!');
    exit;
   end;
  BufRich:=copy(edit1.Text, edit1.SelStart,
                        length(edit1.Text)-edit1.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.BitBtn2Click(Sender: TObject);
  begin
  if not assigned(fITTSCentral) then
   begin
    showmessage('Стоп');
    exit;
   end;
  try
    fITTSCentral.AudioReset;
    Pause:=False;
  except
  end;

end;

procedure TForm1.BitBtn3Click(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.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
     {если fpModeInfo не равен nil}
      dispose(fpModeInfo);
     new(fpModeInfo);
     fpModeInfo^:=ModeInfo;
     {загружаем движок}
     aTTSEnum.Select(fpModeInfo^.gModeID, fITTSCentral, IUnknown(fIAMM));
   except
   end;

end;

procedure TForm1.FormCreate(Sender: TObject);
var
  NumFound : DWord;
  ModeInfo : TTSModeInfo;
begin
  try
    {Инициализация аудио устройства}
    CoCreateInstance(CLSID_MMAudioDest, Nil, CLSCTX_ALL,
           IID_IAudioMultiMediaDevice, fIAMM);
  except
  end;
  {Создание перечисляемого объекта для перебора всех движков в системе
   с помощью интерфейса ITTSEnum}
  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;

end.

почти готовый исходник: https://yadi.sk/d/8X6ZihJAtLo3F
nobobic вне форума   Ответить с цитированием
Старый 14.08.2016, 16:47   #2
Igor[Игорь]
Пользователь
 
Аватар для Igor[Игорь]
 
Регистрация: 25.11.2011
Сообщений: 48
Репутация: 27

icq: 2168364
По умолчанию

Зачем aTTSEnum.Next после выбора?
Код:

 Form1.aTTSEnum.skip(ComboBox1.ItemIndex);
     aTTSEnum.Next(1, ModeInfo, @NumFound);

__________________
e-mail: igor23dec@yandex.ru , ICQ: 2168364
Delphi, PHP
Примеры http://igorvn.ucoz.ru/
Igor[Игорь] вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Google Speech-Recognition API TUberwer Общие вопросы Delphi 3 05.07.2013 08:24
Список голосовых движков rmv240899 Помощь студентам 0 23.02.2013 00:11
Speech API в Delphi Konung21 Общие вопросы Delphi 2 07.07.2010 13:09
Speech api Яр|/||< (^_^) Windows 2 06.07.2009 20:18
Подсветка в Speech api Яр|/||< (^_^) Мультимедиа в Delphi 0 19.06.2009 11:33




19:31.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru