private void autoNumber() { List <Track> tl = tracklist.SelectedTracks; #if DEBUG List <Track> q = tracklist.Queue.ToList(); q.RemoveAll(t => tl.IndexOf(t) < 0); for (int i = 0; i < tl.Count; i++) { System.Diagnostics.Debug.Assert(tl[i] == q[i]); } #endif int low = 1; IEnumerable <Track> sum = tl.FindAll(t => t.TrackNum > 0); if (sum.Any()) { low = Math.Max(1, sum.Min(t => t.TrackNum)); } frmNumberTracks nt = new frmNumberTracks(low, tl.Count); nt.ShowDialog(this); if (nt.DialogResult == DialogResult.OK) { int num = nt.First; for (int i = 0; i < tl.Count; i++) { tl[i].TrackNum = num++; tl[i].ChangeType |= ChangeType.WriteTags; } tracklist.Invalidate(); TrackWriter.AddToUnsavedTracks(tl); } }
public bool Load() { if (!this.ConfirmExists) { return(false); } if (this.FileDate != File.GetLastWriteTime(this.FilePath)) { this.toStringDirty = true; this.searchStringDirty = true; TrackWriter.GetTags(this); FileInfo fi = new FileInfo(this.FilePath); this.FileSize = fi.Length; this.FileDate = fi.LastWriteTime; if (Setting.MoveNewFilesIntoMain) { this.ChangeType |= (ChangeType.Rename | ChangeType.Move | ChangeType.IgnoreContainment); this.RenameFormat = Setting.DefaultRenameFormat; TrackWriter.AddToUnsavedTracks(this); } else if (Setting.KeepOrganized) { this.ChangeType |= (ChangeType.Rename | ChangeType.Move); this.RenameFormat = Setting.DefaultRenameFormat; TrackWriter.AddToUnsavedTracks(this); } if (this.Type == FileType.None) { return(false); } UpdateMainGroup(); Database.IncrementDatabaseVersion(false); System.Threading.Thread.Sleep(0); } return(true); }
public void AddToLibrary(String FilePath) { if (Track == null) { Track = Track.Load(FilePath); } if (Track == null) { this.DownloadStatus = PodcastDownloadStatus.Error; throw new Exception("failed"); } Track.Title = this.Title; Track.Album = Subscription.Name; Track.Genre = this.Subscription.DefaultGenre; Track.RenameFormat = TrackWriter.RenameFormat.AR_AL_TK_TI; TrackWriter.AddToUnsavedTracks(Track); Database.AddToLibrary(Track, true, false); TrackWriter.Start(); }
private static void addItems() { try { running = true; cancel = false; int itemsLeft; lock (addItemLock) { itemsLeft = itemsToAdd.Count; } while (!cancel && itemsLeft > 0) { ItemToAdd ita; lock (addItemLock) { ita = itemsToAdd[0]; itemsToAdd.RemoveAt(0); } if (Directory.Exists(ita.FilePath)) { List <ItemToAdd> newItems = new List <ItemToAdd>(); DirectoryInfo di = new DirectoryInfo(ita.FilePath); foreach (FileInfo fi in di.GetFiles()) { newItems.Add(new ItemToAdd(fi.FullName, ita.PlaylistTarget, ita.AllowDuplicates)); } foreach (DirectoryInfo ddi in di.GetDirectories()) { newItems.Add(new ItemToAdd(ddi.FullName, ita.PlaylistTarget, ita.AllowDuplicates)); } lock (addItemLock) { itemsToAdd = itemsToAdd.Union(newItems).ToList(); } } else { if (Track.IsValidExtension(Path.GetExtension(ita.FilePath))) { Track tt = Track.Load(ita.FilePath); if (tt != null) { Database.AddLibraryResult alr = Database.AddToLibrary(tt, ita.AllowDuplicates, true); TrackWriter.AddToUnsavedTracks(tt); if (ita.PlaylistTarget.Length > 0) { Database.AddToPlaylist(ita.PlaylistTarget, tt); } switch (alr) { case Database.AddLibraryResult.OK: Controller.ShowMessage("Loading: " + (++addCount).ToString() + " - " + tt.ToString()); break; case Database.AddLibraryResult.UpdateOnly: Controller.ShowMessage("Updating: " + (++addCount).ToString() + " - " + tt.ToString()); break; } if (((addCount < 200) && ((addCount % 10) == 0)) || (addCount % 200 == 0)) { tryCallback(); } } } } lock (addItemLock) { itemsLeft = itemsToAdd.Count; } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } running = false; lock (addItemLock) { if (cancel) { itemsToAdd.Clear(); } } tryCallback(); TrackWriter.Start(); }
private void writeTracks() { if (Dirty) { bool writeArtist = write(txtArtist); bool writeAlbum = write(txtAlbum); bool writeAlbumArtist = write(txtAlbumArtist); bool writeGenre = write(cboGenre); bool writeGrouping = write(cboGrouping); bool writeComposer = write(txtComposer); bool writeYear = write(txtYear); bool writeTrackNum = write(txtTrackNum); bool writeDiskNum = write(txtDiskNum); bool?writeCompilation = write(cboCompilation) ? (cboCompilation.Text == Localization.YES) : (bool?)null; string title; if (!isMultiple) { title = txtTitle.Text.Trim(); } string artist = txtArtist.Text.Trim(); string album = txtAlbum.Text.Trim(); string albumArtist = txtAlbumArtist.Text.Trim(); string genre = cboGenre.Text.Trim(); string grouping = cboGrouping.Text.Trim(); string composer = txtComposer.Text.Trim(); int year = 0; Int32.TryParse(txtYear.Text.Trim(), out year); int trackNum = 0; Int32.TryParse(txtTrackNum.Text.Trim(), out trackNum); int diskNum = 0; Int32.TryParse(txtDiskNum.Text.Trim(), out diskNum); TrackWriter.RenameFormat rf = TrackWriter.RenameFormat.None; if (cboRename.SelectedIndex > 0 && (!isMultiple || checkboxes[cboRename].Checked)) { if (isMultiple) { rf = TrackWriter.GetRenameFormat(cboRename.Text); } else { rf = TrackWriter.GetRenameFormat(template, cboRename.Text); } } bool writeImage = chkArt.Checked && ImageDirty; foreach (Track t in tracks) { if (!isMultiple) { string s; if (t.Title != (s = txtTitle.Text.Trim())) { t.Title = s; t.ChangeType |= ChangeType.WriteTags; } } if (writeArtist) { t.ChangeType |= ChangeType.WriteTags; t.Artist = artist; } if (writeAlbum) { t.ChangeType |= ChangeType.WriteTags; t.Album = album; } if (writeAlbumArtist) { t.ChangeType |= ChangeType.WriteTags; t.AlbumArtist = albumArtist; } if (writeComposer) { t.ChangeType |= ChangeType.WriteTags; t.Composer = composer; } if (writeGenre) { t.ChangeType |= ChangeType.WriteTags; t.Genre = genre; } if (writeGrouping) { t.ChangeType |= ChangeType.WriteTags; t.Grouping = grouping; } if (writeYear) { t.ChangeType |= ChangeType.WriteTags; t.Year = year; } if (writeTrackNum) { t.ChangeType |= ChangeType.WriteTags; t.TrackNum = trackNum; } if (writeDiskNum) { t.ChangeType |= ChangeType.WriteTags; t.DiskNum = diskNum; } if (writeCompilation.HasValue) { t.ChangeType |= ChangeType.WriteTags; t.Compilation = writeCompilation.Value; } t.UpdateMainGroup(); Database.IncrementDatabaseVersion(true); if (writeImage) { t.SetCover(Image); t.ChangeType |= ChangeType.EmbedImage; this.Parent.Invalidate(); } else { t.AllowCoverLoad(); // tags might make it accessible now } if (rf != TrackWriter.RenameFormat.None) { t.RenameFormat = rf; t.ChangeType |= (ChangeType.Rename | ChangeType.IgnoreContainment); } if (Setting.KeepOrganized) { t.ChangeType |= ChangeType.Move; } } TrackWriter.AddToUnsavedTracks(tracks); } }
public void DoReplayGainAnalysis() { try { Controller.ShowMessage("Starting volume leveling analysis..."); List <List <Track> > albums = partitionByAlbum(tracks); byte[] buffer = new byte[READ_BUFFER_SIZE]; float[] left = new float[READ_BUFFER_SIZE / 4]; float[] right = new float[READ_BUFFER_SIZE / 4]; int numSamples; foreach (List <Track> album in albums) { try { if (rga.InitGainAnalysis(album[0].SampleRate)) { foreach (Track t in album) { AudioStream stream = new AudioStreamFile(t, 0, new float[10], 10, false, ReplayGainMode.Off); while ((numSamples = stream.Read(buffer, 0, READ_BUFFER_SIZE)) > 0) { int inputBufferSize = numSamples / 4; for (int i = 0; i < inputBufferSize; i++) { left[i] = AudioStreamBass.from16Bit(buffer[i * 4 + 1] * 0x100 + buffer[i * 4]); right[i] = AudioStreamBass.from16Bit(buffer[i * 4 + 3] * 0x100 + buffer[i * 4 + 2]); } rga.AnalyzeSamples(left, right, inputBufferSize); if (cancel) { callback(); return; } } stream.Close(); t.ReplayGainTrack = rga.GetTrackGain(); numTracksDone++; Controller.ShowMessage(String.Format("{0}/{1}: Volume analyzed for '{2}'", numTracksDone.ToString(), numTracks.ToString(), t.ToShortString())); } float albumGain = rga.GetAlbumGain(); foreach (Track t in album) { t.ReplayGainAlbum = albumGain; } if (Setting.WriteReplayGainTags) { foreach (Track t in album) { t.ChangeType |= ChangeType.WriteTags; } TrackWriter.AddToUnsavedTracks(album); TrackWriter.Start(); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } callback(); }
protected override void ok() { if (createDir()) { this.Enabled = false; saveSettings(); string r = complexify(root()); List <Track> outsideTracks = Database.FindAllTracks(t => !((oldRoot.Length > 0 && t.FilePath.StartsWith(oldRoot, StringComparison.OrdinalIgnoreCase)) || (t.FilePath.StartsWith(r, StringComparison.OrdinalIgnoreCase)))); List <Track> tracks = Database.LibrarySnapshot; foreach (Track t in tracks) { t.ChangeType |= (ChangeType.Move | ChangeType.IgnoreContainment); } System.Diagnostics.Debug.WriteLine("num: " + tracks.Count(t => (t.ChangeType & ChangeType.IgnoreContainment) != 0)); if (outsideTracks.Any(t => t.ConfirmExists)) { List <frmTaskDialog.Option> options = new List <frmTaskDialog.Option>(); options.Add(new frmTaskDialog.Option("Move all my files", "All files in your library will be relocated within the top folder. (Files on different drives than your top folder's drive will be copied instead of moved.)", 0)); options.Add(new frmTaskDialog.Option("Don't move outside files", "Only files already under the top folder will be organized.", 1)); options.Add(new frmTaskDialog.Option("Cancel", "Go back to the organizer panel.", 2)); frmTaskDialog td = new frmTaskDialog(Localization.Get(UI_Key.Organize_Move_Files_Title), Localization.Get(UI_Key.Organize_Move_Files), options); System.Diagnostics.Debug.WriteLine("num: " + tracks.Count(t => (t.ChangeType & ChangeType.IgnoreContainment) != 0)); td.ShowDialog(this); switch (td.ResultIndex) { case 0: break; case 1: foreach (Track t in outsideTracks) { t.ChangeType &= ~ChangeType.IgnoreContainment; } break; case 2: this.Enabled = true; txtDirectory.Focus(); return; } } foreach (Track t in tracks) { t.RenameFormat = renameFormat; if (renameFormat != TrackWriter.RenameFormat.None) { t.ChangeType |= ChangeType.Rename; } } TrackWriter.AddToUnsavedTracks(tracks); done(); } }