- using System;
5 ~% A# a, W1 K! `9 l# H- A& p4 L) H - using System.Collections.Generic;
7 r5 o- y# V$ l, H/ _ - using System.Linq;( `0 e' d8 h n3 Q2 e1 f% Kبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- using System.Text;
5 _- N! x: H- k1 r' f - using Microsoft.Win32;$ i" b A2 Z3 \/ o$ f9 H# {- Eبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- using DotNetSpeech;; u1 f5 P% U1 e: }; dبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- namespace Xamxad
6 u9 \* Q [: O - {+ P# P4 O6 |8 _( qبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
3 {7 O7 i- E2 i- public class Langdu/ N) Z" X3 ~; z* z0 C- y) `بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {8 ? A, s1 B4 _: Eبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- public delegate void EndSpeakHanlder();( i3 { p1 `- rبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- public event EndSpeakHanlder EndSpeakEvent = null;2 u9 w) {; z2 kبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- SpVoice voice = new SpVoice();9 X1 W& @" ~4 Hبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- public Langdu()
, i! X0 u: u- F/ y* ? - {# l+ }1 O+ \) C! {: c0 Lبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- try& t, G( l: P6 ~& ?0 a- v* `بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {
9 q; Q+ j% |7 S, g+ a3 a9 ]* w - voice.EndStream += new _ISpeechVoiceEvents_EndStreamEventHandler(voice_EndStream);7 C* t, }/ I* o4 _- }, t9 Sبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }
: Z) c j L* J& B6 _ - catch (Exception ex)% X9 @# [6 H) f, f) f7 Gبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {
! r2 k5 k3 g& W5 ^5 j3 ]4 o6 y$ Z - 3 w$ L# h' q/ z/ G. j, ~بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }; W( s$ |4 ^/ @& z6 F: g# ^, Hبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }
+ X; J( C* @! V& X3 T - public void Stop()6 }# [ \5 B/ v! E Nبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {
$ m# Z6 W# O$ l - try/ @ E9 M; A; F" K! ^" {$ cبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {, V' c8 w$ \" U8 G" y) \+ Yبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- voice.Speak(string.Empty, SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);& C3 Y+ d) V8 f, I: j' v; D3 r0 W4 vبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }& a* M, z( C9 x2 kبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- catch (Exception ex)( E C) i) F8 z8 @; z& {بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {
4 y5 {5 U9 X# O! Q - 2 ^" f6 Y1 ]* H/ v0 kبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }
5 u5 m0 ?2 N2 x* ?! m1 I8 }0 _2 F S - }
. W. N: D! I+ {) U; V, G
4 o0 f i$ I5 o7 M5 h* k: H: l$ B- void voice_EndStream(int StreamNumber, object StreamPosITion)
3 s1 }2 d; ^. s9 G - {
8 q, ?4 }3 g+ W: ~; w% D - try
) o T* ^4 R8 @$ L$ X: m* F - {
+ m; `6 {% P; i9 K- e5 b - if (EndSpeakEvent != null)! D; u+ \" W6 T; K' ?) xبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {/ b' F, v& w! q* R% J, S! z/ @بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- EndSpeakEvent();
+ `; I' e- l; T* M" r z0 c - }
M8 e R3 z- F) z/ u' ^ p$ @' b - }: C0 B- S: j& F# ~2 m8 e o9 }بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- catch (Exception ex)
9 f6 { [1 L* h. }& _1 b \) j9 } - { }: c* w8 U' S2 A* eبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }
0 q% e5 Z4 t4 T0 p+ R: }7 b - public void Pause()" C( Z; P2 e1 F9 O7 {5 t" I2 jبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {6 D3 S h+ T( D6 Mبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- try, w/ ^8 o! q6 }بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {
* H( e- A, o3 q/ L: M: S; h. ` - voice.Pause();//暂停,使用, e/ t# H% f$ }! xبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }
7 ?; m: O2 Z% y8 y - catch (Exception ex): O* H" [ o! ~* X4 F, Fبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- { }
/ q& }0 U& `8 ]8 Z - }1 @$ q6 \, m/ bبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- //从暂停中继续刚才的朗读,使用
) v- _- \4 h* f5 p. c. e - public void Restart()& T. \4 g! [* [9 oبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {2 v3 l4 n6 s# A' F9 Zبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- try
% |9 r4 K+ a+ ]" I6 D4 ], [ - { {( J/ U) T* m& }: t$ M5 }بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- voice.Resume();0 }/ {( |6 q, [+ aبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }
9 I {! Y8 ? c0 V/ u" v6 `( A; R3 I - catch (Exception ex)' G! L1 \, ?( Rبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- { }2 y q+ s/ A" N/ [ s* vبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }9 v7 I9 z) L! yبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- public int SpeakText(string text)
0 Q2 d$ Y0 F4 n T) t - {
/ H0 |/ p& {7 l- G8 c/ z - try: |6 \4 F- Z, w- J5 s, D8 b+ Cبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {0 N8 J" N% B$ G5 o5 R' O4 c. bبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- //sp.Voice = sp.GetVoices("name=Microsoft Simplified Chinese", "").Item(0);
7 o) F }# K" U# b/ T, {; s/ d - //Voice中是语音类型(语言、男(女)声),有 Microsoft Simplified Chinese,Microsoft Mary(Sam,Mike)等,
& |6 c! X! }) D/ X% e1 T3 X* i - //也可以这样:voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0); //0选择默认的语音,
3 C8 \) k* e" o3 `( s3 n+ r - voice.Volume = 100;+ F4 v8 V; r: J2 w6 R' W1 mبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- voice.Rate = -2;//朗读语速7 U# D; r" ]6 r. q7 vبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- return voice.Speak(text, SpeechVoiceSpeakFlags.SVSFlagsAsync); //SpeechVoiceSpeakFlags是语音朗读的风格
5 `( B$ E" C1 H4 u# ?& `6 R - }5 y# j# G. `/ \, \* Rبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- catch (Exception ex)6 r+ j' G8 K! e* h/ W; eبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {
9 [3 F2 g( f! b, w+ q# l, v - return -1;
$ x! e+ p$ v5 k! f" B - }9 g4 } a1 a" S6 j& ^8 eبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }% R4 W7 T0 b$ F5 d: tبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- //生成语音文件5 X5 Q; `1 \0 K3 Y- h% mبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- public void GenerateVoiceFile(string text)
- A [# I1 Y9 { - {
) z& m/ w/ b2 x# Y - try
; ?4 t( |0 S7 L4 P: R4 _) I - {+ }! x/ \* ^" \. J0 L( u0 |بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
6 n# N4 R, o" |8 P - 9 f. M; f! T ~% Wبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- SaveFileDialog dialog = new SaveFileDialog();
, B4 G7 A3 `) E' A( A$ X* V - dialog.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
% |- t9 Z: o G6 k ^ X - dialog.Title = "保存WAV文件";0 N6 U% z+ Z: i. H& I$ ?# ^بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- dialog.FilterIndex = 2;5 s7 V4 } W& |! L; lبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- dialog.RestoreDirectory = true;( {( R2 j$ {7 y' ?( d8 B, D# ? \* oبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- if (dialog.ShowDialog() == true)7 }4 A, S5 r. S+ X+ [" h) Q9 Gبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- {" L* [ e2 \0 m9 W4 iبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- SpeechStreamFileMode spFileMode = SpeechStreamFileMode.SSFMCreateForWrite;8 U1 |. J& @( x- L6 ~% gبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- SpFileStream spFileStream = new SpFileStream();% h' [$ z( M! B7 Wبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- spFileStream.Open(dialog.FileName, spFileMode, false);
$ O" S& j% w2 j( H# r1 M' G; a - voice.AudioOutputStream = spFileStream;
5 d- s/ \9 ~9 N. w( }$ h - voice.Speak(text, spFlags);- `" Y& G0 n# U+ J' R4 O8 R! Kبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- voice.WaitUntilDone(1000);
8 W% u3 P5 B/ X2 N, E, {' F - //上面两句一定要写上,否则产生的文件没有声音1 C4 i& }% `* {4 }$ Hبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- //WaitUntilDone的后面的smTimeout是一个int型: D& A$ z0 Y+ @( v$ |/ L7 `6 l; \بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- spFileStream.Close();
% y* y9 ^. T" l" ~+ f/ R* S - }. Z' B9 \6 w8 w* y# Q' R" gبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }
9 R9 p* H$ T5 ^: Q. C! F, D: D3 r - catch (Exception ex)
# h3 e0 h- S$ q( P( h - { }) @! @+ T" C4 Wبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }0 L% T9 y& R* S, Eبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
- }
! ^# l/ \2 ^% j C. D( u - }2 L" C1 w9 S* x b9 }بۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
مەزمۇننى كۆچۈرۈۋېلىش
! ^# M# G9 v D) \5 ?7 T" q- b$ ^- @0 H4 f+ mبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
SpeakText فۇنىكسىيەسىدىن پايدىلانسىڭىز بولىدۇ.5 ~ t' w8 m% Y% Yبۇ مەزمۇنلار روھلان مۇنبىرىدىن كۆچۈرۈلگەن()
مەسىلەن: SpeakText("民族团结")
5 M/ ~% ]) A3 g$ q7 t* Tپىروگىرامما ئىجرا بولغاندا ياڭراتقۇدىن 民族团结نىڭ ئوقۇلىشى ئاڭلايسىز. |