web-dev-qa-db-fra.com

Comment convertir une chaîne de texte en son de parole

Je cherche un moyen de convertir un texte (chaîne) dans ENG en un texte (c) .. #. Est-ce que quelqu'un sait comment utiliser une librairie open source qui peut m'aider dans cette tâche?

40
user2110292

Vous pouvez utiliser .NET lib ( System.Speech.Synthesis ).

Selon Microsoft :

L'espace de noms System.Speech.Synthesis contient des classes qui vous permettent pour initialiser et configurer un moteur de synthèse vocale, créez des invites, générer de la parole, répondre aux événements et modifier les caractéristiques vocales . La synthèse de la parole est souvent appelée text-to-speech ou TTS.

Un synthétiseur vocal prend le texte en entrée et produit un flux audio en sortie. La synthèse vocale est également appelée synthèse vocale (TTS).

Un synthétiseur doit effectuer une analyse et un traitement approfondis pour convertir avec précision une chaîne de caractères en un flux audio reproduisant les mots prononcés. Le moyen le plus simple d’imaginer comment cela fonctionne est d’imaginer l’avant et l’arrière d’un système en deux parties.

Analyse de texte

Le front-end est spécialisé dans l'analyse de texte à l'aide de règles de langage naturel. Il analyse une chaîne de caractères pour déterminer où sont les mots (ce qui est facile à faire en anglais, mais pas aussi facile dans des langues telles que le chinois et le japonais). Cette interface comprend également des détails grammaticaux tels que des fonctions et des parties du discours. Par exemple, quels mots sont des noms propres, des nombres, etc. où les phrases commencent et finissent; si une phrase est une question ou une affirmation; et si une déclaration est passé, présent ou futur.

Tous ces éléments sont essentiels au choix des prononciations et intonations appropriées pour les mots, les phrases et les phrases. Considérez qu’en anglais, une question se termine généralement par un ton ascendant ou que le mot "read" est prononcé très différemment selon son temps. Clairement, comprendre comment un mot ou une phrase est utilisé est un aspect essentiel de l'interprétation du texte en son. Pour compliquer encore les choses, les règles sont légèrement différentes pour chaque langue. Ainsi, comme vous pouvez l’imaginer, le serveur doit effectuer des analyses très sophistiquées.

Génération de sons

Le back end a une tâche assez différente. Il prend l’analyse effectuée par le client et, à travers une analyse non triviale, génère les sons appropriés pour le texte saisi. Les synthétiseurs plus anciens (et les synthétiseurs actuels avec les plus petites empreintes de pas) génèrent les sons individuels par algorithme, ce qui donne un son très robotique. Les synthétiseurs modernes, tels que celui de Windows Vista et Windows 7, utilisent une base de données de segments sonores construite à partir d'heures et d'heures de parole enregistrée. L’efficacité de l’arrière dépend de la qualité de la sélection des segments sonores appropriés pour une entrée donnée et de leur épissage en douceur.

Prêt à l'emploi

Les fonctionnalités de synthèse vocale décrites ci-dessus sont intégrées aux systèmes d'exploitation Windows Vista et Windows 7, ce qui permet aux applications d'utiliser facilement cette technologie. Cela élimine le besoin de créer vos propres moteurs de parole. Vous pouvez appeler tout ce traitement avec un seul appel de fonction. Voir Prononcer le contenu d'une chaîne.

essayez ce code:

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



        }

    }
}
52
One Man Crew

Cette fonctionnalité existe dans la bibliothèque de classes principale du System.Speech namespace. En particulier, regardez dans System.Speech.Synthesis

Notez que vous devrez probablement ajouter une référence à System.Speech.dll.

La classe SpeechSynthesizer permet d’accéder aux fonctionnalités d’un fichier Moteur de synthèse vocale installé sur l'ordinateur hôte . Les moteurs de synthèse vocale installés sont représentés par une voix, pour exemple Microsoft Anna. Une instance de SpeechSynthesizer est initialisée sur la voix par défaut. Pour configurer une instance de SpeechSynthesizer à utiliser l’une des autres voix installées, appelez SelectVoice ou Méthodes SelectVoiceByHints. Pour obtenir des informations sur les voix qui sont installé, utilisez la méthode GetInstalledVoices.

Comme avec toute la documentation MSDN, il existe des exemples de code à utiliser. Ce qui suit provient de la classe System.Speech.Synthesis.SpeechSynthesizer.

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();
    }
  }
}
20
David
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
                }       
         }
    }
  • Ce sera un meilleur choix d'utiliser "SpeakAsync", car lorsque la fonction "Speak" est en cours d'exécution, aucune autre fonction ne fonctionnera jusqu'à ce qu'elle ait terminé son travail (personnellement recommandé

Changer VoiceGender
Change VoiceAge

5
Pran

Récemment publié par Google Google Cloud Text To Speech.

.NET La version client de Google.Cloud.TextToSpeech est disponible ici: https://github.com/jhabjan/Google.Cloud.TextToSpeech.V1

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

Voici un exemple court d'utilisation du client:

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
HABJAN

Vous pouvez le faire à l’aide de System.Speech.Synthesis namespace. Pour cela, vous devez ajouter une référence à System.speech.dll first.

Essaye ça:

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);
     }
  }
}
0
Ashin

Vous pouvez le faire en utilisant System.Speech library. jetez un oeil à cet exemple

0
user4340666