Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.03.2013, 03:53
alexingor alexingor вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 16
Репутация: 10
По умолчанию Запись TTS в файл

Дополнение: Создав эту тему, я прошел по своей же ссылке, и обнаружил, что на указанном мною сайте есть ответ на мой вопрос: http://subritto.h1.ru/msagent/sapi_ns_wav.php. Поэтому тема более не актуальна, извините за беспокойство.

Здравствуйте. Передо мной стоит задача - записать в файл аудио поток TTS. То есть, на вход процедура получает небольшой фрагмент текста, а на выходе должен получиться mp3-файл, содержащий чтение этого фрагмента.

Чтение я реализовал следующим образом:
// источник: http://subritto.h1.ru/msagent/speechapi.php
Код:
uses ... speach2, ... 
// Скачать speech2: https://www.dropbox.com/s/bwp0n67ftmclcw8/Speech2.dcu
...
procedure TForm1.FormCreate(Sender: TObject);
begin
    ...
  LEARN_ENGINES; // заполняется комбобокс для выбора активного движка 
    ...
end;
...
READ_IT_ALOUD(номер движка, текст);
...
 
 
// ===================================
//       произношение слов
// ===================================
 
procedure TForm1.LEARN_ENGINES;
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
    CB_VOICE.Items.Add(String(ModeInfo.szModeName));
    aTTSEnum.Next(1, ModeInfo, @NumFound); {Получаем остальные}
  end;
end;
 
 
procedure TForm1.READ_IT_ALOUD(ENGINE_NUMBER: Integer; STRING_TO_SAY: string);
var
  NumFound: DWord;
  ModeInfo : TTSModeInfo;{Для хранения информации о текущем движке}
  SData: TSData;
  BufRich: string;
  i: Integer;
begin
  if IMG_SOUND.Tag=1 then Exit;
  try
   CoCreateInstance(CLSID_MMAudioDest, nil, CLSCTX_ALL, IID_IAudioMultiMediaDevice, fIAMM);
   CoCreateInstance(CLSID_TTSEnumerator, nil, CLSCTX_ALL, IID_ITTSEnum, aTTSEnum);
   aTTSEnum.Reset;
   {Перескакиваем на нужный движок}
   Form1.aTTSEnum.skip(ENGINE_NUMBER);
   aTTSEnum.Next(1, ModeInfo, @NumFound);
   if assigned(fpModeInfo) then
    dispose(fpModeInfo);
   new(fpModeInfo);
   fpModeInfo^:=ModeInfo;
   {загружаем движок по его GUID}
   aTTSEnum.Select(fpModeInfo^.gModeID, fITTSCentral, IUnknown(fIAMM));
  except
  end;
  //CB_VOICE_ENGChange(self);
  if not assigned(fITTSCentral) then
   begin
    exit;
   end;
  BufRich:='';
  for i:=1 to Length(STRING_TO_SAY) do begin
    if (STRING_TO_SAY[i]<>'(') and (STRING_TO_SAY[i]<>')') then
    BufRich:=BufRich+STRING_TO_SAY[i] else BufRich:=BufRich+', ';
  end;
  if Pos('(',BufRich)>0 then BufRich:=Copy(BufRich,1, Pos('(',BufRich));
  if BufRich='(' then BufRich:='';
  SData.dwSize := length(BufRich) + 1;
  SData.pData := pChar(BufRich);
  try
    fITTSCentral.TextData(CHARSET_TEXT, 0, SData, nil, IID_ITTSBufNotifySink);
  except
end;
А вот как реализовать запись голоса в MP3 - не знаю. Подскажите, пожалуйста.

Последний раз редактировалось alexingor, 13.03.2013 в 05:23.
Ответить с цитированием
  #2  
Старый 13.03.2013, 08:28
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Записать в обычном wav формате, потом кодеку передать и будет тебе мп3.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
alexingor (13.03.2013)
  #3  
Старый 13.03.2013, 19:24
alexingor alexingor вне форума
Прохожий
 
Регистрация: 26.10.2012
Сообщения: 16
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
потом кодеку передать
Вот этот момент можно подробнее?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter