/// <summary> /// Creates a new instance of <see cref="Mp3AudioEncoderLame"/>. /// </summary> /// <param name="channelCount">Channel count.</param> /// <param name="sampleRate">Sample rate (in samples per second).</param> /// <param name="outputBitRateKbps">Output bit rate (in kilobits per second).</param> /// <remarks> /// Encoder expects audio data in 16-bit samples. /// Stereo data should be interleaved: left sample first, right sample second. /// </remarks> public Mp3AudioEncoderLame(int channelCount, int sampleRate, int outputBitRateKbps) { Contract.Requires(channelCount == 1 || channelCount == 2); Contract.Requires(sampleRate > 0); Contract.Requires(SupportedBitRates.Contains(outputBitRateKbps)); if (lameFacadeType == null) { throw new InvalidOperationException("LAME DLL is not loaded. Call SetLameDllLocation first."); } lame = (ILameFacade)Activator.CreateInstance(lameFacadeType); lame.ChannelCount = channelCount; lame.InputSampleRate = sampleRate; lame.OutputBitRate = outputBitRateKbps; lame.PrepareEncoding(); formatData = FillFormatData(); }
/// <summary> /// Creates a new instance of <see cref="Mp3LameAudioEncoder"/>. /// </summary> /// <param name="channelCount">Channel count.</param> /// <param name="sampleRate">Sample rate (in samples per second).</param> /// <param name="outputBitRateKbps">Output bit rate (in kilobits per second).</param> /// <remarks> /// Encoder expects audio data in 16-bit samples. /// Stereo data should be interleaved: left sample first, right sample second. /// </remarks> public Mp3LameAudioEncoder(int channelCount, int sampleRate, int outputBitRateKbps) { Argument.IsInRange(channelCount, 1, 2, nameof(channelCount)); Argument.IsPositive(sampleRate, nameof(sampleRate)); Argument.Meets(SupportedBitRates.Contains(outputBitRateKbps), nameof(outputBitRateKbps)); lock (lameFacadeSync) { if (lameFacadeType is null) { throw new InvalidOperationException("LAME DLL is not loaded. Call SetLameDllLocation first."); } lame = (ILameFacade)Activator.CreateInstance(lameFacadeType); } lame.ChannelCount = channelCount; lame.InputSampleRate = sampleRate; lame.OutputBitRate = outputBitRateKbps; lame.PrepareEncoding(); formatData = FillFormatData(); }