Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
118 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 26

Запись TTS в файл

11.03.2013, 07:05. Показов 1144. Ответов 0
Метки нет (Все метки)

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

Чтение я реализовал следующим образом:
// источник: http://subritto.h1.ru/msagent/speechapi.php
uses ... speach2, ... // https://www.dropbox.com/s/bwp0... peech2.dcu

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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 - не знаю. Надеюсь на вашу помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2013, 07:05
Ответы с готовыми решениями:

Запись в файл
Всем привет! задача очень простая, в edit6.Text есть текст, его надо записать в файл OutFile.txt Почему то вот это работать не хочет: ...

Запись в файл
Memo1.Lines.SaveToFile('.\messages.txt'); Эта строка записывает в файл информацию из Tmemo, перезаписывая всё что там было ранее...

Запись таблицы в файл
Помогите записать таблицу в файл!!!!!Пожалуйста!!!! Вот текст программы procedure TForm1.StringGrid1Click(Sender: TObject); var ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2013, 07:05
Помогаю со студенческими работами здесь

Чтение\запись в файл структуру
есть код: type Files = record qu, answ: string; end; TFile = ^Files; .................................

Запись текста в файл .txt
Здрасте.. Возникла необходимость в программе, которая бы 1)брала текст им TEdit или Memo и 2)записывала её в текстовый файл. Как...

Запись в динамически создаваемый файл
Здравствуйте. проблема такая: я создаю файл и хочу записать в него текст из др. файла: FileCreate('C:AS_web '+Edit1.Text+'...

Запись проигрываемого звука в файл
Если кто знает, напишите, пожалуйста, пример, как мне записать звук в файл, но не с микрофона, а так, чтобы он у меня проигрывался в...

Запись радиостанции в файл mp3
Не получается записать радиостанцию. Если использовать такой код: procedure TForm1.Button3Click(Sender: TObject); begin ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru