Condividi tramite


SpeakProgressEventArgs.CharacterPosition Proprietà

Definizione

Ottiene il numero di caratteri e spazi dall'inizio della richiesta alla posizione prima della prima lettera della parola che è stata appena pronunciata.

public:
 property int CharacterPosition { int get(); };
public int CharacterPosition { get; }
member this.CharacterPosition : int
Public ReadOnly Property CharacterPosition As Integer

Valore della proprietà

Restituisce il numero di caratteri e spazi dall'inizio della richiesta alla posizione prima della prima lettera della parola che è stata appena pronunciata.

Esempio

Nell'esempio seguente viene creato un oggetto PromptBuilder e viene aggiunto il contenuto SSML di un file XML usando XmlReader. L'esempio restituisce la voce in un file WAV per la riproduzione. Il contenuto del file XML contenente SSML viene visualizzato sotto l'esempio di codice.

using System;  
using System.Xml;  
using System.IO;  
using System.Speech.Synthesis;  

namespace SampleSynthesis  
{  
  class Program  
  {  
    static void Main(string[] args)  
    {  

      // Initialize a new instance of the SpeechSynthesizer.  
      using (SpeechSynthesizer synth = new SpeechSynthesizer())  
      {  

        // Configure the audio output.   
        synth.SetOutputToDefaultAudioDevice();  

        // Create a path to the file that contains SSML.  
        string weatherFile = Path.GetFullPath("c:\\test\\Weather.ssml");  

        // Create an XML Reader from the file, create a PromptBuilder and   
        // append the XmlReader.  
        PromptBuilder builder = new PromptBuilder();  

        if (File.Exists(weatherFile))  
        {  
          XmlReader reader = XmlReader.Create(weatherFile);  
          builder.AppendSsml(reader);  
          reader.Close();  
        }  

        // Add a handler for the SpeakProgress event.  
        synth.SpeakProgress +=  
          new EventHandler<SpeakProgressEventArgs>(synth_SpeakProgress);  

        // Speak the prompt and play back the output file.  
        synth.Speak(builder);  
      }  

      Console.WriteLine();  
      Console.WriteLine("Press any key to exit...");  
      Console.ReadKey();  
    }  

    // Write each word and its character position to the console.  
    static void synth_SpeakProgress(object sender, SpeakProgressEventArgs e)  
    {  
      Console.WriteLine("Speak progress: {0} {1}",  
        e.CharacterPosition, e.Text);  
    }  
  }  
}  
<!-- The following are the contents of the file Weather.ssml.   
Note that because of the <p> tag and the space that follows it,   
that the character position of the first word "The" will be 86. -->  

<?xml version="1.0" encoding="ISO-8859-1"?>  
<speak version="1.0"  
 xmlns="http://www.w3.org/2001/10/synthesis"  
 xml:lang="en-US">  

  <p> The weather forecast for today is partly cloudy with   
some sun breaks. </p>  

  <break strength="medium" />  

  <p> Tonight's weather will be cloudy with a 30% chance of   
showers. </p>  

</speak>  

Commenti

Include CharacterPosition il conteggio dei caratteri nei tag XML, incluse le parentesi quadre racchiuse. Quando si usa uno dei AppendTextmetodi , , AppendSsmlMarkupAppendTextWithAliasAppendTextWithHint, o AppendTextWithPronunciation , il contenuto viene aggiunto a un prompt SSML che include gli elementi di apertura e chiusura.speak L'elemento di apertura speak aggiunge un offset di 82 caratteri e spazi all'oggetto CharacterPosition di tutte le parole e lettere del prompt. Nel frammento di codice seguente, ad esempio, la CharacterPosition prima parola "this" è 82.

builder.AppendText("This is a test");  
Synthesizer.Speak(builder);  

Nell'esempio precedente la CharacterPosition parola "test" è 92. Nel frammento seguente il CharacterPosition frammento di parola "test" è di 23 caratteri superiori (115) perché il tag prosody pitch="high" di apertura< che precede contiene 23 caratteri e spazi (i due caratteri di escape "\"> non vengono conteggiati).

builder.AppendSsmlMarkup("This is a <prosody pitch=\"high\"> test </prosody>.");   
Synthesizer.Speak(builder);  

Se si usano i AppendSsml metodi per aggiungere contenuto a un prompt specificando un file, la dichiarazione di apertura xml e speak gli elementi nel file non vengono usati o conteggiati. Il primo carattere nel file dopo il tag di apertura speak sarà nella posizione 82 se è il primo contenuto nel prompt.

Al contrario, il parametro stringa di un metodo non viene aggiunto a un Speak prompt SSML prima di essere parlato. Pertanto, la CharacterPosition prima parola "this", nel frammento seguente è zero.

Synthesizer.Speak("This is a test.");  

I SpeechSynthesizer numeri normalizzano le parole che corrispondono al modo in cui verrà parlato il numero. Ad esempio, il sintetizzatore parla il numero "4003" come "quattromila tre". Genera un SpeakProgress evento per ognuna delle tre parole pronunciate. Tuttavia, la CharacterPosition proprietà per ognuna delle tre parole è la stessa. È la posizione prima del primo carattere del numero "4003" nel testo del prompt.

Si applica a