getVoice() public method

public getVoice ( string language, int index ) : string
language string
index int
return string
Example #1
0
        private void ConfigureSpeechEngine(TTSRequest request)
        {
            speech.Voice = config.getVoice(request.Language, request.Voice);

            /* Setting the DefaultRate is not ideal, but voice properties do not provide
             * the default rate, and it is currently not possible to send a reset message
             * to the NSSpeechSynthesizer via MonoMac.
             * This is a workaround that seems to suffice at the moment.
             */
            DefaultRate = 170f;
            //speech.Rate = (DefaultRate + -(5 - request.Speed) * 5);
            speech.Rate = Scale(request.Speed, 0, 10, 130, 200);
            Console.WriteLine(speech.Rate);
        }
Example #2
0
        protected override void OnLoad(EventArgs e)
        {
            Visible       = false;
            ShowInTaskbar = false;
            base.OnLoad(e);

            /*
             *  Get all installed voices
             *
             */
            var    voices = speech.GetInstalledVoices();
            string voice  = "";

            foreach (InstalledVoice v in voices)
            {
                if (v.Enabled)
                {
                    //voice = v.VoiceInfo.Name;
                    Console.WriteLine(v.VoiceInfo.Name);
                }
            }

            queuetimer          = new System.Timers.Timer(250);
            queuetimer.Elapsed += (object sender, ElapsedEventArgs ev) =>
            {
                TTSRequest r;
                if (Queue.TryDequeue(out r))
                {
                    Console.WriteLine("dequeing off of concurrent queue...");
                    if (r.Interrupt)
                    {
                        // stop current TTS
                        if (IsSpeaking)
                        {
                            //speech.StopSpeaking();
                        }
                        if (IsSounding)
                        {
                            //sound.Stop();
                            if (sound.PlaybackState == PlaybackState.Playing)
                            {
                                sound.Stop();
                            }
                        }
                        // clear queue
                        SpeechQueue.Clear();
                    }
                    SpeechQueue.Enqueue(r);
                    RequestCount++;
                }

                var eventdata = new Hashtable();
                eventdata.Add("ProcessedRequests", RequestCount);
                eventdata.Add("QueuedRequests", SpeechQueue.Count);
                eventdata.Add("IsSpeaking", IsSounding);
                InstrumentationEvent blam = new InstrumentationEvent();
                blam.EventName = "status";
                blam.Data      = eventdata;
                NotifyGui(blam.EventMessage());
            };

            // when this timer fires, it will pull off of the speech queue and speak it
            // the long delay also adds a little pause between tts requests.
            speechtimer          = new System.Timers.Timer(1000);
            speechtimer.Elapsed += (object sender, ElapsedEventArgs ev) =>
            {
                if (IsSpeaking.Equals(false))
                {
                    if (SpeechQueue.Count > 0)
                    {
                        TTSRequest r = SpeechQueue.Dequeue();
                        Console.WriteLine("dequeuing off of speech queue");
                        IsSpeaking          = true;
                        speechtimer.Enabled = false;

                        //speech.SpeakAsync(r.Text);

                        //using (speech = new SpeechSynthesizer()) {
                        speech = new SpeechSynthesizer();
                        speech.SpeakCompleted += speech_SpeakCompleted;
                        format = new SpeechAudioFormatInfo(EncodingFormat.ALaw, 8000, 8, 1, 1, 2, null);
                        //format = new SpeechAudioFormatInfo(11025, AudioBitsPerSample.Sixteen, AudioChannel.Mono);
                        // var si = speech.GetType().GetMethod("SetOutputStream", BindingFlags.Instance | BindingFlags.NonPublic);
                        stream = new MemoryStream();
                        //si.Invoke(speech, new object[] { stream, format, true, true });
                        //speech.SetOutputToWaveStream(stream);
                        speech.SetOutputToAudioStream(stream, format);
                        speech.SelectVoice(config.getVoice(r.Language, r.Voice));
                        int rate = (r.Speed * 2 - 10);

                        Console.WriteLine(rate);
                        try
                        {
                            speech.Rate = rate;
                        }
                        catch (ArgumentOutOfRangeException ex)
                        {
                            speech.Rate = 0;
                        }
                        speech.SpeakAsync(r.Text);
                        //}

                        synthesis.WaitOne();
                        speech.SpeakCompleted -= speech_SpeakCompleted;
                        speech.SetOutputToNull();
                        speech.Dispose();
                        //IsSpeaking = false;
                        IsSounding      = true;
                        stream.Position = 0;
                        //WaveFormat.CreateCustomFormat(WaveFormatEncoding.WmaVoice9, 11025, 1, 16000, 2, 16)
                        using (RawSourceWaveStream reader = new RawSourceWaveStream(stream, WaveFormat.CreateALawFormat(8000, 1))) {
                            WaveStream ws = WaveFormatConversionStream.CreatePcmStream(reader);

                            //var waveProvider = new MultiplexingWaveProvider(new IWaveProvider[] { ws }, 4);
                            //waveProvider.ConnectInputToOutput(0, 3);

                            sound = new WaveOutEvent();
                            // set output device *before* init
                            Console.WriteLine("Output Device: " + OutputDeviceId);
                            sound.DeviceNumber = OutputDeviceId;
                            sound.Init(ws);
                            //sound.Init(waveProvider);
                            sound.PlaybackStopped += output_PlaybackStopped;
                            // Console.WriteLine("playing here " + ws.Length);
                            sound.Play();
                        }
                        playback.WaitOne();
                        //IsSounding = false;
                        speechtimer.Enabled = true;
                    }
                }
            };

            queuetimer.Enabled = true;
            queuetimer.Start();
            speechtimer.Enabled = true;
            speechtimer.Start();

            InitHTTPServer();
        }