I need to turn a text into speech and then save it as wav file.
Asked
Active
Viewed 1.0k times
3 Answers
13
The following C# code uses the System.Speech namespace in the .Net framework. It is necessary to reference the namespace before using it, because it is not automatically referenced by Visual Studio.
SpeechSynthesizer ss = new SpeechSynthesizer();
ss.Volume = 100;
ss.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Adult);
ss.SetOutputToWaveFile(@"C:\MyAudioFile.wav");
ss.Speak("Hello World");
I hope this is relevant and helpful.

Mackenzie
- 1,897
- 1
- 19
- 25
-
Hi, before that I need to import some dll, because System.Speech is not available in my project even though I added by using "using System.Speech". – Tarik Jun 08 '09 at 06:16
-
@Mackenzie: this is a better answer than mine, as it uses .net native classes rather than mucking around with COM. – Michael Petrotta Jun 08 '09 at 06:25
-
1@atarikg: Reference the System.Speech assembly. – Michael Petrotta Jun 08 '09 at 06:27
5
This is from a few moments' play, so caveat emptor. Worked well for me. I did notice that SpFileStream (which doesn't implement IDisposable, thus the try/finally) prefers absolute paths to relative. 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();
}
}

Michael Petrotta
- 59,888
- 27
- 145
- 179
5
And as I've found for how to change output format, we code something like this :
SpeechAudioFormatInfo info = new SpeechAudioFormatInfo(6, AudioBitsPerSample.Sixteen, AudioChannel.Mono);
//Same code comes here
ss.SetOutputToWaveFile(@"C:\MyAudioFile.wav",info);
That's pretty easy and comprehensible.
Cool .net

Tarik
- 79,711
- 83
- 236
- 349