/// <summary> /// Stores the fingerprints of the given file into the ModelService. /// Uses HighPrecisionFingerprintConfiguration. /// </summary> /// <param name="waveFile"></param> private void StoreNewAudioFileData(IAudioFile waveFile) { TrackData track = new TrackData( isrc: "TD100INPROG", // International Standart Recording Code. artist: "The TD's", title: waveFile.FilePath.NameWithoutExtension, album: waveFile.FilePath.DirectoryPath, releaseYear: DateTime.Today.Year, length: waveFile.DurationInSeconds); // Stores track metadata in the datasource. //TRack trackReference = new TrackReference<int>(mModelService.InsertTrack(track).Id); IModelReference trackReference = mModelService.InsertTrack(track); ModelReference <int> trackReference2 = trackReference as ModelReference <int>; // Creates hashed fingerprints. List <HashedFingerprint> hashedFingerprints = FingerprintCommandBuilder.Instance .BuildFingerprintCommand() .From(waveFile.FilePath.FileFullPath) .WithFingerprintConfig(new DefaultFingerprintConfiguration()) .UsingServices(mAudioService) .Hash() .Result; // Stores hashes in the database. //SaveFingerPrintsInMemory(hashedFingerprints, trackReference2, waveFile.FilePath.NameWithoutExtension); // Currenntly not using fp. mModelService.InsertHashDataForTrack(hashedFingerprints, trackReference); mLogger.WriteLine($"Stored {hashedFingerprints.Count} hashed fingerprints from {waveFile.FilePath.Name}"); }
private List <ResultEntry> GetMatchesForAudioFile(IAudioFile audioFile, int amplification, double secondToAnalyze) { List <ResultEntry> resultEntriesList = new List <ResultEntry>(); List <double> matchTimesList = new List <double>(); if (amplification <= 0) { amplification = 1; } mLogger.WriteLine($"Quering {audioFile.FilePath.Name} with amplification {amplification}, analyzing {secondToAnalyze} seconds"); for (int i = 0; i < amplification; ++i) { QueryResult queryResult = GetQueryResultForSong(audioFile.FilePath.FileFullPath, secondToAnalyze, 0); if (queryResult != null) { foreach (ResultEntry resultEntry in queryResult.ResultEntries) { if (resultEntry.Confidence > 0.2 && !matchTimesList.Contains(resultEntry.TrackMatchStartsAt)) { resultEntriesList.Add(resultEntry); matchTimesList.Add(resultEntry.TrackMatchStartsAt); } } } } return(resultEntriesList); }
public void Open(IAudioFile file) { StopPlayback(); _soundSource?.Dispose(); _simpleNotificationSource?.Dispose(); _currentMemoryStream = new MemoryStream(file.Data); _soundSource = new DmoMp3Decoder(_currentMemoryStream).AppendSource( x => new SimpleNotificationSource(x.ToSampleSource()), out _simpleNotificationSource).ToWaveSource(); _simpleNotificationSource.BlockRead += SimpleNotificationSource_BlockRead; if (_soundOut == null) { _soundOut = new WasapiOut(); _soundOut.Stopped += SoundOut_Stopped; } _soundOut.Initialize(_soundSource); _soundOut.Volume = Volume; OnTrackLengthChanged(); TrackPosition = 0; OnPositionChanged(); }
public async static Task <string> CoverAudio(IAudioFile audio) { if (audio.PlaylistId != 0) { var cover = await CoverPlaylistById(audio.PlaylistId, audio.Cover); return(cover); } else { var uriImage = audio.Cover; StorageFile coverFile = null; var a = await StaticContent.CoversFolder.TryGetItemAsync($"VK{audio.Id}Audio.jpg"); if (a != null) { try { coverFile = await StaticContent.CoversFolder.GetFileAsync($"VK{audio.Id}Audio.jpg"); } catch { if (config.SaveImage) { var task = Task.Run(async() => { coverFile = await StaticContent.CoversFolder.CreateFileAsync($"VK{audio.Id}Audio.jpg"); BackgroundDownloader downloader = new BackgroundDownloader(); DownloadOperation download = downloader.CreateDownload(new Uri(uriImage), coverFile); await download.StartAsync(); }); } return(uriImage); } } else { if (config.SaveImage) { var task = Task.Run(async() => { coverFile = await StaticContent.CoversFolder.CreateFileAsync($"VK{audio.Id}Audio.jpg"); BackgroundDownloader downloader = new BackgroundDownloader(); DownloadOperation download = downloader.CreateDownload(new Uri(uriImage), coverFile); await download.StartAsync(); }); } return(uriImage); } return(coverFile.Path); } }
private void LoadAudioFileDetails(object pathObject) { string path = (string)pathObject; IAudioFile audioFile = AudioFile.Create(path, false); decimal bitrate = audioFile.Bitrate; // force bitrate calculation DescriptiveLameTagReader lameTagReader = new DescriptiveLameTagReader(path); Invoke(new Action <IAudioFile, DescriptiveLameTagReader>(SetAudioFileDetails), audioFile, lameTagReader); }
public bool IsAudioFileDetected(IAudioFile audioFile, int amplification, double secondToAnalyze) { bool isAudioFileDetected = false; List <ResultEntry> matches = GetMatchesForAudioFile(audioFile, amplification, secondToAnalyze); if (matches.Count > 0) { isAudioFileDetected = true; } return(isAudioFileDetected); }
private void OnLoadFile(string fileName) { _id3v2 = new ID3v2Tag(fileName); IAudioFile audioFile = AudioFile.Create(fileName, true); DescriptiveLameTagReader lameTagReader = new DescriptiveLameTagReader(fileName); _fullFileName = fileName; FileName = Path.GetFileName(fileName); Artist = _id3v2.Artist; Title = _id3v2.Title; Album = _id3v2.Album; Genre = _id3v2.Genre; Year = _id3v2.Year; Track = _id3v2.TrackNumber; ID3v2Version = _id3v2.Header.TagVersion; if (_id3v2.PictureList == null || _id3v2.PictureList.Count == 0) { PictureCollection = new ObservableCollection <Picture>(); } else { var pictureCollection = new ObservableCollection <Picture>(); foreach (var apic in _id3v2.PictureList) { pictureCollection.Add(new Picture(apic)); } PictureCollection = pictureCollection; } Comment = null; if (_id3v2.CommentsList != null) { foreach (var item in _id3v2.CommentsList) { if (item.Description != "iTunNORM") { Comment = item.Value; break; } } } PlayLength = audioFile.TotalSeconds; Bitrate = audioFile.Bitrate; EncoderPreset = string.Format("{0} {1}", lameTagReader.LameTagInfoEncoder, lameTagReader.UsePresetGuess == UsePresetGuess.NotNeeded ? lameTagReader.Preset : lameTagReader.PresetGuess); CanSave = true; }
/// <summary> /// Creates an IAudioFile object from the specified path. /// </summary> /// <param name="path">The full path of the file.</param> /// <param name="throwExceptionIfUnknown">if set to <c>true</c>, throws an exception if unknown file extension; otherwise, returns <c>null</c>.</param> public static IAudioFile Create(string path, bool throwExceptionIfUnknown) { if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException("path"); } string ext = Path.GetExtension(path).ToLower(); IAudioFile audioFile = null; if (ext == ".mp3" || ext == ".mp2") { audioFile = new Mpeg(path, false); } else if (ext == ".ogg") { audioFile = new OggVorbis(path); } else if (ext == ".flac" || ext == ".fla") { audioFile = new Flac(path); } else if (ext == ".mpc" || ext == ".mpp" || ext == ".mp+") { audioFile = new Musepack(path); } else if (ext == ".shn") { audioFile = new Shorten(path); } else if (ext == ".ape" || ext == ".mac") { audioFile = new MonkeysAudio(path); } else if (ext == ".m4a") { audioFile = new Mpeg4(path); } else if (ext == ".ofr") { audioFile = new OptimFrog(path); } else if (throwExceptionIfUnknown) { throw new NotSupportedException(string.Format("Extension '{0}' not supported", ext)); } return(audioFile); }
public void PlayAudio(IAudioFile audioFile, SoundOutDevice soundOutDevice, float volume) { var result = new PlayAudioInformation { SoundOutId = soundOutDevice.Id, Volume = volume, AudioData = audioFile.Data }; var package = new List <byte> { (byte)AudioCommunication.PlayAudio }; var serializer = new Serializer(typeof(PlayAudioInformation)); package.AddRange(serializer.Serialize(result)); ConnectionInfo.SendCommand(this, package.ToArray()); LogService.Send(string.Format((string)Application.Current.Resources["PlayAudio"], audioFile.Name, soundOutDevice.Name, volume)); }
private eRecognitionStatus Recognize() { eRecognitionStatus recognitionStatus = eRecognitionStatus.UnRecognized; if (mSubSoundsQueue.Count != 0) { IAudioFile subSound = mSubSoundsQueue.Dequeue(); bool isMatchFound = mSoundFingerprintingUtility.IsAudioFileDetected( subSound, mAmplification, mSecondsToAnalyzeAudioFiles); if (isMatchFound) { recognitionStatus = eRecognitionStatus.Recognized; } } return(recognitionStatus); }
/// <summary> /// Gets a list of IAudioFile objects from an array of file paths. /// </summary> /// <param name="fileList">The file list.</param> /// <param name="sort">if set to <c>true</c> the array will be sorted before building the list.</param> /// <param name="throwExceptionIfUnknown">if set to <c>true</c>, throws an exception if an unknown file extension is encountered; otherwise, unknown file extensions are not added to the list.</param> public static List <IAudioFile> GetList(string[] fileList, bool sort, bool throwExceptionIfUnknown) { if (sort) { Array.Sort(fileList); } List <IAudioFile> audioFileList = new List <IAudioFile>(); foreach (string path in fileList) { IAudioFile audioFile = Create(path, throwExceptionIfUnknown); if (audioFile != null) { audioFileList.Add(audioFile); } } return(audioFileList); }
private eRecognitionStatus Recognize() { eRecognitionStatus recognitionStatus = eRecognitionStatus.UnRecognized; if (mSubSoundsQueue.Count != 0) { IAudioFile subSound = mSubSoundsQueue.Dequeue(); bool isMatchFound = SoundFingerprintingWrapper.FindMatchesForAudioFile( subSound, mAmplification, mSecondsToAnalyzeAudioFiles); if (isMatchFound) { recognitionStatus = eRecognitionStatus.Recognized; SoundFingerprintingWrapper.StoreNewAudioFileData(subSound); } } return(recognitionStatus); }
public static string CoverTrack(IAudioFile track) { if (track.PlaylistId != 0) { return(CoverPlaylistById(track.PlaylistId, track.Cover)); } else { string filename = Path.Combine(path, $"VKTrackId{track.Id}.jpg"); if (!System.IO.File.Exists(filename)) { using (var client = new WebClient()) { client.DownloadFile(new Uri(track.Cover), filename); } } return(filename); } }
private void OnLoadFile(string fileName) { FullFileName = fileName; ShortFileName = Path.GetFileName(fileName); ID3v2 = new ID3v2Tag(fileName); AudioFile = IdSharp.AudioInfo.AudioFile.Create(fileName, true); if (ID3v2.PictureList == null || ID3v2.PictureList.Count == 0) { PictureCollection = new ObservableCollection <Picture>(); } else { var pictureCollection = new ObservableCollection <Picture>(); foreach (var apic in ID3v2.PictureList) { pictureCollection.Add(new Picture(apic)); } PictureCollection = pictureCollection; } // TODO: Comments /*Comment = null; * if (_id3v2.CommentsList.Count > 0) * { * Comment = _id3v2.CommentsList[0].Value; * }*/ //PlayLength = audioFile.TotalSeconds; //Bitrate = audioFile.Bitrate; DescriptiveLameTagReader lameTagReader = new DescriptiveLameTagReader(fileName); EncoderPreset = string.Format("{0} {1}", lameTagReader.LameTagInfoEncoder, lameTagReader.UsePresetGuess == UsePresetGuess.NotNeeded ? lameTagReader.Preset : lameTagReader.PresetGuess); CanSave = true; }
public static bool FindMatchesForAudioFile(IAudioFile audioFile, int amplification, double secondToAnalyze) { bool isMatchFound = false; if (amplification <= 0) { amplification = 1; } Console.WriteLine($"Quering with amplification {amplification}, analyzing {secondToAnalyze} seconds"); for (int i = 0; i < amplification; ++i) { ResultEntry resultEntry = GetBestMatchForSong( audioFile.FilePath.FileFullPath, secondToAnalyze, 0); if (resultEntry != null) { Console.WriteLine(string.Empty); int minute = (int)(resultEntry.TrackMatchStartsAt / 60); int second = (int)((resultEntry.TrackMatchStartsAt - 60 * minute)); Console.WriteLine($@"{audioFile.FilePath.FileFullPath} has match with Name: {resultEntry.Track.Title} Album: {resultEntry.Track.Album} Confidence: {resultEntry.Confidence} Can be found at: {resultEntry.TrackMatchStartsAt} sec ({minute}:{second}) "); if (resultEntry.Confidence > 0.2) { isMatchFound = true; } } } return(isMatchFound); }
public void SearchAndReplace(string find, string replace, bool applyToAll) { IAudioFile file = null; if (file == null) file = ObjectFactory.GetAudioFileManager(); if (applyToAll) file.SearchAndReplace(formPropertiesObject.FullPathAudioFilesList, find, replace); else file.SearchAndReplace(formPropertiesObject.FullPathAudioFilesList[formPropertiesObject.CurrentIndex], find, replace); SetFormAttributes(formPropertiesObject.CurrentIndex); }
private OperationResult <AudioMetaData> MetaDataForFileFromIdSharp(string fileName) { var sw = new Stopwatch(); sw.Start(); AudioMetaData result = new AudioMetaData(); var isSuccess = false; try { result.Filename = fileName; IAudioFile audioFile = AudioFile.Create(fileName, true); if (ID3v2Tag.DoesTagExist(fileName)) { IID3v2Tag id3v2 = new ID3v2Tag(fileName); result.Release = id3v2.Album; result.Artist = id3v2.AlbumArtist ?? id3v2.Artist; result.ArtistRaw = id3v2.AlbumArtist ?? id3v2.Artist; result.Genres = id3v2.Genre?.Split(new char[] { ',', '\\' }); result.TrackArtist = id3v2.OriginalArtist ?? id3v2.Artist ?? id3v2.AlbumArtist; result.TrackArtistRaw = id3v2.OriginalArtist; result.AudioBitrate = (int?)audioFile.Bitrate; result.AudioChannels = audioFile.Channels; result.AudioSampleRate = (int)audioFile.Bitrate; result.Disk = ID3TagsHelper.ParseDiscNumber(id3v2.DiscNumber); result.DiskSubTitle = id3v2.SetSubtitle; result.Images = id3v2.PictureList?.Select(x => new AudioMetaDataImage { Data = x.PictureData, Description = x.Description, MimeType = x.MimeType, Type = (AudioMetaDataImageType)x.PictureType }).ToArray(); result.Time = audioFile.TotalSeconds > 0 ? ((decimal?)audioFile.TotalSeconds).ToTimeSpan() : null; result.Title = id3v2.Title.ToTitleCase(false); result.TrackNumber = ID3TagsHelper.ParseTrackNumber(id3v2.TrackNumber); result.TotalTrackNumbers = ID3TagsHelper.ParseTotalTrackNumber(id3v2.TrackNumber); var year = id3v2.Year ?? id3v2.RecordingTimestamp ?? id3v2.ReleaseTimestamp ?? id3v2.OriginalReleaseTimestamp; result.Year = ID3TagsHelper.ParseYear(year); isSuccess = result.IsValid; } if (!isSuccess) { if (ID3v1Tag.DoesTagExist(fileName)) { IID3v1Tag id3v1 = new ID3v1Tag(fileName); result.Release = id3v1.Album; result.Artist = id3v1.Artist; result.ArtistRaw = id3v1.Artist; result.AudioBitrate = (int?)audioFile.Bitrate; result.AudioChannels = audioFile.Channels; result.AudioSampleRate = (int)audioFile.Bitrate; result.Time = audioFile.TotalSeconds > 0 ? ((decimal?)audioFile.TotalSeconds).ToTimeSpan() : null; result.Title = id3v1.Title.ToTitleCase(false); result.TrackNumber = SafeParser.ToNumber <short?>(id3v1.TrackNumber); var date = SafeParser.ToDateTime(id3v1.Year); result.Year = date?.Year ?? SafeParser.ToNumber <int?>(id3v1.Year); isSuccess = result.IsValid; } } } catch (Exception ex) { this.Logger.LogError(ex, "MetaDataForFileFromTagLib Filename [" + fileName + "] Error [" + ex.Serialize() + "]"); } sw.Stop(); return(new OperationResult <AudioMetaData> { IsSuccess = isSuccess, OperationTime = sw.ElapsedMilliseconds, Data = result }); }
public AlbumTrack(string path) { if (string.IsNullOrWhiteSpace(path)) { throw new ArgumentNullException("path"); } _path = path; if (ID3v2Tag.DoesTagExist(path)) { ID3v2Tag id3v2 = new ID3v2Tag(path); DiscNumber = id3v2.DiscNumber; TrackNumber = id3v2.TrackNumber; Artist = id3v2.Artist; Title = id3v2.Title; ReleaseDate = id3v2.Year; Album = id3v2.Album; Genre = id3v2.Genre; if (id3v2.PictureList != null && id3v2.PictureList.Count == 1) { Picture = id3v2.PictureList[0]; } } if (ID3v1Tag.DoesTagExist(path)) { ID3v1Tag id3v1 = new ID3v1Tag(path); if (string.IsNullOrWhiteSpace(TrackNumber)) { TrackNumber = string.Format("{0}", id3v1.TrackNumber); } if (string.IsNullOrWhiteSpace(Artist)) { Artist = id3v1.Artist; } if (string.IsNullOrWhiteSpace(Title)) { Title = id3v1.Title; } if (string.IsNullOrWhiteSpace(ReleaseDate)) { ReleaseDate = id3v1.Year; } if (string.IsNullOrWhiteSpace(Album)) { Album = id3v1.Album; } if (string.IsNullOrWhiteSpace(Genre)) { Genre = GenreHelper.GenreByIndex[id3v1.GenreIndex]; } } IAudioFile audioFile = AudioFile.Create(_path, throwExceptionIfUnknown: true); Bitrate = audioFile.Bitrate; TotalSeconds = audioFile.TotalSeconds; // TODO: APE, Lyrics3 // TODO: When no tags, try to guess from path and file names // TODO: Parse Tracks for TotalTracks // TODO: Parse Disc for TotalDiscs // Parse track # from TrackNumber including total tracks if (!string.IsNullOrWhiteSpace(TrackNumber)) { if (TrackNumber.Contains('/')) { TrackNumber = TrackNumber.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[0]; // TODO: Set total tracks? } } // Parse disc # from DiscNumber including total discs if (!string.IsNullOrWhiteSpace(DiscNumber)) { if (DiscNumber.Contains('/')) { DiscNumber = DiscNumber.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[0]; // TODO: Set total discs? } } else { DiscNumber = "1"; } }
private void SetFormAttributes(string filePath) { if (file == null) file = new AudioFile(); ClearBindingObjectCollections(); file.Read(filePath, formPropertiesObject); formPropertiesObject.FilePathLabel = filePath; }
private void SetAudioFileDetails(IAudioFile audioFile, DescriptiveLameTagReader lameTagReader) { txtPlayLength.Text = string.Format("{0}:{1:00}", (int)audioFile.TotalSeconds / 60, (int)audioFile.TotalSeconds % 60); txtBitrate.Text = string.Format("{0:#,0} kbps", audioFile.Bitrate); txtEncoderPreset.Text = string.Format("{0} {1}", lameTagReader.LameTagInfoEncoder, lameTagReader.UsePresetGuess == UsePresetGuess.NotNeeded ? lameTagReader.Preset : lameTagReader.PresetGuess); }
static void Main(string[] args) { List <Color> colors = new List <Color>() { Color.Red, Color.Green, Color.Blue, Color.Violet, Color.Turquoise }; WavAudioFileFactory wavFactory = new WavAudioFileFactory(); AudioFile file = wavFactory.ParseAudioFile("D:\\!!!OLEG\\!!!WORK\\Studying\\АДОШ\\Lab 1-2\\А_У_И.wav"); AudioFile file1 = wavFactory.ParseAudioFile("D:\\!!!OLEG\\!!!WORK\\Studying\\АДОШ\\Lab 1-2\\sound_sum_test_2.wav"); AudioFile file2 = wavFactory.ParseAudioFile("D:\\!!!OLEG\\!!!WORK\\Studying\\АДОШ\\Lab 1-2\\sound_sum_test_3.wav"); IAudioFile fsum = file1.Sum(file2); fsum.ConstructFile("D:\\!!!OLEG\\!!!WORK\\Studying\\АДОШ\\Lab 1-2\\sum.wav"); return; Console.WriteLine(file); Console.WriteLine(); if (Directory.Exists(Environment.CurrentDirectory + "/Total")) { Directory.Delete(Environment.CurrentDirectory + "/Total", true); } for (double i = Constants.NOISE_MIN_AMPLITUDE; i <= Constants.NOISE_MAX_AMPLITUDE; i += Constants.NOISE_DELTA_AMPLITUDE) { if (Directory.Exists(Environment.CurrentDirectory + "/" + i.ToString())) { Directory.Delete(Environment.CurrentDirectory + "/" + i.ToString(), true); } List <TimedAmplitude> TimedAmplitudes = WaveAnalyzer.GetTimedAmplitudes(file); List <Point> TimedAmplitudesCoords = TimedAmplitudeListToPointList(TimedAmplitudes); Dictionary <List <Point>, Color> NoConversion = new Dictionary <List <Point>, Color>() { { TimedAmplitudesCoords, Color.Red } }; SaveGraphics("NoConversion.png", i.ToString() + "/NoConversion", 500, 500, false, 1, 1, NoConversion, (x, y) => (x * 2 - 1, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("NoConversionX10.png", i.ToString() + "/NoConversion", 500, 500, false, 1, 1, NoConversion, (x, y) => (x * 2 * 10 - 1 - 10, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("NoConversionX100.png", i.ToString() + "/NoConversion", 500, 500, false, 1, 1, NoConversion, (x, y) => (x * 2 * 100 - 1 - 100, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("NoConversionX1000.png", i.ToString() + "/NoConversion", 500, 500, false, 1, 1, NoConversion, (x, y) => (x * 2 * 1000 - 1 - 1000, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); Console.WriteLine("NoConversion_" + i + " saved"); List <TimedAmplitude> TimedExtremums = WaveAnalyzer.GetExtremums(TimedAmplitudes); List <Point> TimedExtremumsCoords = TimedAmplitudeListToPointList(TimedExtremums); Dictionary <List <Point>, Color> Extremums = new Dictionary <List <Point>, Color>() { { TimedExtremumsCoords, Color.Red } }; SaveGraphics("Extremums.png", i.ToString() + "/Extremums", 500, 500, false, 1, 1, Extremums, (x, y) => (x * 2 - 1, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("ExtremumsX10.png", i.ToString() + "/Extremums", 500, 500, false, 1, 1, Extremums, (x, y) => (x * 2 * 10 - 1 - 10, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("ExtremumsX100.png", i.ToString() + "/Extremums", 500, 500, false, 1, 1, Extremums, (x, y) => (x * 2 * 100 - 1 - 100, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("ExtremumsX1000.png", i.ToString() + "/Extremums", 500, 500, false, 1, 1, Extremums, (x, y) => (x * 2 * 1000 - 1 - 1000, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); Console.WriteLine("Extremums_" + i + " saved"); List <TimedAmplitude> SmoothedTimedExtremums = TimedExtremums; for (int j = 0; j < Constants.SMOOTH_POINT_GROUP_COUNTS.Length; j++) { SmoothedTimedExtremums = WaveAnalyzer.RemoveNoiseSmoothing(SmoothedTimedExtremums, Constants.SMOOTH_POINT_GROUP_COUNTS[j]); List <Point> SmoothedTimedExtremumsCoords = TimedAmplitudeListToPointList(SmoothedTimedExtremums); Dictionary <List <Point>, Color> SmoothedTimedExtremumsData = new Dictionary <List <Point>, Color>() { { SmoothedTimedExtremumsCoords, Color.Red } }; SaveGraphics($"Smoothed{j}.png", i.ToString() + "/Smoothed", 500, 500, false, 1, 1, SmoothedTimedExtremumsData, (x, y) => (x * 2 - 1, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics($"Smoothed{j}X10.png", i.ToString() + "/Smoothed", 500, 500, false, 1, 1, SmoothedTimedExtremumsData, (x, y) => (x * 2 * 10 - 1 - 10, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics($"Smoothed{j}X100.png", i.ToString() + "/Smoothed", 500, 500, false, 1, 1, SmoothedTimedExtremumsData, (x, y) => (x * 2 * 100 - 1 - 100, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics($"Smoothed{j}X1000.png", i.ToString() + "/Smoothed", 500, 500, false, 1, 1, SmoothedTimedExtremumsData, (x, y) => (x * 2 * 1000 - 1 - 1000, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); Console.WriteLine("Smoothed{j}_" + i + " saved"); } List <TimedAmplitude> NoNoiseTimedExtremums = WaveAnalyzer.RemoveNoise(SmoothedTimedExtremums, i); List <Point> NoNoiseTimedExtremumsCoords = TimedAmplitudeListToPointList(NoNoiseTimedExtremums); Dictionary <List <Point>, Color> NoNoise = new Dictionary <List <Point>, Color>() { { NoNoiseTimedExtremumsCoords, Color.Red } }; SaveGraphics("NoNoise.png", i.ToString() + "/NoNoise", 500, 500, false, 1, 1, NoNoise, (x, y) => (x * 2 - 1, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("NoNoiseX10.png", i.ToString() + "/NoNoise", 500, 500, false, 1, 1, NoNoise, (x, y) => (x * 2 * 10 - 1 - 10, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("NoNoiseX100.png", i.ToString() + "/NoNoise", 500, 500, false, 1, 1, NoNoise, (x, y) => (x * 2 * 100 - 1 - 100, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("NoNoiseX1000.png", i.ToString() + "/NoNoise", 500, 500, false, 1, 1, NoNoise, (x, y) => (x * 2 * 1000 - 1 - 1000, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); Console.WriteLine("NoNoise_" + i + " saved"); List <List <TimedAmplitude> > SplittedSounds = WaveAnalyzer.SplitSounds(NoNoiseTimedExtremums, Constants.PAUSE_DURATION); Dictionary <List <Point>, Color> SplittedSoundsData = new Dictionary <List <Point>, Color>() { }; for (int j = 0; j < SplittedSounds.Count; j++) { SplittedSoundsData.Add(TimedAmplitudeListToPointList(SplittedSounds[j]), colors[j]); } SaveGraphics("Sounds.png", i.ToString() + "/SplittedSounds", 500, 500, false, 1, 1, SplittedSoundsData, (x, y) => (x * 2 - 1, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("SoundsX10.png", i.ToString() + "/SplittedSounds", 500, 500, false, 1, 1, SplittedSoundsData, (x, y) => (x * 2 * 10 - 1 - 10, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("SoundsX100.png", i.ToString() + "/SplittedSounds", 500, 500, false, 1, 1, SplittedSoundsData, (x, y) => (x * 2 * 100 - 1 - 100, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); SaveGraphics("SoundsX1000.png", i.ToString() + "/SplittedSounds", 500, 500, false, 1, 1, SplittedSoundsData, (x, y) => (x * 2 * 1000 - 1 - 1000, y / Math.Pow(2, (file.BitsPerSample <= 16 ? file.BitsPerSample : 0)) - 0.5)); Console.WriteLine("Sounds_" + i + " saved"); List <List <Point> > Coordinates = new List <List <Point> >(); foreach (List <TimedAmplitude> sound in SplittedSounds) { Coordinates.Add(WaveAnalyzer.GetSoundCoordinates(sound, (min1, max, min2) => (max.Time - min1.Time, min2.Time - max.Time))); } Dictionary <List <Point>, Color> CoordinatesData = new Dictionary <List <Point>, Color>() { }; for (int j = 0; j < Coordinates.Count; j++) { CoordinatesData.Add(Coordinates[j], colors[j]); } if (Coordinates.Count == 0) { continue; } double scaleX = 2 / (Coordinates.Select(CS => CS.Max(C => C.X)).Max() - Coordinates.Select(CS => CS.Min(C => C.X)).Min()); double scaleY = 2 / (Coordinates.Select(CS => CS.Max(C => C.Y)).Max() - Coordinates.Select(CS => CS.Min(C => C.Y)).Min()); SaveGraphics("CoordsLength.png", i.ToString(), 500, 500, true, 1, 2, CoordinatesData, (x, y) => (x * scaleX * Constants.RESULT_SCALE_SIMPLE - 1, y * scaleY * Constants.RESULT_SCALE_SIMPLE - 1)); SaveGraphics($"CoordsLength_{i}.png", "Total/Length", 500, 500, true, 1, 2, CoordinatesData, (x, y) => (x * scaleX * Constants.RESULT_SCALE_SIMPLE - 1, y * scaleY * Constants.RESULT_SCALE_SIMPLE - 1)); Console.WriteLine("CoordsLength_" + i + " saved"); //List<List<Point>> CoordinatesSquare = new List<List<Point>>(); //foreach (List<TimedAmplitude> sound in SplittedSounds) // CoordinatesSquare.Add(WaveAnalyzer.GetSoundCoordinates(TimedAmplitudes, sound)); //Dictionary<List<Point>, Color> CoordinatesSquareData = new Dictionary<List<Point>, Color>(); //for (int j = 0; j < CoordinatesSquare.Count; j++) // CoordinatesSquareData.Add(CoordinatesSquare[j], colors[j]); //if (CoordinatesSquare.Count == 0) // continue; //scaleX = 2 / (CoordinatesSquare.Select(CS => CS.Max(C => C.X)).Max() - CoordinatesSquare.Select(CS => CS.Min(C => C.X)).Min()); //scaleY = 2 / (CoordinatesSquare.Select(CS => CS.Max(C => C.Y)).Max() - CoordinatesSquare.Select(CS => CS.Min(C => C.Y)).Min()); //SaveGraphics("CoordsSquare.png", i.ToString(), 500, 500, true, 1, 2, CoordinatesSquareData, (x, y) => (x * scaleX * Constants.RESULT_SCALE_SQUARE, y * scaleY * Constants.RESULT_SCALE_SQUARE)); //SaveGraphics($"CoordsSquare_{i}.png", "Total/Square", 500, 500, true, 1, 2, CoordinatesSquareData, (x, y) => (x * scaleX * Constants.RESULT_SCALE_SQUARE, y * scaleY * Constants.RESULT_SCALE_SQUARE)); //Console.WriteLine("CoordsSquare_" + i + " saved"); Console.WriteLine(i + " processed"); Console.WriteLine(); Console.WriteLine("----------------------"); Console.WriteLine(); Console.Beep(); } Console.Beep(); Console.Beep(); Console.Beep(); Console.ReadLine(); }
static void Main(string[] args) { string fileName = GetFileName(args); if (fileName == null) { return; } Console.WriteLine(); Console.WriteLine(string.Format("File: {0}", fileName)); Console.WriteLine(); IAudioFile audioFile = AudioFile.Create(fileName, true); Console.WriteLine("Audio Info"); Console.WriteLine(); Console.WriteLine(string.Format("Type: {0}", EnumUtils.GetDescription(audioFile.FileType))); Console.WriteLine(string.Format("Length: {0}:{1:00}", (int)audioFile.TotalSeconds / 60, (int)audioFile.TotalSeconds % 60)); Console.WriteLine(string.Format("Bitrate: {0:#,0} kbps", (int)audioFile.Bitrate)); Console.WriteLine(string.Format("Frequency: {0:#,0} Hz", audioFile.Frequency)); Console.WriteLine(string.Format("Channels: {0}", audioFile.Channels)); Console.WriteLine(); if (ID3v2Tag.DoesTagExist(fileName)) { IID3v2Tag id3v2 = new ID3v2Tag(fileName); Console.WriteLine(EnumUtils.GetDescription(id3v2.Header.TagVersion)); Console.WriteLine(); Console.WriteLine(string.Format("Artist: {0}", id3v2.Artist)); Console.WriteLine(string.Format("Title: {0}", id3v2.Title)); Console.WriteLine(string.Format("Album: {0}", id3v2.Album)); Console.WriteLine(string.Format("Year: {0}", id3v2.Year)); Console.WriteLine(string.Format("Track: {0}", id3v2.TrackNumber)); Console.WriteLine(string.Format("Genre: {0}", id3v2.Genre)); Console.WriteLine(string.Format("Pictures: {0}", id3v2.PictureList.Count)); Console.WriteLine(string.Format("Comments: {0}", id3v2.CommentsList.Count)); Console.WriteLine(); // Example of saving an ID3v2 tag // // id3v2.Title = "New song title"; // id3v2.Save(fileName); } if (ID3v1Tag.DoesTagExist(fileName)) { IID3v1Tag id3v1 = new ID3v1Tag(fileName); Console.WriteLine(EnumUtils.GetDescription(id3v1.TagVersion)); Console.WriteLine(); Console.WriteLine(string.Format("Artist: {0}", id3v1.Artist)); Console.WriteLine(string.Format("Title: {0}", id3v1.Title)); Console.WriteLine(string.Format("Album: {0}", id3v1.Album)); Console.WriteLine(string.Format("Year: {0}", id3v1.Year)); Console.WriteLine(string.Format("Comment: {0}", id3v1.Comment)); Console.WriteLine(string.Format("Track: {0}", id3v1.TrackNumber)); Console.WriteLine(string.Format("Genre: {0}", GenreHelper.GenreByIndex[id3v1.GenreIndex])); Console.WriteLine(); // Example of saving an ID3v1 tag // // id3v1.Title = "New song title"; // id3v1.Save(fileName); } if (audioFile.FileType == AudioFileType.Flac) { VorbisComment vorbis = new VorbisComment(fileName); Console.WriteLine("Vorbis Comment"); Console.WriteLine(); Console.WriteLine(string.Format("Artist: {0}", vorbis.Artist)); Console.WriteLine(string.Format("Title: {0}", vorbis.Title)); Console.WriteLine(string.Format("Album: {0}", vorbis.Album)); Console.WriteLine(string.Format("Year: {0}", vorbis.Year)); Console.WriteLine(string.Format("Comment: {0}", vorbis.Comment)); Console.WriteLine(string.Format("Track: {0}", vorbis.TrackNumber)); Console.WriteLine(string.Format("Genre: {0}", vorbis.Genre)); Console.WriteLine(string.Format("Vendor: {0}", vorbis.Vendor)); Console.WriteLine(); // Example of saving a Vorbis Comment // // vorbis.Title = "New song title"; // vorbis.Save(fileName); } }
public void Play(IAudioFile audio) { Process.Start(audio.File.File.FullName); //Process.Start(m_mediaPlayerPath(), "\"" + audio.File.File.FullName + "\""); }
void IAudioLibrary.Play(IAudioFile file) { }
public void Play(IAudioFile file) { throw new NotImplementedException(); }