Example #1
0
 public MixingWriter(MixingSource mixer, int iSource)
 {
     this.m_settings = new Codecs.WAV.EncoderSettings(mixer.PCM);
     this.mixer      = mixer;
     this.iSource    = iSource;
     this.samplePos  = 0;
     this.mixbuff    = null;
     this.volume     = 1.0f;
 }
Example #2
0
 /// <summary>
 /// Creates a new WASAPI Output
 /// </summary>
 /// <param name="device">Device to use</param>
 /// <param name="shareMode"></param>
 /// <param name="useEventSync">true if sync is done with event. false use sleep.</param>
 /// <param name="latency"></param>
 public WasapiOut(MMDevice device, AudioClientShareMode shareMode, bool useEventSync, int latency, AudioPCMConfig pcm)
 {
     this.m_settings          = new Codecs.WAV.EncoderSettings(pcm);
     this.audioClient         = device.AudioClient;
     this.shareMode           = shareMode;
     this.isUsingEventSync    = useEventSync;
     this.latencyMilliseconds = latency;
     this.outputFormat        = new NAudio.Wave.WaveFormatExtensible(pcm.SampleRate, pcm.BitsPerSample, pcm.ChannelCount);
     NAudio.Wave.WaveFormatExtensible closestSampleRateFormat;
     if (!audioClient.IsFormatSupported(shareMode, outputFormat, out closestSampleRateFormat))
     {
         throw new NotSupportedException("PCM format mismatch");
     }
     Init();
     bufferFrameCount = audioClient.BufferSize;
     readBuffers      = new AudioBuffer[2];
     readBuffers[0]   = new AudioBuffer(pcm, bufferFrameCount);
     readBuffers[1]   = new AudioBuffer(pcm, bufferFrameCount);
     //if (this.shareMode == AudioClientShareMode.Exclusive)
     //    this.latencyMilliseconds = (int)(this.audioClient.DefaultDevicePeriod / 10000);
 }
Example #3
0
        public LossyWAVWriter(IAudioDest audioDest, IAudioDest lwcdfDest, double quality, Codecs.WAV.EncoderSettings settings)
        {
            _audioDest = audioDest;
            _lwcdfDest = lwcdfDest;
            m_settings = settings;

            if (_audioDest != null && _audioDest.Settings.PCM.BitsPerSample > Settings.PCM.BitsPerSample)
            {
                throw new Exception("audio parameters mismatch");
            }
            if (_lwcdfDest != null && _lwcdfDest.Settings.PCM.BitsPerSample != Settings.PCM.BitsPerSample)
            {
                throw new Exception("audio parameters mismatch");
            }

            int quality_integer = (int)Math.Floor(quality);

            fft_analysis_string = new string[4] {
                "0100010", "0110010", "0111010", "0111110"
            };
            bool[]   quality_auto_fft32_on                = { false, false, false, true, true, true, true, true, true, true, true };
            double[] quality_noise_threshold_shifts       = { 20, 16, 9, 6, 3, 0, -2.4, -4.8, -7.2, -9.6, -12 };
            double[] quality_signal_to_noise_ratio        = { -18, -22, -23.5, -23.5, -23.5, -25, -28, -31, -34, -37, -40 };
            double[] quality_dynamic_minimum_bits_to_keep = { 2.5, 2.75, 3.00, 3.25, 3.50, 3.75, 4.0, 4.25, 4.5, 4.75, 5.00 };
            double[] quality_maximum_clips_per_channel    = { 3, 3, 3, 3, 2, 1, 0, 0, 0, 0, 0 };

            this_analysis_number = 2;
            impulse                      = quality_auto_fft32_on[quality_integer];
            linkchannels                 = false;
            noise_threshold_shift        = Math.Round(interpolate_param(quality_noise_threshold_shifts, quality) * 1000) / 1000;
            snr_value                    = Math.Round(interpolate_param(quality_signal_to_noise_ratio, quality) * 1000) / 1000;
            dynamic_minimum_bits_to_keep = Math.Round(interpolate_param(quality_dynamic_minimum_bits_to_keep, quality) * 1000) / 1000;
            maximum_clips_per_channel    = (int)Math.Round(interpolate_param(quality_maximum_clips_per_channel, quality));
            scaling_factor               = 1.0;
            shaping_factor               = Math.Min(1, quality / 10);
            shaping_is_on                = shaping_factor > 0;

            _audioBuffer = new AudioBuffer(Settings.PCM, 256);
        }
Example #4
0
 public IcecastWriter(AudioPCMConfig pcm, IcecastSettingsData settings)
 {
     this.m_settings = new Codecs.WAV.EncoderSettings(pcm);
     this.settings   = settings;
 }