public int Run(string fromPath, List <FilterBase> aFilters, string toPath, ProgressReportCallback Callback) { AudioData audioDataFrom; AudioData audioDataTo; int rv = ReadFlacFile(fromPath, out audioDataFrom); if (rv < 0) { return(rv); } mBarrierReady = new Barrier(audioDataFrom.meta.channels); mBarrierSet = new Barrier(audioDataFrom.meta.channels); mInPcmArray = new double[audioDataFrom.meta.channels][]; Callback(FILE_READ_COMPLETE_PERCENTAGE, new ProgressArgs(Properties.Resources.LogFileReadCompleted, 0)); var fileFormat = FileFormatType.FLAC; if (0 == string.CompareOrdinal(Path.GetExtension(toPath).ToUpperInvariant(), ".DSF")) { fileFormat = FileFormatType.DSF; } rv = SetupResultPcm(audioDataFrom, aFilters, out audioDataTo, fileFormat); if (rv < 0) { return(rv); } { // タグの編集 var tagData = new TagData(); tagData.Meta = new WWFlacRWCS.Metadata(audioDataTo.meta); tagData.Picture = audioDataTo.picture; foreach (var f in aFilters) { tagData = f.TagEdit(tagData); } audioDataTo.meta = tagData.Meta; audioDataTo.picture = tagData.Picture; } Parallel.For(0, audioDataFrom.meta.channels, ch => { var filters = new List <FilterBase>(); foreach (var f in aFilters) { filters.Add(f.CreateCopy()); } FilterSetup(audioDataFrom, ch, filters); var from = audioDataFrom.pcm[ch]; var to = audioDataTo.pcm[ch]; rv = ProcessAudioFile(filters, audioDataFrom.meta.channels, ch, ref from, ref to, Callback); if (rv < 0) { return; } audioDataTo.pcm[ch] = to; if (audioDataTo.pcm[ch].overflow) { var s = string.Format(CultureInfo.CurrentCulture, Properties.Resources.ErrorSampleValueClipped, ch, audioDataTo.pcm[ch].maxMagnitude); Callback(-1, new ProgressArgs(s, 0)); } filters = null; }); if (rv < 0) { return(rv); } Callback(FILE_PROCESS_COMPLETE_PERCENTAGE, new ProgressArgs(string.Format(CultureInfo.CurrentCulture, Properties.Resources.LogfileWriteStarted, toPath), 0)); switch (audioDataTo.fileFormat) { case FileFormatType.FLAC: rv = WriteFlacFile(ref audioDataTo, toPath); break; case FileFormatType.DSF: try { rv = WriteDsfFile(ref audioDataTo, toPath); } catch (Exception ex) { Console.WriteLine(ex); } break; } return(rv); }
public virtual TagData TagEdit(TagData tagData) { return tagData; }
public int Run(string fromPath, List<FilterBase> aFilters, string toPath, ProgressReportCallback Callback) { AudioData audioDataFrom; AudioData audioDataTo; int rv; if (0 == Path.GetExtension(fromPath).CompareTo(".wav")) { rv = ReadWavFile(fromPath, out audioDataFrom); } else { rv = ReadFlacFile(fromPath, out audioDataFrom); } if (rv < 0) { return rv; } mBarrierReady = new Barrier(audioDataFrom.meta.channels); mBarrierSet = new Barrier(audioDataFrom.meta.channels); mInPcmArray = new double[audioDataFrom.meta.channels][]; Callback(FILE_READ_COMPLETE_PERCENTAGE, new ProgressArgs(Properties.Resources.LogFileReadCompleted, 0)); var fileFormat = FileFormatType.FLAC; if (0 == string.CompareOrdinal(Path.GetExtension(toPath).ToUpperInvariant(), ".DSF")) { fileFormat = FileFormatType.DSF; } rv = SetupResultPcm(audioDataFrom, aFilters, out audioDataTo, fileFormat); if (rv < 0) { return rv; } { // タグの編集 var tagData = new TagData(); tagData.Meta = new WWFlacRWCS.Metadata(audioDataTo.meta); tagData.Picture = audioDataTo.picture; foreach (var f in aFilters) { tagData = f.TagEdit(tagData); } audioDataTo.meta = tagData.Meta; audioDataTo.picture = tagData.Picture; } Parallel.For(0, audioDataFrom.meta.channels, ch => { var filters = new List<FilterBase>(); foreach (var f in aFilters) { filters.Add(f.CreateCopy()); } FilterSetup(audioDataFrom, ch, filters); var from = audioDataFrom.pcm[ch]; var to = audioDataTo.pcm[ch]; rv = ProcessAudioFile(filters, audioDataFrom.meta.channels, ch, ref from, ref to, Callback); if (rv < 0) { return; } audioDataTo.pcm[ch] = to; if (audioDataTo.pcm[ch].overflow) { var s = string.Format(CultureInfo.CurrentCulture, Properties.Resources.ErrorSampleValueClipped, ch, audioDataTo.pcm[ch].maxMagnitude); Callback(-1, new ProgressArgs(s, 0)); } filters = null; }); if (rv < 0) { return rv; } Callback(FILE_PROCESS_COMPLETE_PERCENTAGE, new ProgressArgs(string.Format(CultureInfo.CurrentCulture, Properties.Resources.LogfileWriteStarted, toPath), 0)); switch (audioDataTo.preferredSaveFormat) { case FileFormatType.FLAC: rv = WriteFlacFile(ref audioDataTo, toPath); break; case FileFormatType.DSF: try { rv = WriteDsfFile(ref audioDataTo, toPath); } catch (Exception ex) { Console.WriteLine(ex); } break; } return rv; }
public virtual TagData TagEdit(TagData tagData) { return(tagData); }
public override TagData TagEdit(TagData tagData) { switch (TagType) { case Type.Title: tagData.Meta.titleStr = Text; break; case Type.Artist: tagData.Meta.artistStr = Text; break; case Type.Album: tagData.Meta.albumStr = Text; break; case Type.AlbumArtist: tagData.Meta.albumArtistStr = Text; break; case Type.Genre: tagData.Meta.genreStr = Text; break; } return tagData; }