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

Можете ли вы дать мне алгоритм тембрового преверсора высоты тона?


Можете ли вы дать мне алгоритм тембрового преверсора высоты тона?
Это может быть C++ или C# или любой другой язык, просто дайте мне или скажите, как его создать.

Мне это нужно для собственного двигателя TTS.

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

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.");
            }
 
            
        }        

Sergey Alexandrovich Kryukov

Извините, алгоритмы такой сложности-это не то, что можно "дать". Дано — в каком смысле?

Похоже, что вы используете System.Speech.Synthesis.SpeechSynthesizer Если да, то как это связано с вашим "собственным ТТС"? (Если это действительно ваше, Я сожалею о своей ошибке.)

—СА

Roland-HE-C#

Это образец с моей первой попытки, но качество sapi для меня недостаточно, поэтому я начну новый проект после того, как получу алгоритм тембрового предверс-тона.

Sergey Alexandrovich Kryukov

Я все прекрасно понимаю. Этот фрагмент кода просто не имеет отношения к проблеме, которая довольно сложна.
—СА

Roland-HE-C#

В Интернете я нашел простой код pitch shifter c++ ранее, но его качество плохое и базовое.

1 Ответов

Рейтинг:
4

Dave Kreskowiak

Ну, вы начинаете с чтения эти[^] затем начните писать свой собственный код алгоритма.

Нет, вы не найдете никого, кто просто "отдаст вам" свою тяжелую работу.


Sergey Alexandrovich Kryukov

Вполне справедливо, 5.
—СА

Roland-HE-C#

Вы правы, но я пытался получить его от кого-то.
Я прочитал несколько постов перед моим вопросом, но я написал, что тоже принимаю советы, если никто не дает мне алгоритм.