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); }
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); }
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"); } })); }
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)); } }
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); }
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); }
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); } } }
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; } }
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); }
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; } }