public Resampler(ResamplingQuality quality, int channels, double sampleRateRatio) { Quality = quality; Channels = channels; Ratio = sampleRateRatio; ConverterType ct = ConverterType.SRC_ZERO_ORDER_HOLD; switch (quality) { case ResamplingQuality.VeryLow: ct = ConverterType.SRC_ZERO_ORDER_HOLD; break; case ResamplingQuality.Low: ct = ConverterType.SRC_LINEAR; break; case ResamplingQuality.Medium: ct = ConverterType.SRC_SINC_FASTEST; break; case ResamplingQuality.High: ct = ConverterType.SRC_SINC_MEDIUM_QUALITY; break; case ResamplingQuality.VeryHigh: ct = ConverterType.SRC_SINC_BEST_QUALITY; break; case ResamplingQuality.VariableRate: ct = ConverterType.SRC_SINC_MEDIUM_QUALITY; break; } _src = new SampleRateConverter(ct, channels); _src.SetRatio(sampleRateRatio); }
public static IResampler CreateInstance(ResamplingQuality quality, int channels, double sampleRateRatio) { if (Factory == null) { throw new NotSupportedException("Cannot create instance because no factory has been set."); } return(Factory.CreateInstance(quality, channels, sampleRateRatio)); }
public Resampler(ResamplingQuality quality, int channels, double sampleRateRatio) { Quality = quality; Channels = channels; Ratio = sampleRateRatio; QualityRecipe qr = QualityRecipe.SOXR_HQ; QualityFlags qf = QualityFlags.SOXR_ROLLOFF_SMALL; switch (quality) { case ResamplingQuality.VeryLow: qr = QualityRecipe.SOXR_QQ; break; case ResamplingQuality.Low: qr = QualityRecipe.SOXR_LQ; break; case ResamplingQuality.Medium: qr = QualityRecipe.SOXR_MQ; break; case ResamplingQuality.High: qr = QualityRecipe.SOXR_HQ; break; case ResamplingQuality.VeryHigh: qr = QualityRecipe.SOXR_VHQ; break; case ResamplingQuality.VariableRate: qr = QualityRecipe.SOXR_HQ; qf = QualityFlags.SOXR_VR; break; } double inputRate = 1; double outputRate = sampleRateRatio; if (qf == QualityFlags.SOXR_VR) { // set max variable rate inputRate = 10.0; outputRate = 1.0; } _soxr = new SoxResampler(inputRate, outputRate, channels, qr, qf); }
public ResamplingStream(IAudioStream sourceStream, ResamplingQuality quality) : base(sourceStream) { if (!(sourceStream.Properties.Format == AudioFormat.IEEE && sourceStream.Properties.BitDepth == 32)) { throw new ArgumentException("unsupported source format: " + sourceStream.Properties); } properties = new AudioProperties(sourceStream.Properties.Channels, sourceStream.Properties.SampleRate, sourceStream.Properties.BitDepth, sourceStream.Properties.Format); this.quality = quality; SetupResampler(); sourceBuffer = new ByteBuffer(); TargetSampleRate = properties.SampleRate; position = 0; }
public NAudioWdlResampler(ResamplingQuality quality, int channels, double sampleRateRatio) { Quality = quality; Channels = channels; Ratio = sampleRateRatio; _resampler = new NAudioWdlResamplerWrapper(); // TODO apply fitting configuration settings for the different quality levels switch (quality) { case ResamplingQuality.VeryLow: break; case ResamplingQuality.Low: break; case ResamplingQuality.Medium: break; case ResamplingQuality.High: break; case ResamplingQuality.VeryHigh: break; case ResamplingQuality.VariableRate: break; } // Config in NAudio: https://github.com/naudio/NAudio/blob/master/NAudio/Wave/SampleProviders/WdlResamplingSampleProvider.cs _resampler.SetMode(true, 2, false); _resampler.SetFilterParms(); _resampler.SetFeedMode(true); // Set input sample rate to 1 because we do not know the actual sample rates in here, only the desired output ratio // The actual sample rates should be irrelevant anyway, the only thing that counts is the ratio between input and putput _resampler.SetRates(1, sampleRateRatio); }
public IResampler CreateInstance(ResamplingQuality quality, int channels, double sampleRateRatio) { return(new NAudioWdlResampler(quality, channels, sampleRateRatio)); }
public ResamplingStream(IAudioStream sourceStream, ResamplingQuality quality, double sampleRateRatio) : this(sourceStream, quality) { SampleRateRatio = sampleRateRatio; }
public ResamplingStream(IAudioStream sourceStream, ResamplingQuality quality, int outputSampleRate) : this(sourceStream, quality) { TargetSampleRate = outputSampleRate; }
public virtual void setResamplingQuality(ResamplingQuality resamplingQuality) { this.resamplingQuality = resamplingQuality; }
/// <summary> /// Create a new configuration with default values. /// </summary> public AudioConfiguration() { resamplingQuality = ResamplingQuality.LOW; opusEncodingQuality = OPUS_QUALITY_MAX; outputFormat = StandardAudioDataFormats.DISCORD_OPUS; }