public override Data getData()
        {
            Data data;

            if (this.outputQueue.isEmpty())
            {
                data = this.getPredecessor().getData();
                if (data != null)
                {
                    if (data is DoubleData)
                    {
                        DoubleData doubleData = (DoubleData)data;
                        if (this.currentFirstSampleNumber == -1L)
                        {
                            this.currentFirstSampleNumber = doubleData.getFirstSampleNumber();
                        }
                        this.createWindow(doubleData.getSampleRate());
                        this.process(doubleData);
                    }
                    else
                    {
                        if (data is DataStartSignal)
                        {
                            DataStartSignal dataStartSignal = (DataStartSignal)data;
                            this.createWindow(dataStartSignal.getSampleRate());
                            Map props = dataStartSignal.getProps();
                            props.put("windowSize", Integer.valueOf(this.windowShift));
                            props.put("windowShift", Integer.valueOf(this.cosineWindow.Length));
                            this.currentFirstSampleNumber = -1L;
                        }
                        else if (data is SpeechStartSignal)
                        {
                            this.currentFirstSampleNumber = -1L;
                        }
                        else if (data is DataEndSignal || data is SpeechEndSignal)
                        {
                            this.processUtteranceEnd();
                        }
                        this.outputQueue.add(data);
                    }
                }
            }
            if (this.outputQueue.isEmpty())
            {
                return(null);
            }
            data = (Data)this.outputQueue.remove(0);
            if (data is DoubleData && !RaisedCosineWindower.assertionsDisabled && ((DoubleData)data).getValues().Length != this.cosineWindow.Length)
            {
                throw new AssertionError();
            }
            return(data);
        }
        /** Handles the first element in a feature-stream.
         * /// @param dataStartSignal*/
        protected void handleDataStartSignal(DataStartSignal dataStartSignal)
        {
            Dictionary <String, Object> dataProps = dataStartSignal.getProps();

            useSpeechSignals = dataProps.ContainsKey(DataStartSignal.SPEECH_TAGGED_FEATURE_STREAM) && (Boolean)dataProps[DataStartSignal.SPEECH_TAGGED_FEATURE_STREAM];
        }