2009-06-08 3 views

ответ

11

Следующий код C# использует пространство имен System.Speech в инфраструктуре .Net. Перед использованием необходимо указать пространство имен, так как Visual Studio не ссылается на него автоматически.

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

Надеюсь, это актуально и полезно.

+0

Привет, перед этим мне нужно импортировать некоторую dll, потому что System.Speech недоступен в моем проекте, хотя я добавил, используя «using System.Speech». – Tarik

+0

@Mackenzie: это лучший ответ, чем мой, поскольку он использует родные классы .net, а не обманывает COM. –

+1

@atarikg: Ссылка на сборку System.Speech. –

3

Это из-за нескольких минут игры, так что предостерегайте emptor. Работала хорошо для меня. Я заметил, что SpFileStream (который не реализует IDisposable, поэтому try/finally) предпочитает абсолютные пути к относительным. 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

Спасибо вам за внимание. – Tarik

4

И как я нашел для того, как изменить формат вывода, мы закодировать что-то вроде этого:

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

//Same code comes here 

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

Это довольно просто и понятно.

Cool .net