Esempio n. 1
0
        private void RunInternal(IEventInput input, CancellationToken cancellationToken)
        {
            if (Output == null)
            {
                throw new Exception("SynthesizerPlayer was not initialized");
            }

            Output.Play();

            updateADSR();
            updateFrequencyFilter();

            bool exit = false;

            while (!input.Exit && !exit && !cancellationToken.IsCancellationRequested)
            {
                var result = input.Read();
                if (input.Event == null)
                {
                    continue;
                }

                switch (result)
                {
                case EventReadResult.Failed:
                    exit = true;
                    Console.WriteLine("Failed to read next buffer");
                    continue;

                case EventReadResult.Timeout:
                    continue;
                }

                if (DebugPrint)
                {
                    Console.WriteLine($"Event : {input.Event}");
                }
                switch (input.Event.Type)
                {
                case ToneEventType.Key:
                    var key = (ToneKeyEvent)input.Event;
                    handleKeyEvent(key);
                    break;

                case ToneEventType.Thumb:
                    var thumb = (ToneThumbEvent)input.Event;
                    handleThumbEvent(thumb);
                    break;

                case ToneEventType.Filter:
                    handleFilterEvent();
                    break;

                case ToneEventType.Wave:
                    handleWaveEvent();
                    break;
                }
            }

            Output.Buffer -= OutputOnBuffer;
            Output.Stop();

            if (DebugPrint)
            {
                Console.WriteLine("Output has stopped");
            }

            Output.Dispose();

            if (DebugPrint)
            {
                Console.WriteLine("Thread exited successfully");
            }
        }