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

Купить рекламу на форуме 15-35 тыс рублей в месяц

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

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


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика


Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2022, 17:11   #1
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию ISpVoice

Здравствуйте, есть такой код:
Код:
procedure TVoice.execute;
var gpIVTxt: ISpVoice;
     Pool: LongWord;
begin
  inherited;
  gpIVTxt:=CoSpVoice.Create as ISpVoice;
  gpIVTxt.Speak(PChar(s),SVSFDefault,Pool);
end;
берет и озвучивает текст из переменной s, работает более чем хорошо, однако воспроизводит звук только в активное устройство вывода. К программе подключена библиотека BASS и весь функционал на ней, она в 2 потока вещает звук в 2 разных устройства. вопрос в том как заставить ISpVoice вещать в TStream что бы его уже передавать библиотеке BASS которая уже воспроизведет где надо?

находил gpIVTxt.SetOutput() но так и не понял как ей пользоваться.. что бы ней не передавал звук все равно воспроизводится, а не кладется в поток
PTyTb32 вне форума Ответить с цитированием
Старый 15.01.2022, 01:21   #2
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Код:
procedure TVoice.execute;
var
  sms:TSpMemoryStream;
  sfs:TSpFileStream;
  ms:tmemorystream;
  sv: TSpVoice;
  fn:string;
begin
  fn:=ExtractFilePath(Application.ExeName)+'text1.wav';
  sms := TSpMemoryStream.Create(nil);
  sv := TSpVoice.Create(nil);
  sv.AudioOutputStream := sms.DefaultInterface;
  sv.Rate:=form1.TrackRate.Position;
  sv.Speak(s, SVSFDefault);
  sv.Free;
  ms:=tmemorystream.Create;
  sfs:=TSpFilestream.Create(nil);
  sfs.Open(fn, SSFMCreateForWrite, FALSE);
  sfs.Write(sms.GetData);
  sfs.Close;
  sfs.Free;
  sms.Free;
  fs.LoadFromFile(fn);
  BassSimple.Play(fs);
  fs.Free;
  deletefile(fn);
end;
вот что получилось, сори за имена переменных. да костыль, но способа без файла не вышло найти.
PTyTb32 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Реклама для незарегистрированных, регистрация на форуме