public static void Main(string[] args)
 {
     using (var p = Pipeline.Create())
     {
         //var myConsumer = new MyConsumer(p);
         var myConsumer = new SocketStringConsumer(p, "localhost", 9000, 8099);
         var s = Generators.Repeat(p, "Test", 10);
         s.PipeTo(myConsumer.In);
         p.Run();
         Console.ReadKey(true);
     }
 }
        /// <summary>
        /// Builds and runs a speech recognition pipeline using the .NET System.Speech recognizer and a set of fixed grammars.
        /// </summary>
        /// <param name="outputLogPath">The path under which to write log data.</param>
        /// <param name="inputLogPath">The path from which to read audio input data.</param>
        /// <param name="showLiveVisualization">A flag indicating whether to display live data in PsiStudio as the pipeline is running.</param>
        public static void RunSystemSpeech(string outputLogPath = null, string inputLogPath        = null, bool showLiveVisualization = true,
                                           string facilitatorIP = "localhost", int facilitatorPort = 9000, int localPort              = 8090)
        {
            // Create the pipeline object.
            using (Pipeline pipeline = Pipeline.Create())
            {
                // Needed only for live visualization
                DateTime startTime = DateTime.Now;

                // Use either live audio from the microphone or audio from a previously saved log
                IProducer <AudioBuffer> audioInput = null;
                if (inputLogPath != null)
                {
                    // Open the MicrophoneAudio stream from the last saved log
                    var store = Store.Open(pipeline, Program.AppName, inputLogPath);
                    audioInput = store.OpenStream <AudioBuffer>($"{Program.AppName}.MicrophoneAudio");

                    // Get the originating time of the start of the data in the store. We will use this
                    // to set the correct start time in the visualizer (if live visualization is on).
                    startTime = store.OriginatingTimeInterval.Left;
                }
                else
                {
                    // Create the AudioSource component to capture audio from the default device in 16 kHz 1-channel
                    // PCM format as required by both the voice activity detector and speech recognition components.
                    audioInput = new AudioSource(pipeline, new AudioSourceConfiguration()
                    {
                        OutputFormat = WaveFormat.Create16kHz1Channel16BitPcm()
                    });
                }

                // Create System.Speech recognizer component
                var recognizer = CreateSpeechRecognizer(pipeline);

                // Subscribe the recognizer to the input audio
                audioInput.PipeTo(recognizer);

                // Partial and final speech recognition results are posted on the same stream. Here
                // we use Psi's Where() operator to filter out only the final recognition results.
                var finalResults = recognizer.Out.Where(result => result.IsFinal);
                finalResults.Do(x => Console.WriteLine(x));
                //KioskUI.KioskUI ui = new KioskUI.KioskUI(pipeline);
                //SystemSpeechSynthesizer speechSynth = CreateSpeechSynthesizer(pipeline);
                KioskInputTextPreProcessor preproc = new NU.Kqml.KioskInputTextPreProcessor(pipeline, (SystemSpeechRecognizer)recognizer);

                finalResults.PipeTo(preproc.In);
                preproc.Out.Do(x => Console.WriteLine($"Processed: {x}"));

                //preproc.Out.PipeTo(ui.UserInput);
                if (facilitatorIP != "none")
                {
                    python = new SocketStringConsumer(pipeline, facilitatorIP, facilitatorPort, localPort);
                    //preproc.Out.PipeTo(ui.UserInput);
                    //python.Out.PipeTo(ui.CompResponse);
                    //python.Out.PipeTo(speechSynth);
                }
                else
                {
                    //preproc.Out.PipeTo(ui.CompResponse);
                    //preproc.Out.PipeTo(speechSynth);
                }
                //speechSynth.SpeakCompleted.Do(x => preproc.setAccepting());

                // Create a data store to log the data to if necessary. A data store is necessary
                // only if output logging or live visualization are enabled.
                var dataStore = CreateDataStore(pipeline, outputLogPath, showLiveVisualization);

                // For disk logging or live visualization only
                if (dataStore != null)
                {
                    // Log the microphone audio and recognition results
                    audioInput.Write($"{Program.AppName}.MicrophoneAudio", dataStore);
                    finalResults.Write($"{Program.AppName}.FinalRecognitionResults", dataStore);
                }

                // Register an event handler to catch pipeline errors
                pipeline.PipelineCompletionEvent += PipelineCompletionEvent;

                // Run the pipeline
                pipeline.RunAsync();

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