private void OnRecordingStopped(object sender, EventArgs e)
        {
            _audioRecorder.Stopped -= OnRecordingStopped;
            _audioRecorder.Dispose();             //Not needed *currently* but always good to do

            this.RecordedGroup = new RecordedSongGroup(
                path: _audioRecorder.FullOutputPath,
                groupID: GroupID,
                startTime: RecordingStartTime,
                duration: _audioRecorder.CurrentLength,
                waveFormat: _audioRecorder.WaveFormat,
                songs: Songs.ToImmutableList()
                );
            _logger.Log($"Recording for song group '{GroupID}' has stopped.", LogType.MinorMessage);
            GroupFinished?.Invoke(this, EventArgs.Empty);

            //	Task.Run((Action)SplitSongs)
            //	.ContinueWith(
            //		task => {
            //			lock (_lock) {
            //				_splittingCompleted = true;
            //			}
            //			if (task.Exception != null) {
            //				_logger?.Invoke(
            //					"An error occurred while splitting the recording into songs in a separate thread:\r\n"
            //					+ task.Exception,
            //					LogType.Error
            //				);
            //			}
            //		}
            //	);
        }
        public SongGroupSplitter(RecordedSongGroup group, Logger logger, bool autostart = false)
        {
            this.Group   = group;
            this._logger = logger;

            this._asyncProcessHelper = AsyncProcessHelper.Create <RecordedSong>(SplitGroup, _logger, "split song group into songs");

            if (autostart)
            {
                SplitGroupAsync();
            }
        }
        public void Enqueue(RecordedSongGroup group)
        {
            _logger.Log($"Enqueued song group '{group.GroupID}' for splitting.");

            _pendingGroups.Enqueue(group);
        }