2009-06-08 9 views

risposta

11

Il seguente codice C# utilizza lo spazio dei nomi System.Speech nel quadro .Net. È necessario fare riferimento allo spazio dei nomi prima di utilizzarlo, poiché non viene referenziato automaticamente da Visual Studio.

 SpeechSynthesizer ss = new SpeechSynthesizer(); 
     ss.Volume = 100; 
     ss.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Adult); 
     ss.SetOutputToWaveFile(@"C:\MyAudioFile.wav"); 
     ss.Speak("Hello World"); 

Spero che questo sia pertinente e utile.

+0

Ciao, prima devo importare qualche DLL, perché System.Speech non è disponibile nel mio progetto anche se ho aggiunto usando "using System.Speech". – Tarik

+0

@Mackenzie: questa è una risposta migliore della mia, in quanto utilizza le classi native .net piuttosto che andare in giro con COM. –

+1

@atarikg: fare riferimento all'assembly System.Speech. –

3

Si tratta di un gioco di pochi istanti, quindi caveat emptor. Ha funzionato bene per me. Ho notato che SpFileStream (che non implementa IDisposable, quindi il try/finally) preferisce i percorsi assoluti a relativo. C#.

SpFileStream fs = null; 
    try 
    { 
     SpVoice voice = new SpVoice(); 
     fs = new SpFileStream(); 
     fs.Open(@"c:\hello.wav", SpeechStreamFileMode.SSFMCreateForWrite, false); 
     voice.AudioOutputStream = fs; 
     voice.Speak("Hello world.", SpeechVoiceSpeakFlags.SVSFDefault); 
    } 
    finally 
    { 
     if (fs != null) 
     { 
      fs.Close(); 
     } 
    } 
+1

Grazie per il vostro impegno. – Tarik

4

E come ho trovato su come modificare il formato di output, abbiamo codice qualcosa di simile:

SpeechAudioFormatInfo info = new SpeechAudioFormatInfo(6, AudioBitsPerSample.Sixteen, AudioChannel.Mono); 

//Same code comes here 

ss.SetOutputToWaveFile(@"C:\MyAudioFile.wav",info); 

Questo è abbastanza semplice e comprensibile.

Cool .net

Problemi correlati