26/01/2016
讓程式說話
1. ASUS X450J / Windows 10 /VS 2012
2. 文字轉語音,語音轉mp3
---------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//---
using System.Speech.Synthesis;
// 5. 加入 mp3 套件
// Install-Package NAudio.Lame
// 6. 使用命名空間
using NAudio.Wave;
using NAudio.Lame;
// 8.
using System.IO;
namespace 語音控制1
{
class Program
{
static void Main(string[] args)
{
// 語音合成
// 1. 加入語音程式庫 System.Speech
// 2. 使用命名空間 using System.Speech.Synthesis;
// 3. 用語音合成類別(SpeechSynthesizer)建立 語音物件
SpeechSynthesizer 語音物件 = new SpeechSynthesizer();
// 4. 呼叫說(Speak)方法,輸出字串
語音物件.Speak("君不見黃河之水天上來,奔流到海不復回,君不見高堂明鏡悲白髮,朝如青絲暮成雪。");
// 7. 轉mp3
// Ref: http://stackoverflow.com/…/c-sharp-save-text-to-speech-to-m…
using (SpeechSynthesizer reader = new SpeechSynthesizer())
{
//set some settings
reader.Volume = 100;
reader.Rate = 0; //medium
//save to memory stream
MemoryStream ms = new MemoryStream();
reader.SetOutputToWaveStream(ms);
//do speaking
reader.Speak("君不見黃河之水天上來,奔流到海不復回,君不見高堂明鏡悲白髮,朝如青絲暮成雪。");
//now convert to mp3 using LameEncoder or shell out to audiograbber
ConvertWavStreamToMp3File(ref ms, "mytest.mp3");
}
}
public static void ConvertWavStreamToMp3File(ref MemoryStream ms, string savetofilename)
{
//rewind to beginning of stream
ms.Seek(0, SeekOrigin.Begin);
using (var retMs = new MemoryStream())
using (var rdr = new WaveFileReader(ms))
using (var wtr = new LameMP3FileWriter(savetofilename, rdr.WaveFormat, LAMEPreset.VBR_90))
{
rdr.CopyTo(wtr);
}
}
}
}