public ModelToWaveService(ThroatModelParameters parameters)
        {
            if (parameters.TubeLength <= 0)
            {
                throw new Exception("Illegal tube length.");
            }

            _parameters = parameters;
            ///CALCULATE THE SAMPLE RATE, BASED ON NOMINAL
            ///TUBE LENGTH AND SPEED OF SOUND
            var speedOfSound = WaveHelper.SpeedOfSound(parameters.TubeTemp);

            _controlPeriod = Math.Round((speedOfSound * parameters.TotalSections * parameters.SectionLength) / (parameters.TubeLength * parameters.InControlRate));
            SampleRate     = parameters.InControlRate * _controlPeriod;
            //var actualTubeLength = (speedOfSound * totalSections * sectionLength) / sampleRate;
            _nyquist           = SampleRate / 2.0;
            _breathinessFactor = parameters.GlotSrcBreathiness / 100d;
            _crossmixFactor    = 1.0d / WaveHelper.CalculateAmplitude(parameters.NoiseCrossmixOffset);
            _dampingFactor     = (1.0d - (parameters.JunctionLoss / 100d));
            _waveTable         = new WaveTable(SampleRate, parameters);
            _bandpassFilter    = new BandpassFilter();
            _vocalTract        = new VocalTract(parameters, _nyquist, SampleRate);
            // initializeFIRFilter(FIR_BETA, FIR_GAMMA, FIR_CUTOFF);
            // /*  INITIALIZE THE SAMPLE RATE CONVERSION ROUTINES  */
            // initializeConversion();

            /*  INITIALIZE THE TEMPORARY OUTPUT FILE  */
            // tempFilePtr = tmpfile();
            // rewind(tempFilePtr);
        }
Esempio n. 2
0
                    public static BandpassFilter[] Parse(MatrixQuery matrixQuery)
                    {
                        var matrix = matrixQuery?.GetMatrix();

                        if (matrix == null || matrix.Length == 0)
                        {
                            return(null);
                        }
                        var filterCount     = matrix.GetRowCount();
                        var bandpassFilters = new BandpassFilter[filterCount];

                        for (var r = 0; r < filterCount; r++)
                        {
                            bandpassFilters[r] = new BandpassFilter(matrix[r, 0], matrix[r, 1]);
                        }
                        return(bandpassFilters);
                    }