cadencii.AquesTone2WaveGenerator.begin C# (CSharp) Method

begin() public method

public begin ( long total_samples, WorkerState state ) : void
total_samples long
state WorkerState
return void
        public void begin( long total_samples, WorkerState state )
        {
            is_running_ = true;
            total_samples_ = total_samples;
            int buffer_length = sample_rate_ / 10;
            double[] left = new double[buffer_length];
            double[] right = new double[buffer_length];

            if ( driver_.getUi( null ) == null ) {
                throw new InvalidOperationException("plugin ui を main view のスレッドで作成した後、このメソッドを呼ばなくてはならない。");
            }

            var eventQueue = generateMidiEvent( sequence_, track_index_ );
            foreach ( var sequence_item in eventQueue.getSequence() ) {
                var clock = sequence_item.Key;
                var queue = sequence_item.Value;

                long to_sample = (long)(sequence_.getSecFromClock( clock ) * sample_rate_);
                if ( to_sample >= total_samples_ ) {
                    to_sample = total_samples_;
                }
                doSynthesis( to_sample, left, right, state );
                if ( position_ >= total_samples_ ) break;

                // noteOff, noteOn の順に分けて send する方法も考えられるが、正しく動作しない。
                // このため、いったん一つの配列にまとめてから send する必要がある。
                var events = new List<MidiEvent>();
                events.AddRange( queue.pit );
                events.AddRange( queue.noteoff );
                events.AddRange( queue.noteon );
                driver_.send( events.ToArray() );

                //TODO: のこりのイベント送る処理
            }

            doSynthesis( total_samples, left, right, state );

            receiver_.end();
            is_running_ = false;
            state.reportComplete();
        }