public ReceiverSampleProvider(WaveFormat waveFormat, ushort id, int voiceInputNumber) { WaveFormat = waveFormat; ID = id; mixer = new MixingSampleProvider(WaveFormat) { ReadFully = true }; voiceInputs = new List <CallsignSampleProvider>(); for (int i = 0; i < voiceInputNumber; i++) { var voiceInput = new CallsignSampleProvider(WaveFormat, this); voiceInputs.Add(voiceInput); mixer.AddMixerInput(voiceInput); } ; blockTone = new BlockingToneSampleProvider(WaveFormat.SampleRate, 1) { Frequency = 180, Gain = 0 }; hfWhiteNoise = new ResourceSoundSampleProvider(Samples.Instance.HFWhiteNoise) { Looping = true, Gain = 0 }; mixer.AddMixerInput(blockTone.ToMono()); if (!AudioConfig.Instance.HfSquelch) { mixer.AddMixerInput(hfWhiteNoise.ToMono()); } volume = new VolumeSampleProvider(mixer); hfSquelchEn = AudioConfig.Instance.HfSquelch; }
public CallsignSampleProvider(WaveFormat waveFormat, ReceiverSampleProvider receiver) { this.receiver = receiver; WaveFormat = waveFormat; if (waveFormat.Channels != 1) { throw new Exception("Incorrect number of channels. A channel count of 1 is required."); } decoderShortBuffer = new short[frameCount]; decoderByteBuffer = new byte[frameCount * 2]; mixer = new MixingSampleProvider(WaveFormat) { ReadFully = true }; crackleSoundProvider = new ResourceSoundSampleProvider(Samples.Instance.Crackle) { Looping = true, Gain = 0 }; vhfWhiteNoise = new ResourceSoundSampleProvider(Samples.Instance.WhiteNoise) { Looping = true, Gain = 0 }; hfWhiteNoise = new ResourceSoundSampleProvider(Samples.Instance.HFWhiteNoise) { Looping = true, Gain = 0 }; acBusNoise = new ResourceSoundSampleProvider(Samples.Instance.AcBus) { Looping = true, Gain = 0 }; audioInput = new BufferedWaveProvider(new WaveFormat(WaveFormat.SampleRate, 16, 1)) { ReadFully = true, BufferLength = new WaveFormat(WaveFormat.SampleRate, 16, 1).AverageBytesPerSecond * 60 }; //Create the compressor simpleCompressorEffect = new SimpleCompressorEffect(new Pcm16BitToSampleProvider(audioInput)); simpleCompressorEffect.Enabled = true; simpleCompressorEffect.MakeUpGain = -5.5; limiterEffect = new LimiterEffect(simpleCompressorEffect); // Create the voice EQ voiceEq = new EqualizerSampleProvider(limiterEffect, AudioConfig.Instance.VhfEqualizer); BypassEffects = false; DistanceRatio = 1; mixer.AddMixerInput(crackleSoundProvider); mixer.AddMixerInput(vhfWhiteNoise.ToMono()); mixer.AddMixerInput(acBusNoise.ToMono()); if (AudioConfig.Instance.HfSquelch) { mixer.AddMixerInput(hfWhiteNoise.ToMono()); } mixer.AddMixerInput(voiceEq); timer = new System.Timers.Timer(); timer.Interval = 100; timer.Elapsed += _timer_Elapsed; }