public SoundcardSampleProvider(int sampleRate, List <ushort> receiverIDs, EventHandler <TransceiverReceivingCallsignsChangedEventArgs> eventHandler)
        {
            WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, 1);

            mixer = new MixingSampleProvider(WaveFormat)
            {
                ReadFully = true
            };

            receiverInputs   = new List <ReceiverSampleProvider>();
            this.receiverIDs = new List <ushort>();
            foreach (var receiverID in receiverIDs)
            {
                var receiverInput = new ReceiverSampleProvider(WaveFormat, receiverID, 4);
                receiverInput.ReceivingCallsignsChanged += eventHandler;
                receiverInputs.Add(receiverInput);
                this.receiverIDs.Add(receiverID);
                mixer.AddMixerInput(receiverInput);
            }

            landLineRing = new ResourceSoundSampleProvider(Samples.Instance.LandLineRing)
            {
                Looping = true, Gain = 0
            };
            mixer.AddMixerInput(landLineRing);
        }
        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;
        }
Exemple #3
0
        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;
        }