Como converter texto para som de fala

Estou à procura de uma forma de converter texto(string) em ENG para fala(som) em c#. alguém sabe de alguma maneira ou alguma lib de código aberto que me possa ajudar nesta tarefa?

Author: user2110292, 2013-03-13

6 answers

Pode usar o sistema.net lib (.Discurso.Síntese ).

De acordo com Microsoft:

O Sistema.Discurso.O espaço de nomes de síntese contém classes que lhe permitem para inicializar e configurar um motor de síntese de fala, crie sugestões, gerar fala, responder a eventos e modificar as características da voz. A síntese da fala é muitas vezes referida como texto-para-fala ou TTS.

Um sintetizador de fala toma o texto como entrada e produz um áudio transmissão como saída. A síntese da fala também é referida como texto-para-fala (TTS).

Um sintetizador deve realizar uma análise e processamento substanciais para converter com precisão uma cadeia de caracteres em um fluxo de áudio que soa exatamente como as palavras seriam faladas. A maneira mais fácil de imaginar como isso funciona é imaginar a extremidade dianteira e traseira de um sistema de duas partes.

Análise De Texto

O front end é especializado na análise do texto usando a linguagem natural regra. Ele analisa uma cadeia de caracteres para determinar onde as palavras são (o que é fácil de fazer em inglês, mas não tão fácil em línguas como o chinês e o japonês). Este front end também apresenta detalhes gramaticais como funções e partes da fala. Por exemplo, quais palavras são substantivos, números, e assim por diante; onde as sentenças começam e terminam; se uma frase é uma pergunta ou uma declaração; e se uma declaração é passado, presente ou futuro.

Todos estes elementos são crítico para a seleção de pronúncias e entonações apropriadas para palavras, frases e sentenças. Considere que, em inglês, uma questão geralmente termina com um tom crescente, ou que a palavra "ler" é pronunciada de forma muito diferente, dependendo de seu tempo. Claramente, entender como uma palavra ou frase está sendo usada é um aspecto crítico da interpretação do texto no som. Para complicar ainda mais as coisas, as regras são ligeiramente diferentes para cada língua. Então, como podem imaginar, o front end deve fazer uma análise muito sofisticada.

Geração De Som

A parte de trás tem uma tarefa bem diferente. Ele toma a análise feita pelo front end e, através de alguma análise não trivial própria, gera os sons apropriados para o texto de entrada. Sintetizadores mais antigos (e sintetizadores de hoje com as menores pegadas) geram os sons individuais algoritmicamente, resultando em um som muito robótico. Sintetizadores modernos, como o do Windows Vista e Windows 7, use um banco de dados de segmentos de som construídos a partir de horas e horas de fala gravada. A eficácia da extremidade traseira depende de quão bom é em selecionar os segmentos de som apropriados para qualquer entrada dada e unindo-os suavemente.

Pronto a usar

As capacidades de texto-para-voz acima descritas são incorporadas nos sistemas operacionais Windows Vista e Windows 7, permitindo que as aplicações utilizem facilmente esta tecnologia. Isto elimina a necessidade de criar o seu os próprios motores de fala. Você pode invocar todo este processamento com uma única chamada de função. Veja o conteúdo de uma corda.

Tenta este código:

using System.Speech.Synthesis;

namespace ConsoleApplication5
{
    class Program
    {

        static void Main(string[] args)
        {
            SpeechSynthesizer synthesizer = new SpeechSynthesizer();
            synthesizer.Volume = 100;  // 0...100
            synthesizer.Rate = -2;     // -10...10

            // Synchronous
            synthesizer.Speak("Hello World");

            // Asynchronous
            synthesizer.SpeakAsync("Hello World");



        }

    }
}
 59
Author: One Man Crew, 2013-03-13 14:03:00

Esta funcionalidade existe na biblioteca de classes principal do sistema .Espaço de nomes. Particularmente, procure no sistema .Discurso.Síntese .

lembre-se que provavelmente terá de adicionar uma referência ao sistema .Discurso.dll .

A classe Speechsinthesizer permite o acesso à funcionalidade de um motor de síntese de fala que está instalado no computador host. Os motores de síntese de fala instalados são representados por uma voz, para exemplo Microsoft Anna. Uma instância de SpeechSynthesizer inicializa para a voz padrão. Para configurar uma instância de SpeechSynthesizer a usar uma das outras vozes instaladas, chamar o SelectVoice ou SelectVoiceByHints methods. Para obter informações sobre quais vozes são instalado, use o método GetInstalledVoices.

Tal como acontece com toda a documentação do MSDN, existem amostras de código a utilizar. O seguinte vem do sistema.Discurso.Sintese.Aula de speechsinthesizer.

using System;
using System.Speech.Synthesis;

namespace SampleSynthesis
{
  class Program
  {
    static void Main(string[] args)
    {

      // Initialize a new instance of the SpeechSynthesizer.
      SpeechSynthesizer synth = new SpeechSynthesizer();

      // Configure the audio output. 
      synth.SetOutputToDefaultAudioDevice();

      // Speak a string.
      synth.Speak("This example demonstrates a basic use of Speech Synthesizer");

      Console.WriteLine();
      Console.WriteLine("Press any key to exit...");
      Console.ReadKey();
    }
  }
}
 22
Author: David, 2013-03-13 13:50:14
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; // first import this package

    namespace textToSpeech
    {
        public partial class home : Form
        {
            public string s = "pran"; // storing string (pran) to s

            private void home_Load(object sender, EventArgs e)
                {
                    speech(s); // calling the function with a string argument
                }

            private void speech(string args) // defining the function which will accept a string parameter
                {
                    SpeechSynthesizer synthesizer = new SpeechSynthesizer();
                    synthesizer.SelectVoiceByHints(VoiceGender.Male , VoiceAge.Adult); // to change VoiceGender and VoiceAge check out those links below
                    synthesizer.Volume = 100;  // (0 - 100)
                    synthesizer.Rate = 0;     // (-10 - 10)
                    // Synchronous
                    synthesizer.Speak("Now I'm speaking, no other function'll work");
                    // Asynchronous
                    synthesizer.SpeakAsync("Welcome" + args); // here args = pran
                }       
         }
    }
  • será melhor escolher usar "SpeakAsync" porque quando a função "falar" estiver a executar / executar nenhuma outra função irá funcionar até terminar o seu trabalho (pessoalmente recomendado)

Mudar O Atendedor De Voz
Mudar A Voz

 6
Author: Pran, 2015-02-17 15:12:25

Recentemente o Google publicou o Google Cloud Text To Speech .

.net Versão Cliente do Google.Nuvem.TextToSpeech pode ser encontrado aqui: https://github.com/jhabjan/Google.Cloud.TextToSpeech.V1

Nuget: Install-Package JH.Google.Cloud.TextToSpeech.V1

Aqui está um pequeno exemplo de como usar o cliente:

GoogleCredential credentials =
    GoogleCredential.FromFile(Path.Combine(Program.AppPath, "jhabjan-test-47a56894d458.json"));

TextToSpeechClient client = TextToSpeechClient.Create(credentials);

SynthesizeSpeechResponse response = client.SynthesizeSpeech(
    new SynthesisInput()
    {
        Text = "Google Cloud Text-to-Speech enables developers to synthesize natural-sounding speech with 32 voices"
    },
    new VoiceSelectionParams()
    {
        LanguageCode = "en-US",
        Name = "en-US-Wavenet-C"
    },
    new AudioConfig()
    {
        AudioEncoding = AudioEncoding.Mp3
    }
);

string speechFile = Path.Combine(Directory.GetCurrentDirectory(), "sample.mp3");

File.WriteAllBytes(speechFile, response.AudioContent);
 1
Author: HABJAN, 2018-05-01 08:20:54

Podes fazer isto com a ajuda do sistema .Discurso.Synthesis namespace. Para isso, você precisa adicionar uma referência ao sistema .discurso.primeiro.

Tenta isto:

using System.Speech.Synthesis;

namespace TextToSpeech
{
   public partial class Form1 : Form
   {
     SpeechSynthesizer speak;
     public Form1()
     {
        InitializeComponent();
        speak = new SpeechSynthesizer();
     }

     private void button1_Click(object sender, EventArgs e)
     {
        string text="Speak this";
        speak.SpeakAsync(text);
     }
  }
}
 1
Author: Ashin, 2018-08-28 02:24:58

Pode fazer isso usando o sistema .Fala na biblioteca. veja este exemplo.

 -1
Author: user4340666, 2017-12-14 16:32:52