Пример #1
0
        public void PlayModule(bool loopIndefinitely = false)
        {
            _mainPlayer.Pause(SongPlayer);
            _mainPlayer.Unload(SongPlayer);
            _mainPlayer.Load(SongPlayer, SilenceHelper.GetSilenceAudioFile());
            var songLength = _loopLength * Module.Sequence.Count;

            _mainPlayer.AddSection(SongPlayer, SongPlayer, 0, songLength, bpm: _targetBpm);

            var section = _mainPlayer.GetAudioSection(SongPlayer, SongPlayer);

            section.LoopIndefinitely = loopIndefinitely;

            var patternOffset = 0D;

            foreach (var sequence in Module.Sequence)
            {
                var pattern = Module.Patterns.FirstOrDefault(x => x.Key == sequence);
                if (pattern == null)
                {
                    continue;
                }

                for (var channelIndex = 0; channelIndex < Module.Channels.Count; channelIndex++)
                {
                    var channelSequence = pattern.Sequence[channelIndex];
                    var positions       = GetPositions(channelSequence);
                    var player          = _channelPlayers[channelIndex];

                    if (!positions.Any() || positions[0].Item2 != 0D)
                    {
                        _mainPlayer.AddEvent(SongPlayer, patternOffset, "", "", EventType.PauseAll, player);
                    }

                    foreach (var position in positions)
                    {
                        var currentPosition = position.Item2 + patternOffset;
                        _mainPlayer.AddEvent(SongPlayer, currentPosition, position.Item1, position.Item1,
                                             EventType.PlaySolo, player);
                    }
                }

                patternOffset += _loopLength;
            }

            if (!loopIndefinitely)
            {
                for (var channelIndex = 0; channelIndex < Module.Channels.Count; channelIndex++)
                {
                    var player = _channelPlayers[channelIndex];
                    _mainPlayer.AddEvent(SongPlayer, patternOffset, "", "", EventType.PauseAll, player);
                }
            }

            _mainPlayer.QueueSection(SongPlayer, SongPlayer);
            _mainPlayer.Play(SongPlayer);
        }
Пример #2
0
        public ProcessorWaveProvider(string sourceName, IWaveProvider sourceWaveProvider, string waveFilePath, WaveFormat outFormat, Common.ProcessRadioSignalingItemDelegate sigDelegate, Action<bool> hasPropertyChanged, bool recordEnabled, Common.SignalRecordingType recordType, int recordKickTime, Common.NoiseFloor noiseFloor, int customNoiseFloor,bool removeNoise, bool decodeMDC1200, bool decodeGEStar, bool decodeFleetSync, bool decodeP25)
            : base(sourceWaveProvider, waveFilePath)
        {
            LastValidStreamTitle = string.Empty;
            _sourceName = sourceName;
            _sourceFormat = sourceWaveProvider.WaveFormat;
            _outFormat = outFormat;
            _hasPropertyChanged = hasPropertyChanged;

            _silenceHelper = new SilenceHelper(outFormat.AverageBytesPerSecond / (outFormat.BitsPerSample / 8), noiseFloor, removeNoise, customNoiseFloor);

            if (outFormat.Equals(sourceWaveProvider.WaveFormat))
            {
                _resampleStream = null;
                _useResampler = false;
            }
            else
            {
                if (Common.AppSettings.Instance.DiagnosticMode)
                {
                    Common.ConsoleHelper.ColorWriteLine(ConsoleColor.Magenta, "{0}: Source Format <> Out Format [{1}] <> [{2}]", sourceName, sourceWaveProvider.WaveFormat, outFormat);
                }
                _resampleStream = new NAudio.Wave.Compression.AcmStream(sourceWaveProvider.WaveFormat, outFormat);
                _useResampler = true;
            }
            if (decodeMDC1200)
            {
                _mdc = new Decoders.MDC1200(outFormat.SampleRate, ProcessMDC1200, sourceName);
            }
            else
            {
                _mdc = null;
            }
            if (decodeGEStar)
            {
                _star = new Decoders.STAR(outFormat.SampleRate, ProcessSTAR, Decoders.STAR.star_format.star_format_1_16383, sourceName);
            }
            else
            {
                _star = null;
            }
            _rootDecoder = new Decoders.RootDecoder(outFormat.SampleRate, decodeFleetSync, decodeP25, ProcessRootDecoder);

            _recorder = new AudioRecorder(sourceName, recordType, recordKickTime, outFormat, AudioProcessingGlobals.DefaultSaveFileWaveFormat, recordEnabled);
            _bytesPerSample = outFormat.BitsPerSample / 8;
            _encoding = outFormat.Encoding;
            _sigDelegate = sigDelegate;
        }
Пример #3
0
        public ProcessorWaveProvider(string sourceName, IWaveProvider sourceWaveProvider, string waveFilePath, WaveFormat outFormat, Common.ProcessRadioSignalingItemDelegate sigDelegate, Action <bool> hasPropertyChanged, bool recordEnabled, Common.SignalRecordingType recordType, int recordKickTime, Common.NoiseFloor noiseFloor, int customNoiseFloor, bool removeNoise, bool decodeMDC1200, bool decodeGEStar, bool decodeFleetSync, bool decodeP25)
            : base(sourceWaveProvider, waveFilePath)
        {
            LastValidStreamTitle = string.Empty;
            _sourceName          = sourceName;
            _sourceFormat        = sourceWaveProvider.WaveFormat;
            _outFormat           = outFormat;
            _hasPropertyChanged  = hasPropertyChanged;

            _silenceHelper = new SilenceHelper(outFormat.AverageBytesPerSecond / (outFormat.BitsPerSample / 8), noiseFloor, removeNoise, customNoiseFloor);

            if (outFormat.Equals(sourceWaveProvider.WaveFormat))
            {
                _resampleStream = null;
                _useResampler   = false;
            }
            else
            {
                if (Common.AppSettings.Instance.DiagnosticMode)
                {
                    Common.ConsoleHelper.ColorWriteLine(ConsoleColor.Magenta, "{0}: Source Format <> Out Format [{1}] <> [{2}]", sourceName, sourceWaveProvider.WaveFormat, outFormat);
                }
                _resampleStream = new NAudio.Wave.Compression.AcmStream(sourceWaveProvider.WaveFormat, outFormat);
                _useResampler   = true;
            }
            if (decodeMDC1200)
            {
                _mdc = new Decoders.MDC1200(outFormat.SampleRate, ProcessMDC1200, sourceName);
            }
            else
            {
                _mdc = null;
            }
            if (decodeGEStar)
            {
                _star = new Decoders.STAR(outFormat.SampleRate, ProcessSTAR, Decoders.STAR.star_format.star_format_1_16383, sourceName);
            }
            else
            {
                _star = null;
            }
            _rootDecoder = new Decoders.RootDecoder(outFormat.SampleRate, decodeFleetSync, decodeP25, ProcessRootDecoder);

            _recorder       = new AudioRecorder(sourceName, recordType, recordKickTime, outFormat, AudioProcessingGlobals.DefaultSaveFileWaveFormat, recordEnabled);
            _bytesPerSample = outFormat.BitsPerSample / 8;
            _encoding       = outFormat.Encoding;
            _sigDelegate    = sigDelegate;
        }
Пример #4
0
        public void PlayPatternChannel(string patternKey, string channelKey)
        {
            var pattern = Module.Patterns.FirstOrDefault(x => x.Key == patternKey);

            if (pattern == null)
            {
                return;
            }

            var channel = Module.Channels.FirstOrDefault(x => x.Key == channelKey);

            if (channel == null)
            {
                return;
            }

            var channelIndex    = Module.Channels.IndexOf(channel);
            var channelSequence = pattern.Sequence[channelIndex];
            var positions       = GetPositions(channelSequence);
            var player          = _channelPlayers[channelIndex];

            Pause();

            _mainPlayer.Unload(PatternPlayer);
            _mainPlayer.Load(PatternPlayer, SilenceHelper.GetSilenceAudioFile());
            _mainPlayer.AddSection(PatternPlayer, PatternPlayer, 0, _loopLength, bpm: _targetBpm);
            var section = _mainPlayer.GetAudioSection(PatternPlayer, PatternPlayer);

            section.LoopIndefinitely = true;

            foreach (var position in positions)
            {
                var currentPosition = position.Item2;

                _mainPlayer.AddEvent(PatternPlayer, currentPosition, position.Item1, position.Item1,
                                     EventType.PlaySolo, player);
            }

            _mainPlayer.QueueSection(PatternPlayer, PatternPlayer);
            _mainPlayer.Play(PatternPlayer);
        }