Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923

Реализация синтеза речи

12.06.2019, 18:10. Показов 1617. Ответов 1

Студворк — интернет-сервис помощи студентам
Программа синтеза речи.
Пользователь вводит в Memo(или RichBox, смотря какая среда) какое-то предложение и нажимает на кнопку. Предложение разбивается на слова
C++
1
2
3
4
5
6
7
8
9
10
11
12
    //           Разбивание строки
    AnsiString ss = Memo1->Text;string s = ss.c_str();
    string d = " ,.;!<>|/\\+-=()^%$#@!~&*:{}"; vector<wstring> v;
    int b, e = 0;
    while ((b = s.find_first_not_of(d, e)) != s.npos)
    {
        e = s.find_first_of(d, b);
        v.push_back(toWideChar(s.substr(b, e - b)));
        b = e;
    }
    for (wstring text : v) // итерация по массиву v
        ListBox1->Items->Add(text.c_str());
В векторе v теперь содержатся слова введённые пользователем в memo(richbox)
После чего открывается папка с аудиофайлами и собираются названия файлов без формата.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    //           Поиск названия файлов
    WIN32_FIND_DATAW fd;
    vector<wstring> filenames;
    HANDLE hFind = FindFirstFileW(L"Alphavit\\*.*", &fd);
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {   filenames.push_back(&fd.cFileName[0]);
        } while (FALSE != FindNextFileW(hFind, &fd));
                FindClose(hFind);
    }
    filenames.erase( filenames.begin() + 0, filenames.begin() + 2);                  //удаление первых элементов, которые не содержат буквы
/*----------------------------------------------------------------------------*/
    for(size_t i =0; i < filenames.size(); ++i )
    {
    //           Удаление расширений файлов
        wstring::size_type npos1 = filenames[i].rfind (L".");
        if(npos1 != std::wstring::npos)
        {   wstring::size_type npos2 = filenames[i].length();
            filenames[i].erase(npos1,  npos2-npos1);
        }
    }
После чего вектор filenames сортируется
C++
1
sort(filenames.begin(), filenames.end());
_
_
_
Далее самое тяжёлое, чего я не могу никак реализовать:
Пусть имеется слово булок и фрагменты "б" "у" "улок" "бул" "лок" "ок". Если выбирать каждый раз самый длинный фрагмент, получится бул+о+к, что несколько хуже, чем б+улок. Но как сделать этот выбор?

Можно попробовать строить слова разной длины, перебирая подходящие фрагменты.

Шаг 0. Изначально есть пустое слово (длины 0). Из него можно получить слова: б[1], бул[3].

Шаг 1. Из имеющегося слова длины 1 аналогичным образом создаем новые слова: б+у[2], б+улок[5].

Шаг 2. Берем слово длины 2 и продолжаем: б+у+лок[5] - такое слово уже есть, оставляем из них только то, что состоит из меньшего числа фрагментов.

Шаг 3. Берем слово длины 3: бул+о[4].

Шаг 4. Берем слово длины 4: бул+о+к[5], снова выбираем более подходящее из двух.

Шаг 5. Последний шаг - взять единственное слово из 5 букв: б+улок.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.06.2019, 18:10
Ответы с готовыми решениями:

Нужна программа для синтеза речи
Всем доброго времени суток , ребят , не поможете ли вы мне найти программу , которая бы синтезировала речь ? проблема такая , у меня...

Голосовые данные для синтеза речи
В общем появилась такая проблема. Появилась вечная загрузка голосовых данных для синтеза речи (женский,русский).Пробовал подключить к wifi,...

Базы русской речи для синтеза и распознавания
Здравствуйте форумчане,есть у кого нибудь базы русского языка для распознавания? куски тимит, произнесённые цифры. на форуме эту тему...

1
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
12.06.2019, 19:36
Цитата Сообщение от abortion error Посмотреть сообщение
Если выбирать каждый раз самый длинный фрагмент, получится бул+о+к, что несколько хуже, чем б+улок. Но как сделать этот выбор?
Ну вот довольно грубое решение в лоб:
C++
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
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
int main()
{
    std::locale::global(std::locale{ "" });
 
    std::vector<std::string> file_names{ "б", "у", "улок", "бул", "лок", "ок" };
    std::sort(file_names.begin(), file_names.end(), [](auto const& lh, auto const& rh) { return lh.length() > rh.length(); });
 
    std::string word{ "булок" };
    std::cout << word << std::endl;
 
    for (size_t i{}, w_sz{ word.size() }; i < file_names.size() && w_sz; ++i)
    {
        std::cout << '[' << i << ']' << file_names[i] << std::endl;
 
        if (file_names[i].length() > w_sz) continue;
        auto sub = word.find(file_names[i]);
        if (sub != std::string::npos)
        {
            std::string idx{ '[' + std::to_string(i) + ']' };
            word.replace(sub, file_names[i].length(), idx);
            w_sz -= file_names[i].length();
        }
    }
    std::cout << word << std::endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2019, 19:36
Помогаю со студенческими работами здесь

Использование библиотеки для синтеза русской речи (говорилка)
Посоветуйте библиотеку, для синтеза русской речи. Добавлено через 17 часов 41 минуту У меня установлена Анна русская, только я не...

Запись речи, отправка файла на Google, получение текста речи
Нужна помощь! Нужно написать простую программу. Программа должна при клике на кнопку слушать микрофон. На другую кнопку останавливать...

Преобразование МДНФ для синтеза
Помоги пожалуйста преобразовать 4 МДНФ (во вложении) для синтеза схемы управления в базисе на элементах 2И-НЕ

технологическая схема производства синтеза аммиака
Здравствуйте. Может кто-нибудь помочь с созданием этой схемы? Либо же объяснить на основе чего делать) Саму схему прикрепил

синтеза функциональной схемы цифрового автомата
в чем заключается задача синтеза функциональной схемы цифрового автомата? _____ Плиз нужна помощь


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru