2009-06-08 9 views

Odpowiedz

11

Następujący kod C# używa przestrzeni nazw System.Speech w środowisku .Net. Przed użyciem należy odwoływać się do przestrzeni nazw, ponieważ nie jest ona automatycznie przywoływana przez program Visual Studio.

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

Mam nadzieję, że jest to istotne i pomocne.

+0

Witam, przedtem muszę zaimportować trochę biblioteki dll, ponieważ System.Speech nie jest dostępny w moim projekcie, mimo że dodałem przy użyciu "using System.Speech". – Tarik

+0

@Mackenzie: jest to lepsza odpowiedź niż moja, ponieważ używa klas rodzimych .net zamiast grzebania z COM. –

+1

@atarikg: Odwołanie do zestawu System.Speech. –

3

To jest od kilku chwil, więc powstrzymajcie emptora. Sprawdziło się dobrze dla mnie. Zauważyłem, że SpFileStream (który nie implementuje IDisposable, a więc try/finally) preferuje względne ścieżki bezwzględne. DO#.

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

Dzięki za wysiłek. – Tarik

4

A co znalazłem na temat zmiany formatu wyjściowego, kodujemy coś takiego:

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

//Same code comes here 

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

To dość proste i zrozumiałe.

Cool .net

Powiązane problemy