using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
System.IO;
using
System.Net;
using
System.Threading;
using
NAudio.Wave; //http://naudio.codeplex.com/
using
NAudio.CoreAudioApi;
using
System.Web;
using
System.Media;
using
SpeechLib; //NET2.0 引用 Speech sdk 5.1 在COM选项卡里面的Microsoft Speech object library引用 已经有11.0版本
using
Microsoft.DirectX;
using
Microsoft.DirectX.DirectSound;
namespace
Speech
{
/// <summary>
/// Csharp: Google TTS API 文本语音读取
/// 涂聚文
/// </summary>
public
partial class Form2 : Form
{
/// <summary>
///
/// </summary>
/// <param name="FileName"></param>
public
void PlaySound( string
FileName)
{
//要加载COM组件:Microsoft speech object Library
if
(!System.IO.File.Exists(FileName))
{
return ;
}
SpeechLib.SpVoiceClass pp = new
SpeechLib.SpVoiceClass();
SpeechLib.SpFileStreamClass spFs = new
SpeechLib.SpFileStreamClass();
spFs.Open(FileName, SpeechLib.SpeechStreamFileMode.SSFMOpenForRead, true );
SpeechLib.ISpeechBaseStream Istream = spFs as
SpeechLib.ISpeechBaseStream;
pp.SpeakStream(Istream, SpeechLib.SpeechVoiceSpeakFlags.SVSFIsFilename);
spFs.Close();
}
/// <summary>
///
/// </summary>
public
Form2()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private
void Form2_Load( object
sender, EventArgs e)
{
this .textBox1.Text = "中华人民共和国" ;
//ok
WebClient web = new
WebClient();
web.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 9.0; Windows;)" );
string
encstr = string .Empty;
string
filename = "tts.mp3" ; //could also be tts.wav
string
s = "中华人民共和国涂聚文投诉" ;
encstr = Uri.EscapeDataString(s);
Console.WriteLine(encstr);
web.DownloadFile( "http://translate.google.com/translate_tts?ie=UTF-8&tl=zh-cn&q="
+ encstr, ".\\"
+ filename);
//PlaySound(Application.StartupPath+"\\"+filename);
//SoundPlayer sp = new SoundPlayer();
//sp.SoundLocation = Application.StartupPath + "\\" + filename;
//sp.LoadAsync();
//sp.PlaySync();
//sp.PlayLooping();
//Device dv = new Device();
//SecondaryBuffer buf = new SecondaryBuffer(Application.StartupPath + "\\" + filename, dv);
//buf.Play(0, BufferPlayFlags.Looping);
this .axWindowsMediaPlayer1.URL = Application.StartupPath + "\\"
+ filename;
}
bool
waiting = false ;
AutoResetEvent stop = new
AutoResetEvent( false );
/// <summary>
/// 英文可以,中文不行
/// </summary>
/// <param name="url"></param>
public
void PlayMp3FromUrl( string
url)
{
try
{
url = HttpUtility.UrlDecode(url);
using
(Stream ms = new
MemoryStream())
{
using
(Stream stream = WebRequest.Create(url).GetResponse().GetResponseStream()) //HttpUtility.UrlDecode(
{
//UTF8Encoding encoding = new UTF8Encoding();
//byte[] buffer = encoding.GetBytes(url);
//stream.Write(buffer, 0, buffer.Length);
//stream.Close();
byte [] buffer = new
byte [32768]; //32768
int
read;
while
((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
//using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
//{
// writer.Write(url);
//}
}
//using (Stream stream = request.GetRequestStream())
//using (StreamWriter writer = new StreamWriter(requestStream, Encoding.UTF8))
//{
// writer.Write(url);
//}
ms.Position = 0;
using
(WaveStream blockAlignedStream =
new
BlockAlignReductionStream(
WaveFormatConversionStream.CreatePcmStream(
new
Mp3FileReader(ms))))
{
using
(WaveOut waveOut = new
WaveOut(WaveCallbackInfo.FunctionCallback()))
{
waveOut.Init(blockAlignedStream);
waveOut.PlaybackStopped += (sender, e) =>
{
waveOut.Stop();
};
waveOut.Play();
waiting = true ;
stop.WaitOne(10000);
waiting = false ;
}
}
}
}
catch
(Exception ex)
{
ex.Message.ToString();
}
}
/// <summary>
/// http://translate.google.com/translate_tts?tl=zh-cn&q=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD
/// http://translate.google.cn/translate_tts?ie=UTF-8&q=%E4%B8%AD%E5%9B%BD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD&tl=zh-cn&prev=input
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private
void button1_Click( object
sender, EventArgs e)
{
//var playThread = new Thread(() => PlayMp3FromUrl("http://translate.google.com/translate_tts?tl=en&q=" + HttpUtility.UrlEncode(this.textBox1.Text)));
string
str = HttpUtility.UrlEncode( this .textBox1.Text);
var
playThread = new
Thread(() => PlayMp3FromUrl( "http://translate.google.com/translate_tts?ie=UTF-8&tl=zh-cn&q="
+ str));// HttpUtility.UrlEncode(
playThread.IsBackground = true ;
playThread.Start();
}
}
}
|