public AnalysisResult2 Analyze <T>(AnalysisSettings analysisSettings, SegmentSettings <T> segmentSettings) { var audioFile = segmentSettings.SegmentAudioFile; var recording = new AudioRecording(audioFile.FullName); var sourceRecordingName = recording.BaseName; var outputDirectory = segmentSettings.SegmentOutputDirectory; bool saveCsv = analysisSettings.AnalysisDataSaveBehavior; var analysisResult = new AnalysisResult2(analysisSettings, segmentSettings, recording.Duration); // generate spectrogram // TODO the following may need to be checked since change of method signature in December 2019. //var configurationDictionary = new Dictionary<string, string>(configuration.ToDictionary()); //configurationDictionary[ConfigKeys.Recording.Key_RecordingCallName] = audioFile.FullName; //configurationDictionary[ConfigKeys.Recording.Key_RecordingFileName] = audioFile.Name; //var soxImage = new FileInfo(Path.Combine(segmentSettings.SegmentOutputDirectory.FullName, audioFile.Name + ".SOX.png")); var configInfo = ConfigFile.Deserialize <AnalyzerConfig>(analysisSettings.ConfigFile); var spectrogramResult = Audio2Sonogram.GenerateSpectrogramImages(audioFile, configInfo, sourceRecordingName); // this analysis produces no results! But we still print images (that is the point) if (analysisSettings.AnalysisImageSaveBehavior.ShouldSave(analysisResult.Events.Length)) { Debug.Assert(segmentSettings.SegmentImageFile.Exists); } if (saveCsv) { var basename = Path.GetFileNameWithoutExtension(segmentSettings.SegmentAudioFile.Name); var spectrogramCsvFile = outputDirectory.CombineFile(basename + ".Spectrogram.csv"); Csv.WriteMatrixToCsv(spectrogramCsvFile, spectrogramResult.DecibelSpectrogram.Data, TwoDimensionalArray.None); } return(analysisResult); }
public AnalysisResult2 Analyze <T>(AnalysisSettings analysisSettings, SegmentSettings <T> segmentSettings) { var audioFile = segmentSettings.SegmentAudioFile; var recording = new AudioRecording(audioFile.FullName); var outputDirectory = segmentSettings.SegmentOutputDirectory; var analysisResult = new AnalysisResult2(analysisSettings, segmentSettings, recording.Duration); Config configuration = ConfigFile.Deserialize(analysisSettings.ConfigFile); bool saveCsv = analysisSettings.AnalysisDataSaveBehavior; if (configuration.GetBool(AnalysisKeys.MakeSoxSonogram)) { Log.Warn("SoX spectrogram generation config variable found (and set to true) but is ignored when running as an IAnalyzer"); } // generate spectrogram var configurationDictionary = new Dictionary <string, string>(configuration.ToDictionary()); configurationDictionary[ConfigKeys.Recording.Key_RecordingCallName] = audioFile.FullName; configurationDictionary[ConfigKeys.Recording.Key_RecordingFileName] = audioFile.Name; var soxImage = new FileInfo(Path.Combine(segmentSettings.SegmentOutputDirectory.FullName, audioFile.Name + ".SOX.png")); var spectrogramResult = Audio2Sonogram.GenerateFourSpectrogramImages( audioFile, soxImage, configurationDictionary, dataOnly: analysisSettings.AnalysisImageSaveBehavior.ShouldSave(analysisResult.Events.Length), makeSoxSonogram: false); // this analysis produces no results! // but we still print images (that is the point) if (analysisSettings.AnalysisImageSaveBehavior.ShouldSave(analysisResult.Events.Length)) { Debug.Assert(segmentSettings.SegmentImageFile.Exists); } if (saveCsv) { var basename = Path.GetFileNameWithoutExtension(segmentSettings.SegmentAudioFile.Name); var spectrogramCsvFile = outputDirectory.CombineFile(basename + ".Spectrogram.csv"); Csv.WriteMatrixToCsv(spectrogramCsvFile, spectrogramResult.DecibelSpectrogram.Data, TwoDimensionalArray.None); } return(analysisResult); }
public AnalysisResult2 Analyze <T>(AnalysisSettings analysisSettings, SegmentSettings <T> segmentSettings) { var audioFile = segmentSettings.SegmentAudioFile; var recording = new AudioRecording(audioFile.FullName); var sourceRecordingName = recording.BaseName; // TODO get the start and end-time offsets for accurate labeling of the time scale. //if (arguments.StartOffset.HasValue ^ arguments.EndOffset.HasValue) //{ // throw new InvalidStartOrEndException("If StartOffset or EndOffset is specified, then both must be specified"); //} // set default offsets - only use defaults if not provided in arguments list // var offsetsProvided = arguments.StartOffset.HasValue && arguments.EndOffset.HasValue; //TimeSpan? startOffset; //TimeSpan? endOffset; //if (offsetsProvided) //{ // startOffset = TimeSpan.FromSeconds(arguments.StartOffset.Value); // endOffset = TimeSpan.FromSeconds(arguments.EndOffset.Value); //} //var outputDirectory = segmentSettings.SegmentOutputDirectory; //bool saveCsv = analysisSettings.AnalysisDataSaveBehavior; var analysisResult = new AnalysisResult2(analysisSettings, segmentSettings, recording.Duration); var configInfo = ConfigFile.Deserialize <AnalyzerConfig>(analysisSettings.ConfigFile); var spectrogramResult = Audio2Sonogram.GenerateSpectrogramImages(audioFile, configInfo, sourceRecordingName); // this analysis produces no results! But we still print images (that is the point) // if (analysisSettings.AnalysisImageSaveBehavior.ShouldSave(analysisResult.Events.Length)) // { // Debug.Assert(condition: segmentSettings.SegmentImageFile.Exists, "Warning: Image file must exist."); spectrogramResult.CompositeImage.Save(segmentSettings.SegmentImageFile.FullName, ImageFormat.Png); // } //if (saveCsv) //{ // var basename = Path.GetFileNameWithoutExtension(segmentSettings.SegmentAudioFile.Name); // var spectrogramCsvFile = outputDirectory.CombineFile(basename + ".Spectrogram.csv"); // Csv.WriteMatrixToCsv(spectrogramCsvFile, spectrogramResult.DecibelSpectrogram.Data, TwoDimensionalArray.None); //} return(analysisResult); }