public SOXResampler(AudioPCMConfig inputPCM, AudioPCMConfig outputPCM, SOXResamplerConfig config)
		{
			this.inputPCM = inputPCM;
			this.outputPCM = outputPCM;
			
			if (inputPCM.ChannelCount != outputPCM.ChannelCount)
				throw new NotSupportedException();

			if (outputPCM.SampleRate == inputPCM.SampleRate * 4 && config.Quality >= SOXResamplerQuality.Medium)
			{
				this.rate = new rate_t[inputPCM.ChannelCount];
				this.shared = new rate_shared_t();
				this.rateUp2 = new rate_t[inputPCM.ChannelCount];
				this.sharedUp2 = new rate_shared_t();

				for (int i = 0; i < inputPCM.ChannelCount; i++)
				{
					rateUp2[i] = new rate_t(inputPCM.SampleRate, inputPCM.SampleRate * 2, sharedUp2, 0.5,
						config.Quality, -1, config.Phase, config.Bandwidth, config.AllowAliasing);
					rate[i] = new rate_t(inputPCM.SampleRate * 2, inputPCM.SampleRate * 4, shared, 0.5,
						config.Quality, -1, 50, 90, true);
				}
			}
			else
			{
				this.rate = new rate_t[inputPCM.ChannelCount];
				this.shared = new rate_shared_t();

				for (int i = 0; i < inputPCM.ChannelCount; i++)
				{
					rate[i] = new rate_t(inputPCM.SampleRate, outputPCM.SampleRate, shared, (double)inputPCM.SampleRate / outputPCM.SampleRate,
						config.Quality, -1, config.Phase, config.Bandwidth, config.AllowAliasing);
				}
			}
		}
Exemple #2
0
        public SOXResampler(AudioPCMConfig inputPCM, AudioPCMConfig outputPCM, SOXResamplerConfig config)
        {
            this.inputPCM  = inputPCM;
            this.outputPCM = outputPCM;

            if (inputPCM.ChannelCount != outputPCM.ChannelCount)
            {
                throw new NotSupportedException();
            }

            if (outputPCM.SampleRate == inputPCM.SampleRate * 4 && config.Quality >= SOXResamplerQuality.Medium)
            {
                this.rate      = new rate_t[inputPCM.ChannelCount];
                this.shared    = new rate_shared_t();
                this.rateUp2   = new rate_t[inputPCM.ChannelCount];
                this.sharedUp2 = new rate_shared_t();

                for (int i = 0; i < inputPCM.ChannelCount; i++)
                {
                    rateUp2[i] = new rate_t(inputPCM.SampleRate, inputPCM.SampleRate * 2, sharedUp2, 0.5,
                                            config.Quality, -1, config.Phase, config.Bandwidth, config.AllowAliasing);
                    rate[i] = new rate_t(inputPCM.SampleRate * 2, inputPCM.SampleRate * 4, shared, 0.5,
                                         config.Quality, -1, 50, 90, true);
                }
            }
            else
            {
                this.rate   = new rate_t[inputPCM.ChannelCount];
                this.shared = new rate_shared_t();

                for (int i = 0; i < inputPCM.ChannelCount; i++)
                {
                    rate[i] = new rate_t(inputPCM.SampleRate, outputPCM.SampleRate, shared, (double)inputPCM.SampleRate / outputPCM.SampleRate,
                                         config.Quality, -1, config.Phase, config.Bandwidth, config.AllowAliasing);
                }
            }
        }