2013-03-13 11 views
32

Sto cercando un modo per convertire il testo (stringa) in ENG a voce (suono) in C#. Qualcuno sa per un modo o qualche lib open source che può aiutarmi con questo compito?Come convertire la stringa di testo in audio vocale

+2

Perché open source? La risposta .Net è così ovvia che dovresti davvero specificare perché è fuori dal tavolo. – flup

+0

L'opzione .NET è ok per me – user2110292

risposta

38

È possibile utilizzare .NET lib (System.Speech.Synthesis).

Secondo Microsoft:

Il namespace System.Speech.Synthesis contiene classi che consentono di inizializzare e configurare un motore di sintesi vocale, creare istruzioni, generare discorso, rispondere agli eventi, e modificare la voce caratteristiche. La sintesi vocale viene spesso definita sintesi vocale o TTS.

Un sintetizzatore vocale riceve il testo come input e produce un flusso audio come output. La sintesi vocale viene anche definita sintesi vocale (TTS).

Un sintetizzatore deve eseguire un'analisi e un'elaborazione sostanziale per convertire con precisione una stringa di caratteri in un flusso audio che suona esattamente come le parole sarebbero pronunciate. Il modo più semplice per immaginare come funziona è quello di immaginare il front-end e il back-end di un sistema a due parti.

Text Analysis

Il frontale è specializzata nell'analisi del testo usando regole di linguaggio naturale. Analizza una serie di caratteri per determinare dove sono le parole (che è facile da fare in inglese, ma non è facile in lingue come il cinese e il giapponese). Questo front-end individua anche dettagli grammaticali come funzioni e parti del discorso. Ad esempio, quali parole sono nomi, numeri e così via; dove le frasi iniziano e finiscono; se una frase è una domanda o una dichiarazione; e se una dichiarazione è passata, presente o futura.

Tutti questi elementi sono fondamentali per la selezione di pronunce e intonazioni appropriate per parole, frasi e frasi.Considera che in inglese, una domanda di solito finisce con un tono crescente, o che la parola "leggere" viene pronunciata in modo molto diverso a seconda del suo tempo. Chiaramente, capire come viene usata una parola o una frase è un aspetto critico dell'interpretazione del testo in suono. Per complicare ulteriormente le cose, le regole sono leggermente diverse per ogni lingua. Quindi, come puoi immaginare, il front end deve fare delle analisi molto sofisticate.

suono Generation

Il back-end ha un compito diverso. Prende l'analisi fatta dal front-end e, attraverso alcune sue analisi non banali, genera i suoni appropriati per il testo di input. I sintetizzatori più vecchi (e i sintetizzatori di oggi con le impronte più piccole) generano i singoli suoni in modo algoritmico, risultando in un suono molto robotico. Sintetizzatori moderni, come quello di Windows Vista e Windows 7, utilizzano un database di segmenti sonori costruiti a partire da ore e ore di registrazione vocale. L'efficacia del back-end dipende da quanto è buona per selezionare i segmenti di suono appropriati per ogni dato input e per unirli uniformemente.

Ready to Use

Le funzionalità di text-to-speech di cui sopra sono costruiti in Windows Vista e sistemi operativi Windows 7, consentendo alle applicazioni di utilizzare facilmente questa tecnologia. Questo elimina la necessità di creare i tuoi motori vocali. È possibile richiamare tutta questa elaborazione con una singola chiamata di funzione. Vedi Pronunciare il contenuto di una stringa.

provare questo codice:

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



     } 

    } 
} 
+1

Un quarto di secolo fa, ho utilizzato un programma che esprimeva le parole foneticamente utilizzando le cifre per esprimere lo stress (quindi "Che cos'è?" Potrebbe essere [IIRC] "WHUH1T IH2IH4IH4ZAE1T." O "WHUH3T IH1Z DHAE3T. "A seconda di dove l'enfasi appartiene). Ottenere una prosodia dal suono naturale richiederebbe spesso un sacco di ritocchi, ma il tweaking ha permesso un livello di controllo molto dettagliato. Se il tuo obiettivo è produrre un discorso componendo una raccolta fissa di stringhe di testo in varie sequenze, c'è un modo carino per inviare i dati all'API vocale come una stringa fonetica che include mark-up per stress e prosodia? – supercat

+0

Bug interessante: non avrebbe detto nulla finché non avessi riavviato Visual Studio. –

+0

@supercat, non è sicuro ma stai cercando supporto SSML? Synthesizer ha il metodo [SpeakSsml] (https://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.speakssml (v = vs.110) .aspx). [SSML] (https://msdn.microsoft.com/en-us/library/vs/alm/hh361578%28v=office.14%29.aspx) sembra supportare [prosody] (https://msdn.microsoft .com/it-it/library/vs/alm/hh361583% 28v = office.14% 29.aspx). PS: Non ho idea di cosa significhi tutto questo. :) – publicgk

19

Questa funzionalità esiste nella libreria di classi principale nello spazio dei nomi System.Speech. In particolare, guarda in System.Speech.Synthesis.

Nota che è probabile che sia necessario aggiungere un riferimento a System.Speech.dll.

La classe SpeechSynthesizer fornisce accesso alle funzionalità di un motore di sintesi vocale che è installato sul computer host. I motori di sintesi vocale installati sono rappresentati da una voce, per esempio Microsoft Anna. Un'istanza SpeechSynthesizer viene inizializzata su la voce predefinita. Per configurare un'istanza di SpeechSynthesizer per utilizzare una delle altre voci installate, chiamare i metodi SelectVoice o SelectVoiceByHints. Per ottenere informazioni su quali voci sono installate , utilizzare il metodo GetInstalledVoices.

Come per tutta la documentazione MSDN, ci sono esempi di codice da utilizzare. Quanto segue è dalla 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(); 
    } 
    } 
} 
4
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 
       }  
     } 
    } 
  • Sarà meglio scelta di utilizzare "SpeakAsync" perché quando "parlare" la funzione è in esecuzione/nessuno di altra funzione in esecuzione funzionerà fino a quando non finisce è un lavoro (personalmente consigliato)

Change VoiceGender
Change VoiceAge

Problemi correlati