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); }
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); }