Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Speech / Src / Synthesis / SpeechSynthesizer.cs / 1 / SpeechSynthesizer.cs
//------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------- using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Runtime.CompilerServices; using System.Speech.AudioFormat; using System.Speech.Internal; using System.Speech.Internal.ObjectTokens; using System.Speech.Internal.Synthesis; using System.Speech.Synthesis.TtsEngine; using System.Threading; using RegistryDataKey = System.Speech.Internal.ObjectTokens.RegistryDataKey; using RegistryEntry = System.Collections.Generic.KeyValuePair; namespace System.Speech.Synthesis { /// /// TODOC /// public sealed class SpeechSynthesizer : IDisposable #if SPEECHSERVER || PROMPT_ENGINE , ISesSynthesizer #endif { //******************************************************************* // // Constructors // //******************************************************************* #region Constructors ////// TODOC /// public SpeechSynthesizer () { } #if SPEECHSERVER ////// TODOC /// internal SpeechSynthesizer (bool outputAsText) : this () { VoiceSynthesizer._outputAsText = outputAsText; } #endif ////// /// ~SpeechSynthesizer () { Dispose (false); } ////// TODOC /// public void Dispose () { Dispose (true); GC.SuppressFinalize (this); } #endregion //******************************************************************** // // Public Methods // //******************************************************************* #region public Methods ////// TODOC /// /// public void SelectVoice (string name) { Helpers.ThrowIfEmptyOrNull (name, "name"); TTSVoice ttsVoice = VoiceSynthesizer.GetEngine (name, CultureInfo.CurrentUICulture, VoiceGender.NotSet, VoiceAge.NotSet, 1, true); if (ttsVoice == null || name != ttsVoice.VoiceInfo.Name) { // No match - throw throw new ArgumentException (SR.Get (SRID.SynthesizerSetVoiceNoMatch)); } VoiceSynthesizer.Voice = ttsVoice; } ////// TODOC /// /// public void SelectVoiceByHints (VoiceGender gender) { SelectVoiceByHints (gender, VoiceAge.NotSet, 1, CultureInfo.CurrentUICulture); } ////// TODOC /// /// /// public void SelectVoiceByHints (VoiceGender gender, VoiceAge age) { SelectVoiceByHints (gender, age, 1, CultureInfo.CurrentUICulture); } ////// TODOC /// /// /// /// public void SelectVoiceByHints (VoiceGender gender, VoiceAge age, int voiceAlternate) { SelectVoiceByHints (gender, age, voiceAlternate, CultureInfo.CurrentUICulture); } ////// TODOC /// /// /// /// /// public void SelectVoiceByHints (VoiceGender gender, VoiceAge age, int voiceAlternate, CultureInfo culture) { Helpers.ThrowIfNull (culture, "culture"); if (voiceAlternate < 0) { throw new ArgumentOutOfRangeException ("voiceAlternate", SR.Get (SRID.PromptBuilderInvalidVariant)); } if (!VoiceInfo.ValidateGender (gender)) { throw new ArgumentException (SR.Get (SRID.EnumInvalid, "VoiceGender"), "gender"); } if (!VoiceInfo.ValidateAge (age)) { throw new ArgumentException (SR.Get (SRID.EnumInvalid, "VoiceAge"), "age"); } TTSVoice ttsVoice = VoiceSynthesizer.GetEngine (null, culture, gender, age, voiceAlternate, true); if (ttsVoice == null) { // No match - throw throw new InvalidOperationException (SR.Get (SRID.SynthesizerSetVoiceNoMatch)); } VoiceSynthesizer.Voice = ttsVoice; } ////// TODOC /// /// ///public Prompt SpeakAsync (string textToSpeak) { Helpers.ThrowIfNull (textToSpeak, "textToSpeak"); Prompt prompt = new Prompt (textToSpeak, SynthesisTextFormat.Text); SpeakAsync (prompt); return prompt; } /// /// TODOC /// /// ///public void SpeakAsync (Prompt prompt) { Helpers.ThrowIfNull (prompt, "prompt"); prompt.Synthesizer = this; VoiceSynthesizer.SpeakAsync (prompt); } /// /// TODOC /// /// ///public Prompt SpeakSsmlAsync (string textToSpeak) { Helpers.ThrowIfNull (textToSpeak, "textToSpeak"); Prompt prompt = new Prompt (textToSpeak, SynthesisTextFormat.Ssml); SpeakAsync (prompt); return prompt; } /// /// TODOC /// /// ///public Prompt SpeakAsync (PromptBuilder promptBuilder) { Helpers.ThrowIfNull (promptBuilder, "promptBuilder"); Prompt prompt = new Prompt (promptBuilder); SpeakAsync (prompt); return prompt; } /// /// TODOC /// /// ///public void Speak (string textToSpeak) { Speak (new Prompt (textToSpeak, SynthesisTextFormat.Text)); } /// /// TODOC /// /// ///public void Speak (Prompt prompt) { Helpers.ThrowIfNull (prompt, "prompt"); // Avoid a dead lock if the synthesizer is Paused if (State == SynthesizerState.Paused) { throw new InvalidOperationException (SR.Get (SRID.SynthesizerSyncSpeakWhilePaused)); } prompt.Synthesizer = this; prompt._syncSpeak = true; VoiceSynthesizer.Speak (prompt); } /// /// TODOC /// /// ///public void Speak (PromptBuilder promptBuilder) { Speak (new Prompt (promptBuilder)); } /// /// TODOC /// /// ///public void SpeakSsml (string textToSpeak) { Speak (new Prompt (textToSpeak, SynthesisTextFormat.Ssml)); } /// /// Pause the playback of all speech in this synthesizer. /// public void Pause () { // Increment the Paused count if (!paused) { VoiceSynthesizer.Pause (); paused = true; } } ////// Resume the playback of all speech in this synthesizer. /// public void Resume () { if (paused) { VoiceSynthesizer.Resume (); paused = false; } } ////// Cancel playback of all Prompts currently in the queue. /// /// public void SpeakAsyncCancel (Prompt prompt) { Helpers.ThrowIfNull (prompt, "prompt"); VoiceSynthesizer.Abort (prompt); } ////// Cancel playback of all Prompts currently in the queue. /// public void SpeakAsyncCancelAll () { VoiceSynthesizer.Abort (); } ////// TODOC /// /// // The stream is disposed when the speech synthesizer is disposed public void SetOutputToWaveFile (string path) { Helpers.ThrowIfEmptyOrNull (path, "path"); SetOutputToNull (); SetOutputStream (new FileStream (path, FileMode.Create, FileAccess.Write), null, true, true); } #if !SPEECHSERVER ////// TODOC /// /// /// // The stream is disposed when the speech synthesizer is disposed public void SetOutputToWaveFile (string path, SpeechAudioFormatInfo formatInfo) { Helpers.ThrowIfEmptyOrNull (path, "path"); Helpers.ThrowIfNull (formatInfo, "formatInfo"); SetOutputToNull (); SetOutputStream (new FileStream (path, FileMode.Create, FileAccess.Write), formatInfo, true, true); } #endif ////// TODOC /// /// public void SetOutputToWaveStream (Stream audioDestination) { Helpers.ThrowIfNull (audioDestination, "audioDestination"); SetOutputStream (audioDestination, null, true, false); } ////// TODOC /// /// /// #if !SPEECHSERVER public void SetOutputToAudioStream (Stream audioDestination, SpeechAudioFormatInfo formatInfo) #else internal void SetOutputToAudioStream (Stream audioDestination, SpeechAudioFormatInfo formatInfo) #endif { Helpers.ThrowIfNull (audioDestination, "audioDestination"); Helpers.ThrowIfNull (formatInfo, "formatInfo"); SetOutputStream (audioDestination, formatInfo, false, false); } ////// TODOC /// public void SetOutputToDefaultAudioDevice () { SetOutputStream (null, null, true, false); } ////// TODOC /// // The stream is disposed when the speech synthesizer is disposed public void SetOutputToNull () { // Close the existing stream if (_outputStream != Stream.Null) { VoiceSynthesizer.SetOutput (Stream.Null, null, true); } if (_outputStream != null) { if (_closeStreamOnExit) { _outputStream.Close (); } } _outputStream = Stream.Null; } ////// TODOC /// ///// Dynamic content, use a method instead of a property to denote that fact public Prompt GetCurrentlySpokenPrompt () { return VoiceSynthesizer.Prompt; } /// /// TODOC /// ///public ReadOnlyCollection GetInstalledVoices () { return VoiceSynthesizer.GetInstalledVoices (null); } /// /// TODOC /// /// ///public ReadOnlyCollection GetInstalledVoices (CultureInfo culture) { Helpers.ThrowIfNull (culture, "culture"); if (culture.Equals (CultureInfo.InvariantCulture)) { throw new ArgumentException (SR.Get (SRID.InvariantCultureInfo), "culture"); } return VoiceSynthesizer.GetInstalledVoices (culture); } /// /// TODOC /// /// /// public void AddLexicon (Uri uri, string mediaType) { Helpers.ThrowIfNull (uri, "uri"); VoiceSynthesizer.AddLexicon (uri, mediaType); } ////// TODOC /// /// public void RemoveLexicon (Uri uri) { Helpers.ThrowIfNull (uri, "uri"); VoiceSynthesizer.RemoveLexicon (uri); } #if SPEECHSERVER || PROMPT_ENGINE ////// TODOC /// /// /// void ISesSynthesizer.LoadDatabase (string localName, string alias) { VoiceSynthesizer.LoadDatabase (localName, alias); } ////// TODOC /// /// void ISesSynthesizer.UnloadDatabase (string alias) { VoiceSynthesizer.UnloadDatabase (alias); } ////// TODOC /// /// void ISesSynthesizer.SetResourceLoader (ISpeechResourceLoader resourceLoader) { VoiceSynthesizer.SetResourceLoader (resourceLoader); } #endif //******************************************************************** // // Public Events // //******************************************************************** #region public Events ////// TODOC /// public event EventHandlerSpeakStarted { [MethodImplAttribute (MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer._speakStarted += value; } [MethodImplAttribute (MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer._speakStarted -= value; } } /// /// TODOC /// public event EventHandlerSpeakCompleted { [MethodImplAttribute (MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer._speakCompleted += value; } [MethodImplAttribute (MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer._speakCompleted -= value; } } /// /// TODOC /// public event EventHandlerSpeakProgress { [MethodImplAttribute (MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.AddEvent (TtsEventId.WordBoundary, ref VoiceSynthesizer._speakProgress, value); } [MethodImplAttribute (MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.RemoveEvent (TtsEventId.WordBoundary, ref VoiceSynthesizer._speakProgress, value); } } /// /// TODOC /// public event EventHandlerBookmarkReached { [MethodImplAttribute (MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.AddEvent (TtsEventId.Bookmark, ref VoiceSynthesizer._bookmarkReached, value); } [MethodImplAttribute (MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.RemoveEvent (TtsEventId.Bookmark, ref VoiceSynthesizer._bookmarkReached, value); } } /// /// TODOC /// public event EventHandlerVoiceChange { [MethodImplAttribute (MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.AddEvent (TtsEventId.VoiceChange, ref VoiceSynthesizer._voiceChange, value); } [MethodImplAttribute (MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.RemoveEvent (TtsEventId.VoiceChange, ref VoiceSynthesizer._voiceChange, value); } } #if !SPEECHSERVER #region WinFx /// /// TODOC /// public event EventHandlerPhonemeReached { [MethodImplAttribute (MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.AddEvent (TtsEventId.Phoneme, ref VoiceSynthesizer._phonemeReached, value); } [MethodImplAttribute (MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.RemoveEvent (TtsEventId.Phoneme, ref VoiceSynthesizer._phonemeReached, value); } } /// /// TODOC /// public event EventHandlerVisemeReached { [MethodImplAttribute (MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.AddEvent (TtsEventId.Viseme, ref VoiceSynthesizer._visemeReached, value); } [MethodImplAttribute (MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.RemoveEvent (TtsEventId.Viseme, ref VoiceSynthesizer._visemeReached, value); } } #endregion #else /// /// TODOC /// public event EventHandlerProprietaryEngineEvent { [MethodImplAttribute(MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.AddEvent (TtsEventId.Private, ref VoiceSynthesizer._proprietaryEngineEvent, value); } [MethodImplAttribute(MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer.RemoveEvent (TtsEventId.Private, ref VoiceSynthesizer._proprietaryEngineEvent, value); } } #endif /// /// TODOC /// ///public event EventHandler StateChanged { [MethodImplAttribute (MethodImplOptions.Synchronized)] add { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer._stateChanged += value; } [MethodImplAttribute (MethodImplOptions.Synchronized)] remove { Helpers.ThrowIfNull (value, "value"); VoiceSynthesizer._stateChanged -= value; } } #endregion #endregion Events //******************************************************************* // // Public Properties // //******************************************************************** #region public Properties /// /// TODOC /// ///public SynthesizerState State { get { return VoiceSynthesizer.State; } } /// /// TODOC /// public int Rate { set { if (value < -10 || value > 10) { throw new ArgumentOutOfRangeException ("value", SR.Get (SRID.RateOutOfRange)); } VoiceSynthesizer.Rate = value; } get { return VoiceSynthesizer.Rate; } } ////// TODOC /// public int Volume { set { if (value < 0 || value > 100) { throw new ArgumentOutOfRangeException ("value", SR.Get (SRID.ResourceUsageOutOfRange)); } VoiceSynthesizer.Volume = value; } get { return VoiceSynthesizer.Volume; } } ////// TODOC /// ///public VoiceInfo Voice { get { // Get the sapi voice return VoiceSynthesizer.CurrentVoice (true).VoiceInfo; } } //******************************************************************* // // Internal Properties // //******************************************************************* #region Internal Properties #if SPEECHSERVER || PROMPT_ENGINE static internal string PromptVoices { set { _promptVoices = value; } get { return _promptVoices; } } #endif #endregion #endregion //******************************************************************* // // Private Methods // //******************************************************************** #region Private Methods /// /// TODOC /// /// /// /// /// private void SetOutputStream (Stream stream, SpeechAudioFormatInfo formatInfo, bool headerInfo, bool closeStreamOnExit) { SetOutputToNull (); _outputStream = stream; _closeStreamOnExit = closeStreamOnExit; // Need to serialize into a proper wav file before closing the stream VoiceSynthesizer.SetOutput (stream, formatInfo, headerInfo); } ////// TODOC /// /// private void Dispose (bool disposing) { if (!_isDisposed && disposing) { if (_voiceSynthesis != null) { // flag it first so asynchronous operation has more time to finish _isDisposed = true; SpeakAsyncCancelAll (); // Flush the Output stream if (_outputStream != null) { if (_closeStreamOnExit) { _outputStream.Close (); } else { _outputStream.Flush (); } _outputStream = null; } } } if (_voiceSynthesis != null) { // Terminate the background synthesis object the thread. _voiceSynthesis.Dispose (); _voiceSynthesis = null; } _isDisposed = true; } #endregion //******************************************************************* // // Private Properties // //******************************************************************** #region Private Properties private VoiceSynthesis VoiceSynthesizer { get { if (_voiceSynthesis == null && _isDisposed) { throw new ObjectDisposedException ("SpeechSynthesizer"); } if (_voiceSynthesis == null) { WeakReference wr = new WeakReference (this); _voiceSynthesis = new VoiceSynthesis (wr); } return _voiceSynthesis; } } #endregion //******************************************************************** // // Private Fields // //******************************************************************* #region Private Fields // SpVoice for this synthesizer private VoiceSynthesis _voiceSynthesis; // Is the object disposed? private bool _isDisposed; // Count of number of consecutive calls to Paused private bool paused; // .Net Stream - keep a reference to it to avoid it to be GC private Stream _outputStream; // If stream were created in SpeechFx then close it, otherwise it should remain open. private bool _closeStreamOnExit; #if SPEECHSERVER || PROMPT_ENGINE private static string _promptVoices = SAPICategories.PromptVoices; #endif #endregion Fields } //******************************************************************** // // Public Enums // //******************************************************************* #region Public Enums ////// TODOC /// public enum SynthesizerState { ////// TODOC /// Ready, ////// TODOC /// Speaking, ////// TODOC /// Paused } #if !SPEECHSERVER ////// TODOC /// [Flags] public enum SynthesizerEmphasis { ////// TODOC /// Stressed = 1, ////// TODOC /// Emphasized = 2 } #endif #endregion } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DesignerLabelAdapter.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ThreadExceptionEvent.cs
- FunctionImportMapping.ReturnTypeRenameMapping.cs
- BinaryWriter.cs
- PKCS1MaskGenerationMethod.cs
- CodeCatchClauseCollection.cs
- InkCanvasSelectionAdorner.cs
- ReachIDocumentPaginatorSerializerAsync.cs
- DoubleCollectionValueSerializer.cs
- SmtpFailedRecipientException.cs
- CodePageUtils.cs
- Image.cs
- Size3D.cs
- _ListenerRequestStream.cs
- X509CertificateRecipientServiceCredential.cs
- MetadataPropertyCollection.cs
- LayoutEngine.cs
- FrameworkContentElement.cs
- SystemTcpConnection.cs
- ReadOnlyDictionary.cs
- StyleCollection.cs
- ApplicationInfo.cs
- ContractReference.cs
- ActiveXMessageFormatter.cs
- Brush.cs
- Brushes.cs
- glyphs.cs
- DrawListViewItemEventArgs.cs
- DebuggerAttributes.cs
- XmlConvert.cs
- Set.cs
- StorageScalarPropertyMapping.cs
- DeploymentSection.cs
- ImplicitInputBrush.cs
- ScopeCompiler.cs
- _ContextAwareResult.cs
- BadImageFormatException.cs
- AdvancedBindingEditor.cs
- FileRecordSequenceHelper.cs
- SystemIPInterfaceProperties.cs
- SelectedDatesCollection.cs
- Renderer.cs
- ArraySortHelper.cs
- ScriptResourceDefinition.cs
- RangeContentEnumerator.cs
- HttpClientCertificate.cs
- MethodExpression.cs
- XmlSchemaValidator.cs
- MethodRental.cs
- GeometryGroup.cs
- ApplicationServiceHelper.cs
- CodeMethodReturnStatement.cs
- RightsManagementInformation.cs
- HtmlEncodedRawTextWriter.cs
- PageTheme.cs
- SafeNativeMethods.cs
- OracleCommandSet.cs
- XmlSchemaSimpleContentRestriction.cs
- IntegerValidatorAttribute.cs
- GridViewItemAutomationPeer.cs
- BoundingRectTracker.cs
- EventToken.cs
- OrderedParallelQuery.cs
- TextFormattingConverter.cs
- XmlDataLoader.cs
- DataListItem.cs
- DataMemberAttribute.cs
- Queue.cs
- WebPartConnectionsEventArgs.cs
- TaskCanceledException.cs
- ObjectCache.cs
- ZipFileInfoCollection.cs
- TextBox.cs
- JsonByteArrayDataContract.cs
- XmlTextAttribute.cs
- GridViewHeaderRowPresenter.cs
- StrokeNodeData.cs
- UICuesEvent.cs
- EntityDataSourceState.cs
- LineBreakRecord.cs
- DataGrid.cs
- Crc32.cs
- DataObject.cs
- AssociationSet.cs
- FastEncoder.cs
- KoreanLunisolarCalendar.cs
- BitmapFrameDecode.cs
- ReferencedAssembly.cs
- TryCatch.cs
- HttpPostedFileBase.cs
- WpfXamlLoader.cs
- NotificationContext.cs
- IndexerReference.cs
- BamlBinaryReader.cs
- ForEach.cs
- ProcessModuleDesigner.cs
- SplineQuaternionKeyFrame.cs
- FactoryGenerator.cs
- DataBindEngine.cs