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)); }
//*********************************************************************************************************************************************************************************************************** /// <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; } }