Exemple #1
0
        private void BassPlayerLoad(string url)
        {
            Un4seen.Bass.BASSActive isActive = default(Un4seen.Bass.BASSActive);

            isActive = Bass.BASS_ChannelIsActive(stream);
            if (isActive == Un4seen.Bass.BASSActive.BASS_ACTIVE_PLAYING)
            {
                Bass.BASS_ChannelStop(stream);
            }

            // If ofd.FileName = "" Then Exit Sub
            stream = Bass.BASS_StreamCreateFile(url, 0, 0, BASSFlag.BASS_STREAM_AUTOFREE | BASSFlag.BASS_STREAM_PRESCAN);
            //stream = Bass.BASS_StreamCreateURL(url, 0, BASSFlag.BASS_DEFAULT, null, IntPtr.Zero);

            //  stream = Bass.BASS_Stream
            Bass.BASS_ChannelPlay(stream, false);
            Un4seen.Bass.BASS_CHANNELINFO    CI = new Un4seen.Bass.BASS_CHANNELINFO();
            Un4seen.Bass.AddOn.Tags.TAG_INFO TI = new Un4seen.Bass.AddOn.Tags.TAG_INFO();

            // WF = New Un4seen.Bass.Misc.WaveForm(ofd.FileName, New Un4seen.Bass.Misc.WAVEFORMPROC(AddressOf MyWaveFormCallback), Me)
            // WF.RenderStart(True, BASSFlag.BASS_DEFAULT)

            tmrUpdateControls.Start();
            tmrVisuals.Start();

            TagLib.File f = TagLib.File.Create(url);
            lblTrackInfo.Text       = f.Tag.Artists[0] + " - " + f.Tag.Title;
            cmdPlay.BackgroundImage = pbPausePick.BackgroundImage;

            currentPlayingTrackFile = url;
            tmrUpdateControls_Tick(null, null);
        }
Exemple #2
0
        private void RetrieveInfo(String fileName, Ares.Tags.FileIdentification data, int query, Ares.ModelInfo.IProgressMonitor progressMonitor)
        {
            var id3Task = Task.Factory.StartNew(() =>
            {
                if ((query & (ARTIST | ALBUM | TITLE)) != 0)
                {
                    Un4seen.Bass.AddOn.Tags.TAG_INFO tag = Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(fileName, true, true);
                    if (tag != null)
                    {
                        if (!String.IsNullOrEmpty(tag.artist) && ((query & ARTIST) != 0))
                        {
                            data.Artist = tag.artist;
                            query      &= ~ARTIST;
                        }
                        if (!String.IsNullOrEmpty(tag.album) && ((query & ALBUM) != 0))
                        {
                            data.Album = tag.album;
                            query     &= ~ALBUM;
                        }
                        if (!String.IsNullOrEmpty(tag.title) && ((query & TITLE) != 0))
                        {
                            data.Title = tag.title;
                            // API always returns a title
                            // try to get a better title through MusicBrainz if it must be queried anyway
                            if ((query & (ARTIST | ALBUM)) == 0)
                            {
                                query &= ~TITLE;
                            }
                        }
                    }
                }
                progressMonitor.IncreaseProgress(15);
                return(query);
            }, m_Token, TaskCreationOptions.AttachedToParent, TaskScheduler.Default);


            var acoustIdTask = id3Task.ContinueWith((task) =>
            {
                SequentialProgressMonitor subMon = new SequentialProgressMonitor(progressMonitor, 15, 55);
                return(id3Task.Result != 0 ? QueryForAcoustId(fileName, subMon) : null);
            }, m_Token, TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent, TaskScheduler.Default);

            var lastTask = acoustIdTask.ContinueWith((task) =>
            {
                if (acoustIdTask.Result != null)
                {
                    int adaptedQuery = id3Task.Result;
                    data.AcoustId    = acoustIdTask.Result.AcoustId;
                    if (((adaptedQuery & (ARTIST | ALBUM | TITLE)) != 0) && !String.IsNullOrEmpty(acoustIdTask.Result.MusicBrainzId))
                    {
                        QueryForMusicInfo(data, adaptedQuery, acoustIdTask.Result.MusicBrainzId);
                    }
                }
                progressMonitor.IncreaseProgress(30);
            }, m_Token, TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent, TaskScheduler.Default);
        }
Exemple #3
0
        private void Instance_TrackTagInfoUpdated(TrackVM trackVM, Un4seen.Bass.AddOn.Tags.TAG_INFO tagInfo)
        {
            RootDispatcher.Dispatcher.Invoke(new System.Action(() =>
            {
                System.Diagnostics.Debug.WriteLine("Instance_TrackTagInfoUpdated: " + tagInfo.title);

                ObservableCollection <TrackVM> tracks = TracklistProvider.Instance.Tracks;

                int index = tracks.IndexOf(trackVM);
                if (index >= 0)
                {
                    tracks[index].Title  = tagInfo.title;
                    tracks[index].Artist = tagInfo.artist;
                    tracks[index].Album  = tagInfo.album;
                    tracks[index].Length = Un4seen.Bass.Utils.FixTimespan(tagInfo.duration, "MMSS");
                }
            }));
        }
Exemple #4
0
 public static MusicInfo GetInfo(int musicElementId)
 {
     if (musicElementId != -1)
     {
         IElement musicElement = Ares.Data.DataModule.ElementRepository.GetElement(musicElementId);
         if (musicElement == null)
         {
             return(new MusicInfo(String.Empty, String.Empty));
         }
         IFileElement fileElement = musicElement as IFileElement;
         String       shortTitle  = musicElement.Title;
         String       longTitle   = musicElement.Title;
         if (fileElement != null)
         {
             String path = Settings.Settings.Instance.MusicDirectory;
             path = System.IO.Path.Combine(path, fileElement.FilePath);
             Un4seen.Bass.AddOn.Tags.TAG_INFO tag = Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(path, true, false);
             if (tag != null)
             {
                 StringBuilder musicInfoBuilder = new StringBuilder();
                 musicInfoBuilder.Append(tag.artist);
                 if (musicInfoBuilder.Length > 0)
                 {
                     musicInfoBuilder.Append(" - ");
                 }
                 musicInfoBuilder.Append(tag.album);
                 if (musicInfoBuilder.Length > 0)
                 {
                     musicInfoBuilder.Append(" - ");
                 }
                 musicInfoBuilder.Append(tag.title);
                 longTitle = musicInfoBuilder.ToString();
             }
         }
         return(new MusicInfo(longTitle, shortTitle));
     }
     else
     {
         return(new MusicInfo(String.Empty, String.Empty));
     }
 }
Exemple #5
0
        private static IElement CreateFileElement(DraggedItem item, String musicDirectory, String soundDirectory)
        {
            IFileElement element = Ares.Data.DataModule.ElementFactory.CreateFileElement(item.RelativePath, item.ItemType == FileType.Music ? SoundFileType.Music : SoundFileType.SoundEffect);
            String       dir     = item.ItemType == FileType.Music ? musicDirectory : soundDirectory;
            String       path    = System.IO.Path.Combine(dir, item.RelativePath);

            Un4seen.Bass.AddOn.Tags.TAG_INFO tag = Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(path, true, true);
            if (!String.IsNullOrEmpty(tag?.title))
            {
                element.Title = tag.title;
            }
            else if (String.IsNullOrEmpty(item.Title))
            {
                element.Title = System.IO.Path.GetFileNameWithoutExtension(path);
            }
            else
            {
                element.Title = item.Title;
            }
            return(element);
        }
Exemple #6
0
        public static MusicFileInfo GetMusicFileInfo(this IElement element)
        {
            MusicFileInfo result      = new MusicFileInfo();
            var           fileElement = element.GetFileElement();

            if (fileElement != null)
            {
                String path = fileElement.FilePath;
                try
                {
                    var dbInfo = Ares.Tags.TagsModule.GetTagsDB().ReadInterface.GetIdentificationForFiles(new[] { path }.ToList());
                    if (dbInfo != null && dbInfo.Count > 0)
                    {
                        result.Artist = dbInfo[0].Artist;
                        result.Album  = dbInfo[0].Album;
                    }
                }
                catch (Ares.Tags.TagsDbException)
                { }
                if (String.IsNullOrEmpty(result.Artist) || String.IsNullOrEmpty(result.Album))
                {
                    String basePath     = Settings.Settings.Instance.MusicDirectory;
                    String completePath = System.IO.Path.Combine(basePath, path);
                    Un4seen.Bass.AddOn.Tags.TAG_INFO tag = Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(completePath, true, true);
                    if (tag != null)
                    {
                        if (string.IsNullOrEmpty(result.Album))
                        {
                            result.Album = tag.album;
                        }
                        if (string.IsNullOrEmpty(result.Artist))
                        {
                            result.Artist = tag.artist;
                        }
                    }
                }
            }
            return(result);
        }
Exemple #7
0
        private void Instance_MetaUpdated(Un4seen.Bass.AddOn.Tags.TAG_INFO tagInfo)
        {
            RootDispatcher.Dispatcher.Invoke(new System.Action(() =>
            {
                System.Diagnostics.Debug.WriteLine("Track meta updated");

                TrackVM track = TracklistProvider.Instance.GetCurrentTrack();

                track.Title  = tagInfo.title;
                track.Album  = tagInfo.album;
                track.Artist = tagInfo.artist;
                track.Length = Un4seen.Bass.Utils.FixTimespan(tagInfo.duration, "MMSS");
            }));

            foreach (PluginVM item in Plugins)
            {
                if (item.IsEnabled)
                {
                    item.Plugin.RetrieveInfo(TracklistProvider.Instance.GetCurrentTrack().Location, AudioControllerService.Current.ChannelInfo, tagInfo);
                }
            }
        }
Exemple #8
0
        private void UpdateStaticInfo()
        {
            typeLabel.Text     = m_Element.SoundFileType == SoundFileType.Music ? StringResources.Music : StringResources.Sounds;
            filePathLabel.Text = m_Element.FilePath;
            String path = m_Element.SoundFileType == SoundFileType.Music ? Settings.Settings.Instance.MusicDirectory : Settings.Settings.Instance.SoundDirectory;

            path = System.IO.Path.Combine(path, m_Element.FilePath);
            Un4seen.Bass.AddOn.Tags.TAG_INFO tag = Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(path, true, true);
            if (tag != null)
            {
                titleLabel.Text  = String.IsNullOrEmpty(tag.title) ? StringResources.Unknown : tag.title;
                artistLabel.Text = String.IsNullOrEmpty(tag.artist) ? StringResources.Unknown : tag.artist;
                albumLabel.Text  = String.IsNullOrEmpty(tag.album) ? StringResources.Unknown : tag.album;
                TimeSpan duration = TimeSpan.FromSeconds(tag.duration);
                LengthLabel.Text = (DateTime.Today + duration).ToString("HH::mm::ss.fff");
            }
            else
            {
                titleLabel.Text  = StringResources.Unknown;
                artistLabel.Text = StringResources.Unknown;
                albumLabel.Text  = StringResources.Unknown;
                LengthLabel.Text = StringResources.Unknown;
            }
        }
Exemple #9
0
        private void DoExtraction(TagExtractionInfo info)
        {
            Dictionary <String, int> tags = new Dictionary <string, int>();
            int interpretCatId            = -1;
            int albumCatId = -1;
            int genreCatId = -1;
            int moodCatId  = -1;

            List <String> interprets = new List <string>();
            List <String> albums     = new List <string>();
            List <String> genres     = new List <string>();
            List <String> moods      = new List <string>();

            Dictionary <String, int> interpretTags = new Dictionary <string, int>(StringComparer.CurrentCultureIgnoreCase);
            Dictionary <String, int> albumTags     = new Dictionary <string, int>(StringComparer.CurrentCultureIgnoreCase);
            Dictionary <String, int> genreTags     = new Dictionary <string, int>(StringComparer.CurrentCultureIgnoreCase);
            Dictionary <String, int> moodTags      = new Dictionary <string, int>(StringComparer.CurrentCultureIgnoreCase);

            int    lastPercent = 0;
            int    count       = 0;
            String basePath    = info.MusicDirectory;

            foreach (String file in info.Files)
            {
                String path = System.IO.Path.Combine(basePath, file);
                Un4seen.Bass.AddOn.Tags.TAG_INFO tag = Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(path, true, true);
                if (tag != null)
                {
                    if (!String.IsNullOrEmpty(tag.artist))
                    {
                        interpretTags[tag.artist] = -1;
                    }
                    if (!String.IsNullOrEmpty(tag.album))
                    {
                        albumTags[tag.album] = -1;
                    }
                    if (!String.IsNullOrEmpty(tag.genre))
                    {
                        genreTags[tag.genre] = -1;
                    }
                    if (!String.IsNullOrEmpty(tag.mood))
                    {
                        moodTags[tag.mood] = -1;
                    }

                    interprets.Add(tag.artist != null ? tag.artist : String.Empty);
                    albums.Add(tag.album != null ? tag.album : String.Empty);
                    genres.Add(tag.genre != null ? tag.genre : String.Empty);
                    moods.Add(tag.mood != null ? tag.mood : String.Empty);
                }
                else
                {
                    interprets.Add(String.Empty);
                    albums.Add(String.Empty);
                    genres.Add(String.Empty);
                    moods.Add(String.Empty);
                }
                int percent = (++count) * 90 / info.Files.Count;
                if (percent > lastPercent)
                {
                    m_Monitor.SetProgress(percent, file);
                    lastPercent = percent;
                }
                m_Token.ThrowIfCancellationRequested();
            }

            m_Monitor.SetProgress(90, StringResources.AddingTags);
            m_Token.ThrowIfCancellationRequested();

            var dbRead     = Ares.Tags.TagsModule.GetTagsDB().GetReadInterfaceByLanguage(info.LanguageId);
            var dbWrite    = Ares.Tags.TagsModule.GetTagsDB().GetWriteInterfaceByLanguage(info.LanguageId);
            var categories = dbRead.GetAllCategories();
            int tagCount   = 0;

            if (info.Interpret)
            {
                tagCount += interpretTags.Count;
            }
            if (info.Album)
            {
                tagCount += albumTags.Count;
            }
            if (info.Genre)
            {
                tagCount += genreTags.Count;
            }
            if (info.Mood)
            {
                tagCount += moodTags.Count;
            }
            int currentCount = 0;

            if (info.Interpret && interpretTags.Count > 0)
            {
                var interpretCat = categories.FirstOrDefault((Ares.Tags.CategoryForLanguage cat) => { return(cat.Name.Equals(StringResources.Interpret, StringComparison.CurrentCultureIgnoreCase)); });
                if (interpretCat != null)
                {
                    interpretCatId = interpretCat.Id;
                }
                else
                {
                    interpretCatId = dbWrite.AddCategory(StringResources.Interpret);
                }
                AddTags(interpretTags, interpretCatId, info.LanguageId, currentCount, tagCount, ref lastPercent);
                currentCount += interpretTags.Count;
            }
            if (info.Album && albumTags.Count > 0)
            {
                var albumCat = categories.FirstOrDefault((Ares.Tags.CategoryForLanguage cat) => { return(cat.Name.Equals(StringResources.Album, StringComparison.CurrentCultureIgnoreCase)); });
                if (albumCat != null)
                {
                    albumCatId = albumCat.Id;
                }
                else
                {
                    albumCatId = dbWrite.AddCategory(StringResources.Album);
                }
                AddTags(albumTags, albumCatId, info.LanguageId, currentCount, tagCount, ref lastPercent);
                currentCount += albumTags.Count;
            }
            if (info.Genre && genreTags.Count > 0)
            {
                var genreCat = categories.FirstOrDefault((Ares.Tags.CategoryForLanguage cat) => { return(cat.Name.Equals(StringResources.Genre, StringComparison.CurrentCultureIgnoreCase)); });
                if (genreCat != null)
                {
                    genreCatId = genreCat.Id;
                }
                else
                {
                    genreCatId = dbWrite.AddCategory(StringResources.Genre);
                }
                AddTags(genreTags, genreCatId, info.LanguageId, currentCount, tagCount, ref lastPercent);
                currentCount += genreTags.Count;
            }
            if (info.Mood && moodTags.Count > 0)
            {
                var moodCat = categories.FirstOrDefault((Ares.Tags.CategoryForLanguage cat) => { return(cat.Name.Equals(StringResources.Mood, StringComparison.CurrentCultureIgnoreCase)); });
                if (moodCat != null)
                {
                    moodCatId = moodCat.Id;
                }
                else
                {
                    moodCatId = dbWrite.AddCategory(StringResources.Mood);
                }
                AddTags(moodTags, moodCatId, info.LanguageId, currentCount, tagCount, ref lastPercent);
                tagCount += moodTags.Count;
            }

            m_Monitor.SetProgress(99, StringResources.SettingFileTags);
            m_Token.ThrowIfCancellationRequested();

            List <IList <int> > newTags = new List <IList <int> >();

            for (int i = 0; i < info.Files.Count; ++i)
            {
                List <int> fileTags = new List <int>();
                if (info.Interpret && !String.IsNullOrEmpty(interprets[i]))
                {
                    fileTags.Add(interpretTags[interprets[i]]);
                }
                if (info.Album && !String.IsNullOrEmpty(albums[i]))
                {
                    fileTags.Add(albumTags[albums[i]]);
                }
                if (info.Genre && !String.IsNullOrEmpty(genres[i]))
                {
                    fileTags.Add(genreTags[genres[i]]);
                }
                if (info.Mood && !String.IsNullOrEmpty(moods[i]))
                {
                    fileTags.Add(moodTags[moods[i]]);
                }
                newTags.Add(fileTags);
            }
            var dbWrite2 = Ares.Tags.TagsModule.GetTagsDB().WriteInterface;

            dbWrite2.AddFileTags(info.Files, newTags);
        }
Exemple #10
0
        private void btn_Load_Click(object sender, EventArgs e)
        {
            // запускать только в режиме Pause
            DialogResult dr1 = MessageBox.Show("Очистить старый плейлист?", "Вопрос", MessageBoxButtons.YesNoCancel);

            if (dr1 == DialogResult.Cancel)
            {
                return;
            }

            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.InitialDirectory = Directory.GetCurrentDirectory();;
            openFileDialog1.Filter           = "mp3 files (*.mp3)|*.mp3|All files (*.*)|*.*";
            openFileDialog1.FilterIndex      = 0;
            openFileDialog1.RestoreDirectory = true;
            openFileDialog1.Multiselect      = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if (bPlay)
                {
                    btn_Play_Click(null, null);
                    Form1.himself.Audio_Stop();
                }

                Gradusnik Gradusnik1 = new Gradusnik();
                Gradusnik1.Show();
                //this.Cursor = Cursors.WaitCursor;
                if (Bass.BASS_Init(-1, Form1.SAMPLERATE, BASSInit.BASS_DEVICE_DEFAULT | BASSInit.BASS_DEVICE_FREQ, IntPtr.Zero))
                {
                    bUpdate = false;
                    if (dr1 == DialogResult.Yes)
                    {
                        Form1.ListParam.Clear();
                        dataGridView1.Rows.Clear();
                    }
                    for (int i = 0; i < openFileDialog1.FileNames.Length; i++)
                    {
                        Gradusnik1.progressBar1.Value = Gradusnik1.progressBar1.Maximum * i / openFileDialog1.FileNames.Length;
                        Un4seen.Bass.AddOn.Tags.TAG_INFO tags = Un4seen.Bass.AddOn.Tags.BassTags.BASS_TAG_GetFromFile(openFileDialog1.FileNames [i]);
                        if (tags != null)
                        {
                            int stream = Bass.BASS_StreamCreateFile(openFileDialog1.FileNames [i], 0, 0, BASSFlag.BASS_DEFAULT);
                            if (stream != 0)
                            {
                                Param prm1 = new Param();
                                prm1.Bright    = 0.0;
                                prm1.iFilter   = 0;
                                prm1.Gamma     = 0.0;
                                prm1.Interval  = 0;
                                prm1.PowerLeak = 0.0;
                                prm1.Length    = (int)Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));
                                prm1.Palitra   = 0.0;
                                prm1.Resample  = 0;
                                prm1.Fname     = openFileDialog1.FileNames [i];
                                Form1.ListParam.Add(prm1);
                                Bass.BASS_StreamFree(stream);
                            }
                        }
                    }
                    Reload();
                    dataGridView1.Refresh();
                    Bass.BASS_Free();
                }
                Gradusnik1.progressBar1.Value = Gradusnik1.progressBar1.Maximum;
                Gradusnik1.Close();
                //this.Cursor = Cursors.Default;
            }
        }