Example #1
0
        public void AppendText(string textToSpeak, PromptRate rate)
        {
            Helpers.ThrowIfNull(textToSpeak, nameof(textToSpeak));

            if (rate < PromptRate.NotSet || rate > PromptRate.ExtraSlow)
            {
                throw new ArgumentOutOfRangeException(nameof(rate));
            }

            // Validate that text can be added in this context
            ValidateElement(_elementStack.Peek(), SsmlElement.Text);

            Element prosodyElement = new(ElementType.Prosody, textToSpeak);

            _elements.Add(prosodyElement);
            string sPromptRate = null;

            switch (rate)
            {
            case PromptRate.NotSet:
                break;

            case PromptRate.ExtraFast:
                sPromptRate = "x-fast";
                break;

            case PromptRate.ExtraSlow:
                sPromptRate = "x-slow";
                break;

            default:
                sPromptRate = rate.ToString().ToLowerInvariant();
                break;
            }
            if (!string.IsNullOrEmpty(sPromptRate))
            {
                prosodyElement._attributes = new Collection <AttributeItem>();
                prosodyElement._attributes.Add(new AttributeItem("rate", sPromptRate));
            }
        }
Example #2
0
        public void AppendText(string textToSpeak, PromptRate rate)
        {
            Helpers.ThrowIfNull(textToSpeak, "textToSpeak");
            if (rate < PromptRate.NotSet || rate > PromptRate.ExtraSlow)
            {
                throw new ArgumentOutOfRangeException("rate");
            }
            ValidateElement(_elementStack.Peek(), SsmlElement.Text);
            Element element = new Element(ElementType.Prosody, textToSpeak);

            _elements.Add(element);
            string value = null;

            switch (rate)
            {
            case PromptRate.ExtraFast:
                value = "x-fast";
                break;

            case PromptRate.ExtraSlow:
                value = "x-slow";
                break;

            default:
                value = rate.ToString().ToLowerInvariant();
                break;

            case PromptRate.NotSet:
                break;
            }
            if (!string.IsNullOrEmpty(value))
            {
                element._attributes = new Collection <AttributeItem>();
                element._attributes.Add(new AttributeItem("rate", value));
            }
        }
 public PromptStyle(PromptRate rate)
 {
     Rate = rate;
 }
 public new void AppendText(string textToSpeak, PromptRate rate)
 {
     HebrewPromptReader.ReadInto(this, textToSpeak);
 }
        //parse the entire thing out and say the stuff.
        public void parse(string filename)
        {
            //Load the file
            lines = System.IO.File.ReadAllLines(filename);

            //Parse the anchors
            Parse_Anchors();


            while (index < lines.Length)
            {
                string input = lines[index];
                index++;

                //Parse the context
                if (input.StartsWith("SetRate:"))
                {
                    string rate = input.Substring(8);
                    if (Ratevalues.ContainsKey(rate))
                    {
                        PromptRate pmt_rate = Ratevalues[rate];
                        style_.Rate = pmt_rate;
                    }
                }

                if (input.StartsWith("SetEmp:"))
                {
                    string Empsetting = input.Substring(7);
                    if (Emphasisvalues.ContainsKey(Empsetting))
                    {
                        PromptEmphasis emp_val = Emphasisvalues[Empsetting];
                        style_.Emphasis = emp_val;
                    }
                }
                if (input.StartsWith("<Deepener>"))
                {
                    //Make note of the deepender here.
                    if (!random_lines.ContainsKey(index))
                    {
                        random_lines.Add(index, "<Deepener>");
                    }
                    //now we will run a Deepener script here.

                    int    Deepener_Count = Deepener_names.Count();
                    Random r             = new Random();
                    int    next_Deepener = r.Next(Deepener_Count);
                    string Deepener_name = Deepener_names[next_Deepener];
                    //Some recursive magic now
                    SpeechScriptInterpreter Deepener_interpreter = new SpeechScriptInterpreter();
                    Deepener_interpreter.init(); //Initialize the new interpreter instance
                    Deepener_interpreter.parse(Deepener_name);
                }

                if (input.StartsWith("<Goto:"))
                {
                    string command = "Goto";
                    //Get the anchor object.
                    Anchor A = FetchAnchor(input, command);

                    //The '!' character is reserved and anchors cannot use it
                    //It is used to denote a failed fetch. To prevent NullErrors.

                    if (A.name != "!")
                    {
                        int line_index = A.line_number;
                        //Assign indirectly the index of this trance to the Anchor index.
                        index = line_index;
                    }
                }

                //Change inputs by setting functions for them for more efficient parsing and
                //Templating of code blocks.
                if (input.StartsWith("<QueryMulti:"))
                {
                    QueryMulti(input);
                }

                if (input.StartsWith("<QueryDeepEnough>"))
                {
                    Dialouge get_state = new Dialouge();
                    say_default("Are you deep enough yet?");
                    get_state.ShowDialog();
                    //Find out yes or no
                    string result = get_state.ReturnValue;
                    if (result == "Yes")
                    {
                        continue;
                    }
                    if (result == "No")
                    {
                        for (int i = index; i > 0; i--)
                        {
                            //search backwards for the previous Deepener
                            //Did we find a '<Deepener> tag?
                            if (random_lines.ContainsKey(i))
                            {
                                if (random_lines[i] == "<Deepener>")
                                {
                                    //does it match?
                                    //if it does, we go backwards in the script
                                    //All the way to this point
                                    index = i - 1;
                                    break; //We want to quit the search
                                }
                            }
                        }
                    }
                }

                //Generic Query
                if (input.StartsWith("<QueryGeneric:"))
                {
                    HandleQuery(input);
                }


                //Say the stuff, treating our rate and emphasis as part of a state machine
                //Which we re-apply each time something is to be spoken.
                if (input.StartsWith("Say:"))
                {
                    string voice_string = input.Substring(4);
                    builder.ClearContent();
                    builder.StartSentence();
                    builder.StartStyle(style_);
                    builder.AppendText(voice_string);
                    builder.EndStyle();
                    builder.EndSentence();
                    //lastly let the ball roll and see if we can hear some chatter.
                    reader.Speak(builder);
                }
            }
        }
Example #6
0
        private void Speak(string str, PromptRate rate, PromptVolume volume, bool quoted)
        {
            int speakRate   = defaultRate;
            int speakVolume = defaultVolume;

            switch (rate)
            {
            case PromptRate.ExtraSlow:
                speakRate -= 2;
                break;

            case PromptRate.Slow:
                speakRate -= 1;
                break;

            case PromptRate.Medium:
                speakRate += 0;
                break;

            case PromptRate.Fast:
                speakRate += 1;
                break;

            case PromptRate.ExtraFast:
                speakRate += 2;
                break;
            }

            switch (volume)
            {
            case PromptVolume.Silent:
                speakVolume -= 50;
                break;

            case PromptVolume.ExtraSoft:
                speakVolume -= 20;
                break;

            case PromptVolume.Soft:
                speakVolume -= 10;
                break;

            case PromptVolume.NotSet:
                speakVolume += 0;
                break;

            case PromptVolume.Default:
                speakVolume += 0;
                break;

            case PromptVolume.Medium:
                speakVolume += 0;
                break;

            case PromptVolume.Loud:
                speakVolume += 10;
                break;

            case PromptVolume.ExtraLoud:
                speakVolume += 20;
                break;
            }

            if (quoted)
            {
                speakVolume += 10;
            }

            if (speakVolume > 100)
            {
                speakVolume = 100;
            }
            else if (speakVolume < 0)
            {
                speakVolume = 0;
            }

            if (speakRate > 10)
            {
                speakRate = 10;
            }
            else if (speakRate < -10)
            {
                speakRate = -10;
            }

            synth.Volume = speakVolume;
            synth.Rate   = speakRate;
            synth.Speak(str);
        }
        private void Speak(string str, PromptRate rate, PromptVolume volume, bool quoted)
        {
            int speakRate = defaultRate;
            int speakVolume = defaultVolume;

            switch (rate)
            {
                case PromptRate.ExtraSlow:
                    speakRate -= 2;
                    break;
                case PromptRate.Slow:
                    speakRate -= 1;
                    break;
                case PromptRate.Medium:
                    speakRate += 0;
                    break;
                case PromptRate.Fast:
                    speakRate += 1;
                    break;
                case PromptRate.ExtraFast:
                    speakRate += 2;
                    break;
            }

            switch (volume)
            {
                case PromptVolume.Silent:
                    speakVolume -= 50;
                    break;
                case PromptVolume.ExtraSoft:
                    speakVolume -= 20;
                    break;
                case PromptVolume.Soft:
                    speakVolume -= 10;
                    break;
                case PromptVolume.NotSet:
                    speakVolume += 0;
                    break;
                case PromptVolume.Default:
                    speakVolume += 0;
                    break;
                case PromptVolume.Medium:
                    speakVolume += 0;
                    break;
                case PromptVolume.Loud:
                    speakVolume += 10;
                    break;
                case PromptVolume.ExtraLoud:
                    speakVolume += 20;
                    break;
            }

            if (quoted)
                speakVolume += 10;

            if (speakVolume > 100)
                speakVolume = 100;
            else if (speakVolume < 0)
                speakVolume = 0;

            if (speakRate > 10)
                speakRate = 10;
            else if (speakRate < -10)
                speakRate = -10;

            synth.Volume = speakVolume;
            synth.Rate = speakRate;
            synth.Speak(str);
        }
 public new void AppendText(string textToSpeak, PromptRate rate)
 {
     HebrewPromptReader.ReadInto(this, textToSpeak);
 }