Roland-HE-C# Ответов: 1

Как я могу разработать собственное программное обеспечение для преобразования текста в речь с нуля?


Как я могу разработать собственное программное обеспечение для преобразования текста в речь с нуля? Я хочу запустить его на языке C++ .net или C#. У меня есть навыки программирования на c# и C++ .net, но я не могу использовать сторонние библиотеки, я хочу полностью собственную.

Мой проект ниже не достаточно для меня и образец из моего проекта только.
У меня есть несколько лет музыкальных аудио навыков и программно несколько месяцев, но у меня есть некоторые проблемы с Fast FT и Shortime FT.

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Speech.Synthesis;
using System.Speech.AudioFormat;

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        List<string> all_lines_List = new List<string>();

        private void Read_Click(object sender, EventArgs e)
        {
            if(comboBox1.SelectedItem!=null)
            {
                button1.Enabled = false;

                
                SpeechSynthesizer speech_synthesizer = new SpeechSynthesizer();

                ReadOnlyCollection<InstalledVoice> InstalledVoices = speech_synthesizer.GetInstalledVoices();
                


                speech_synthesizer.SelectVoice(comboBox1.SelectedItem.ToString());
                //speech_synthesizer.SelectVoice("MSMary");  
               
                speech_synthesizer.SetOutputToDefaultAudioDevice();
                //PromptBuilder builder = new PromptBuilder();
                //builder.AppendSsmlMarkup("<say-as interpret-as = \"chs\"> chair </say-as>");

                //speech_synthesizer.AddLexicon(new Uri("C:\\W7\\Spelling.pls"), "application/pls");
                
                speech_synthesizer.Volume = 100;
                speech_synthesizer.Rate = 0;

                PromptBuilder builder = new PromptBuilder();
                builder.AppendText("This is sample output to a WAVE file.", PromptEmphasis.Strong);
                builder.AppendSsmlMarkup("<say-as interpret-as = \"WAVE\"> chair </say-as>");

                speech_synthesizer.Speak(builder);

                speech_synthesizer.Speak(richTextBox2.Text);

                //speech_synthesizer.RemoveLexicon(new Uri("C:\\W7\\Spelling.pls"));
                button1.Enabled = true;                

                System.Media.SystemSounds.Asterisk.Play();

                Application.DoEvents();
            
            }
            else
            {
                System.Media.SystemSounds.Hand.Play();
                MessageBox.Show("Please, Select a Voice.");
            }


           
        }

        private void Save_Without_Reading_Click(object sender, EventArgs e)
        {
                      
            if (comboBox1.SelectedItem != null)
            {
                SpeechSynthesizer speech_synthesizer = new SpeechSynthesizer();

                speech_synthesizer.SelectVoice(comboBox1.SelectedItem.ToString());
                
                speech_synthesizer.SetOutputToDefaultAudioDevice();

                speech_synthesizer.Volume = 100;
                speech_synthesizer.Rate = 0;

                speech_synthesizer.SetOutputToWaveFile(comboBox1.SelectedItem.ToString() + " - Speech.wav", new SpeechAudioFormatInfo(44100, AudioBitsPerSample.Sixteen, AudioChannel.Mono));

                speech_synthesizer.Speak(richTextBox2.Text);
                System.Media.SystemSounds.Asterisk.Play();                

            }
            else
            {
                System.Media.SystemSounds.Hand.Play();
                MessageBox.Show("Please, Select a Voice.");
            }

            
        }        

El_Codero

Я думаю, что было бы огромной задачей действительно построить свой собственный TTS-проект. В настоящее время вы используете класс SpeechSynthesizer из .net Framework. Что не работает с вашим кодом? Кроме того ВАС МОЖЕТ ЗАИНТЕРЕСОВАТЬ CmuSphinx который является открытым исходным кодом и расширяемым CMUSphinx

Sergey Alexandrovich Kryukov

Очень интересная Ссылка; Спасибо, что поделились. Проверяли ли вы само распознавание, его качество?
—СА

El_Codero

Привет, Сергей, О да, я провел довольно много времени с cmusphinx два года назад. Существующая языковая модель для EN language довольно хорошо обучена (к сожалению, ясно, что в настоящее время она не может работать параллельно с "облачными" системами распознавания, такими как google speech recognition), но в рамках cmusphinx есть много инструментов для создания пользовательской языковой модели и ее обучения, документация хороша для проекта с открытым исходным кодом.
т.е. здесь это рекомендация от разработчика, как обучить вашу модель. "1 час записи для командования и управления одним динамиком" до "50 часов записи 200 динамиков для диктовки многих динамиков". так что нам нужны записи для обучения :D ...Кстати, я ждал годами, чтобы получить этот, теперь он вышел для сторонних разработчиков, таких как я :)

Sergey Alexandrovich Kryukov

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

Я только попробовал распознавание, которое установил на Android, в виде виртуальной клавиатуры на двух разных языках (я не знаю происхождения исходного кода); и был доволен качеством даже в диктовке; он даже может сделать "речевой набор текста" практичным.

Раньше я пробовал распознавание в моем Microsoft для Windows; это действительно работает; но в целом я охарактеризовал его как"впечатляющий провал". Он может распознавать вещи, основанные на крошечной грамматике, но диктовку, формально существующую, лучше забыть.

Итак, мой другой вопрос: работает ли сборка Windows? Вы тоже пробовали?

Возможно, ваш опыт будет очень полезен, если вы разработаете хорошие демонстрационные приложения с полными инструкциями по сборке и пакетной сборкой в один клик, тестами, обсуждением результатов и т. д.-В довольно подробной статье.

—СА

El_Codero

да, распознавание речи на android опирается на api распознавания речи google, и, к сожалению, да, работа с api распознавания речи windows из .net framework - это первое, с чем мне пришлось отказаться из-за качества, скорости обнаружения и многого другого (как вы сказали, это, к сожалению, действительно большой провал). Гораздо лучше то, что API распознавания речи BING но api speech rec google является (в моем варианте и после долгих тестов) вершиной API speech rec. Да, я действительно хотел бы написать об этом статью, надеюсь, у меня будет для этого немного времени в ближайшем будущем :) Какое демо-приложение вас интересует (больше всего)?С CMUSphinx? Бьерн Ранфт

Sergey Alexandrovich Kryukov

Опять же, очень хорошая информация. Как насчет создания CMUSphinx или Google (они как-то связаны?) на Windows?
—СА

El_Codero

Я бы сказал, что они технически связаны, но для практического использования совершенно разные и зависят от требований. CMUSphinx и другие библиотеки распознавания речи больше подходят для встроенных / локальных устройств без подключения к Интернету. то есть, если вы хотите создать систему навигации, вам лучше использовать cmusphinx, и вы можете реализовать «обучение-команды-с-моим-голосом», поэтому, если вы тренируете навигацию с помощью таких команд, как «Показать трафик», это будет простая задача »для алгоритма распознавания, и вы можете достичь уровня обнаружения 98%. будет огромное снижение успешного обнаружения, если не обученные слова появятся из-за недостаточно хорошо обученной локальной базы данных, и вам придется заставить пользователя обучать db с более чем 50 часами его речи, чтобы достичь хорошего уровня обнаружения, если пользователь говорит (перейдите к (CityName и Adress). Я думаю, что большинство людей знают об этой проблеме, и вы часто будете слышать такие вещи, как «аааа, я сейчас напечатаю ее вручную, она меня не понимает»). полагается на веб-сервисы и уверены, что они используют голос пользователей для обучения своих баз данных, и в результате получается API распознавания речи, который понимает немецкий (с довольно большим польским акцентом) полностью, без каких-либо ошибок. cmusphinx мог бы быть таким же хорошим, как Google, если бы они также используйте эту концепцию. Я действительно хотел бы разработать "облачный" CMUSphinx, если кому-то будет интересно :)

Sergey Alexandrovich Kryukov

Спасибо еще раз. Действительно, подумайте о том, чтобы написать статью. А вы бы хотели?
—СА

El_Codero

Я рад, что здесь, на КП, есть люди, которым это интересно. Я думаю, что буду работать над статьей после тестирования api google speech rec, который находится в альфа-версии, мы можем написать PM. С наилучшими пожеланиями, Бьерн

Sergey Alexandrovich Kryukov

Могу вас заверить: если вы сделаете это хорошо, то это будет, безусловно, гораздо интереснее, чем большинство статей на сайте (под "Хорошо" я в основном подразумеваю качество и полноту демонстрационного/тестового кода, тестов, не так много обычного текста статьи, но все должно быть правильно объяснено.)

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

—СА

El_Codero

Привет, Сергей, как дела?время идет быстро, но я думаю, что у меня будет достаточно свободного времени с 17 января. Тем временем мы можем начать собирать то, что должна содержать наша статья и какие системы распознавания мы хотели бы охватить. Все еще интересуешься?

Roland-HE-C#

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

Sergey Alexandrovich Kryukov

С нуля? По моим приблизительным оценкам, вам нужно выполнить хотя бы одно из двух требований:
1) получить так много таланта для выполнения этой задачи;
2) получить продолжительность жизни в несколько сотен лет.
Выполнение второго требования гораздо более вероятно.
—СА

Roland-HE-C#

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

Sergey Alexandrovich Kryukov

Да... В дополнение к тому, что я говорю: я знаю, что венгерский язык-один из самых сложных...
—СА

Roland-HE-C#

Без алгоритма тембрового преверсора он в настоящее время слишком роботизирован и слаб для использования.

1 Ответов

Рейтинг:
1

Member 12599256

Microsoft уже сделала это, просто используйте его:
Windows Text to Speech Converter Sample-C# - Visual Studio 2010 в C# для Visual Studio 2010[^]


Roland-HE-C#

Он используется, но этого недостаточно для меня, например, его максимальная частота составляет 22025 Гц,и он не может настроить свою интонацию/высоту чтения.
Можете ли вы дать алгоритм тембрового преверсора высоты тона?