2009-06-08 12 views

Répondre

11

Le code C# suivant utilise l'espace de noms System.Speech dans l'infrastructure .Net. Il est nécessaire de référencer l'espace de nom avant de l'utiliser, car il n'est pas automatiquement référencé par Visual Studio.

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

J'espère que c'est pertinent et utile.

+0

Salut, avant que j'ai besoin d'importer une DLL, parce que System.Speech n'est pas disponible dans mon projet, même si j'ai ajouté en utilisant "using System.Speech". – Tarik

+0

@Mackenzie: c'est une meilleure réponse que la mienne, car elle utilise des classes natives .net plutôt que de se moquer de COM. –

+1

@atarikg: référence l'assembly System.Speech. –

3

Ceci est à partir de quelques instants, donc caveat emptor. Travaillé bien pour moi. J'ai remarqué que SpFileStream (qui n'implémente pas IDisposable, donc try/finally) préfère les chemins absolus à relatif. 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

Merci pour vos efforts. – Tarik

4

Et comme je l'ai trouvé sur la façon de changer le format de sortie, on code quelque chose comme ceci:

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

//Same code comes here 

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

C'est assez facile et compréhensible.

Cool .net