Exemplo n.º 1
0
        public int CurrentIndex()
        {
            var pos    = (double)audio.GetPosition().TotalMilliseconds;
            var length = (double)audio.GetLength().TotalMilliseconds;
            var a      = Math.Round(pos / length);

            return((int)Math.Round((pos / length) * signal.Length));
        }
Exemplo n.º 2
0
        //***********************************************************************************************************************************************************************************************************

        /// <summary>
        /// Stop a record
        /// </summary>
        public async void StopRecord()
        {
            try
            {
                if (RecordState == RecordStates.STOPPED)
                {
                    return;
                }

                if (_capture != null)
                {
                    try
                    {
                        _capture.Stop();
                        _capture.Dispose();
                    }
                    catch (Exception ex)
                    {
                        _logHandle.Report(new LogEventError("Error while stopping record: " + ex.Message));
                    }

                    _silenceOut.Stop();
                }
                if (_silenceOut != null)
                {
                    _silenceOut.Stop(); _silenceOut.Dispose();
                }
                if (_wavWriter != null)
                {
                    _wavWriter.Dispose();
                }
                _logHandle.Report(new LogEventInfo("Record (\"" + TrackInfo?.TrackName + "\") stopped."));

                if (System.IO.File.Exists(FileStrWAV))      //Delete too short records
                {
                    if (WasRecordPaused && RecorderRecSettings.DeletePausedRecords)
                    {
                        System.IO.File.Delete(FileStrWAV);
                        DirectoryManager.DeleteEmptyFolders(RecorderRecSettings.BasePath);
                        _logHandle.Report(new LogEventWarning("Record (\"" + TrackInfo?.TrackName + "\") deleted, because it was paused during record and DeletePausedRecords setting is enabled."));
                        RecordState = RecordStates.STOPPED;
                        return;
                    }

                    TimeSpan wavLength = TimeSpan.Zero;

                    try
                    {
                        FileInfo fileInfo = new FileInfo(FileStrWAV);
                        if (fileInfo.Length > 44)       //"Empty" files are 44 bytes big
                        {
                            IWaveSource wavSource = new WaveFileReader(FileStrWAV);
                            wavLength = wavSource.GetLength();
                            wavSource?.Dispose();
                        }
                    }
                    catch (Exception ex)
                    {
                        wavLength = TimeSpan.Zero;
                        _logHandle.Report(new LogEventError("Error while stopping record: " + ex.Message));
                    }

                    if (TrackInfo?.Duration > TimeSpan.Zero && (wavLength < (TrackInfo?.Duration - AllowedDifferenceToTrackDuration) || wavLength > (TrackInfo?.Duration + AllowedDifferenceToTrackDuration)))
                    {
                        System.IO.File.Delete(FileStrWAV);
                        DirectoryManager.DeleteEmptyFolders(RecorderRecSettings.BasePath);
                        _logHandle.Report(new LogEventWarning("Record (\"" + TrackInfo?.TrackName + "\") deleted, because of wrong length (Length = " + wavLength.ToString(@"hh\:mm\:ss\.fff") + " s, Expected Range = [" + (TrackInfo?.Duration - AllowedDifferenceToTrackDuration).Value.ToString(@"hh\:mm\:ss\.fff") + ", " + (TrackInfo?.Duration + AllowedDifferenceToTrackDuration).Value.ToString(@"hh\:mm\:ss\.fff") + "])."));
                        RecordState = RecordStates.STOPPED;
                        return;
                    }
                }

                if (!System.IO.File.Exists(FileStrWAV))
                {
                    RecordState = RecordStates.STOPPED;
                    return;
                }

                await Task.Run(() =>
                {
                    if (NormalizeWAVFile(FileStrWAV) == false)
                    {
                        RecordState = RecordStates.STOPPED; return;
                    }
                    _logHandle.Report(new LogEventInfo("Record (\"" + TrackInfo?.TrackName + "\") normalized."));

                    RecorderPostSteps?.Invoke(this, new EventArgs());

                    if (RecorderRecSettings.RecordFormat == RecordFormats.WAV_AND_MP3)
                    {
                        if (ConvertWAVToMP3(FileStrWAV, FileStrMP3) == false)
                        {
                            RecordState = RecordStates.STOPPED; return;
                        }
                        _logHandle.Report(new LogEventInfo("Record (\"" + TrackInfo?.TrackName + "\") converted to MP3."));
                    }
                    else if (RecorderRecSettings.RecordFormat == RecordFormats.MP3)
                    {
                        if (ConvertWAVToMP3(FileStrWAV, FileStrMP3) == false)
                        {
                            RecordState = RecordStates.STOPPED; return;
                        }
                        if (System.IO.File.Exists(FileStrWAV))
                        {
                            System.IO.File.Delete(FileStrWAV);
                        }
                        _logHandle.Report(new LogEventInfo("Record (\"" + TrackInfo?.TrackName + "\") converted to MP3 and WAV deleted."));
                    }

                    AddTrackTags(FileStrWAV, TrackInfo);
                    AddTrackTags(FileStrMP3, TrackInfo);
                    _logHandle.Report(new LogEventInfo("Record (\"" + TrackInfo?.TrackName + "\") tagged."));

                    RecordState = RecordStates.STOPPED;
                    OnRecorderPostStepsFinished?.Invoke(this, new EventArgs());
                });
            }
            catch (Exception ex)
            {
                _logHandle.Report(new LogEventError("Error while stopping record: " + ex.Message));
                RecordState = RecordStates.STOPPED;
            }
        }