コード例 #1
0
        /// <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}");
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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;
        }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        /// <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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
            }
        }
コード例 #14
0
ファイル: ID3v2ViewModel.cs プロジェクト: judwhite/CD-Tag
        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;
        }
コード例 #15
0
        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);
        }
コード例 #16
0
ファイル: FormManager.cs プロジェクト: DarrenCodes/MP3Boss
        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);
        }
コード例 #17
0
        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
            });
        }
コード例 #18
0
ファイル: AlbumTrack.cs プロジェクト: judwhite/CD-Tag
        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";
            }
        }
コード例 #19
0
ファイル: FormManager.cs プロジェクト: DarrenCodes/MP3Boss
        private void SetFormAttributes(string filePath)
        {
            if (file == null)
                file = new AudioFile();

            ClearBindingObjectCollections();
            file.Read(filePath, formPropertiesObject);
            formPropertiesObject.FilePathLabel = filePath;
        }
コード例 #20
0
 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);
 }
コード例 #21
0
ファイル: Program.cs プロジェクト: Cesar18102/DA_AI_Labs
        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();
        }
コード例 #22
0
        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);
            }
        }
コード例 #23
0
ファイル: AudioProvider.cs プロジェクト: shaneasd/ConEdit
 public void Play(IAudioFile audio)
 {
     Process.Start(audio.File.File.FullName);
     //Process.Start(m_mediaPlayerPath(), "\"" +  audio.File.File.FullName + "\"");
 }
コード例 #24
0
ファイル: AudioProvider.cs プロジェクト: shaneasd/ConEdit
 void IAudioLibrary.Play(IAudioFile file)
 {
 }
コード例 #25
0
ファイル: IAudioProvider.cs プロジェクト: shaneasd/ConEdit
 public void Play(IAudioFile file)
 {
     throw new NotImplementedException();
 }
コード例 #26
0
 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);
 }