diff --git a/Bwg.Hardware/Bwg.Hardware.csproj b/Bwg.Hardware/Bwg.Hardware.csproj
index 433d3353d..af04ddaae 100644
--- a/Bwg.Hardware/Bwg.Hardware.csproj
+++ b/Bwg.Hardware/Bwg.Hardware.csproj
@@ -1,7 +1,7 @@
- net47;net20
+ netstandard2.1
0.0.7.1
Bwg.Hardware
Bwg.Hardware
@@ -16,6 +16,10 @@
https://svn.code.sf.net/p/bwgburn/code/
svn
BwgSoftware
-
-
-
+
+
+
+
+
+
+
diff --git a/Bwg.Logging/Bwg.Logging.csproj b/Bwg.Logging/Bwg.Logging.csproj
index 0527ed5f1..197f336a9 100644
--- a/Bwg.Logging/Bwg.Logging.csproj
+++ b/Bwg.Logging/Bwg.Logging.csproj
@@ -1,7 +1,7 @@
- net47;net20
+ netstandard2.1
0.0.7.1
Bwg.Logging
Bwg.Logging
diff --git a/Bwg.Scsi/Bwg.Scsi.csproj b/Bwg.Scsi/Bwg.Scsi.csproj
index 87a3b9b77..b58b90fe5 100644
--- a/Bwg.Scsi/Bwg.Scsi.csproj
+++ b/Bwg.Scsi/Bwg.Scsi.csproj
@@ -1,7 +1,7 @@
- net47;net20
+ netstandard2.1
0.0.7.1
Bwg.Scsi
Bwg.Scsi
diff --git a/CUEControls/CUEControls.csproj b/CUEControls/CUEControls.csproj
index e5cfe4453..452c8316e 100644
--- a/CUEControls/CUEControls.csproj
+++ b/CUEControls/CUEControls.csproj
@@ -1,23 +1,22 @@
- net47;net20
+ net10.0-windows
2.2.6.0
CUEControls
- CUEControls
- CUETools
+ CUEControls
+ 7.0
+ CUETools
Library containing windows GUI controls for CUETools.
Copyright (c) 2008-2025 Grigory Chudov
Grigory Chudov
- true
+ true
+ true
+ $(NoWarn);WFO1000
..\bin\$(Configuration)\
https://github.com/gchudov/cuetools.net
git
-
-
-
-
-
+
diff --git a/CUEPlayer/CUEPlayer.csproj b/CUEPlayer/CUEPlayer.csproj
index 4a6283749..af48efe6b 100644
--- a/CUEPlayer/CUEPlayer.csproj
+++ b/CUEPlayer/CUEPlayer.csproj
@@ -1,296 +1,46 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {04E59836-0C5A-4B9B-8899-848D56911758}
- WinExe
- Properties
- CUEPlayer
- CUEPlayer
- v4.7
- 512
- false
-
-
- 3.5
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- true
-
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- true
- AllRules.ruleset
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form
-
-
- Browser.cs
-
-
- DataSet1.xsd
-
-
- Form
-
-
- Deck.cs
-
-
- Form
-
-
- frmCUEPlayer.cs
-
-
- Form
-
-
- Icecast.cs
-
-
- Form
-
-
- IcecastSettings.cs
-
-
- Form
-
-
- Output.cs
-
-
- Form
-
-
- Playlist.cs
-
-
-
-
- Browser.cs
-
-
- Deck.cs
-
-
- frmCUEPlayer.cs
-
-
- Icecast.cs
-
-
- IcecastSettings.cs
-
-
- Output.cs
-
-
- Playlist.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
- True
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
-
-
-
- {CA4D64E6-6544-4A29-8BA5-7DB08D50D072}
- CUEControls
- False
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
- False
-
-
- {FAD09EE2-D6B2-4A8E-9F1C-2A9FB293661A}
- CUETools.Codecs.CoreAudio
-
-
- {8FC5DA7C-F6AC-4D04-85BC-1233DDF569E7}
- CUETools.Codecs.Icecast
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
- False
-
-
- {AFF1AFF9-839D-4892-88CD-8BD09BAFC1D2}
- CUETools.DSP.Mixer
-
-
- {A6303861-CA06-4C2C-A104-BA9291538F6F}
- CUETools.DSP.Resampler
-
-
- {4911BD82-49EF-4858-8B51-5394F86739A4}
- CUETools.Processor
- False
-
-
- {8DD1E84B-0B03-4C0B-9B42-1E49F75E7CB1}
- ProgressODoom
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- DataSet1.xsd
-
-
- Designer
- MSDataSetGenerator
-
-
- DataSet1.xsd
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 2.0 %28x86%29
- true
-
-
- False
- .NET Framework 3.0 %28x86%29
- false
-
-
- False
- .NET Framework 3.5
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- SQL Server Compact 3.5 SP2
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ WinExe
+ CUEPlayer
+ CUEPlayer
+ 7.0
+ true
+ false
+ true
+ $(NoWarn);WFO1000
+ ..\bin\$(Configuration)\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ PreserveNewest
+
+
+
+
diff --git a/CUEPlayer/DataSet1.cs b/CUEPlayer/DataSet1.cs
index cbf14c209..d10133fc8 100644
--- a/CUEPlayer/DataSet1.cs
+++ b/CUEPlayer/DataSet1.cs
@@ -1,9 +1,229 @@
-namespace CUEPlayer {
-
-
- public partial class DataSet1 {
- partial class PlaylistDataTable
- {
- }
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+
+namespace CUEPlayer {
+
+
+ public partial class DataSet1 : DataSet {
+ private readonly PlaylistDataTable tablePlaylist;
+
+ public DataSet1()
+ {
+ DataSetName = "DataSet1";
+ tablePlaylist = new PlaylistDataTable();
+ Tables.Add(tablePlaylist);
+ }
+
+ public PlaylistDataTable Playlist
+ {
+ get { return tablePlaylist; }
+ }
+
+ public partial class PlaylistDataTable : DataTable
+ {
+ private readonly DataColumn columnId;
+ private readonly DataColumn columnPath;
+ private readonly DataColumn columnArtist;
+ private readonly DataColumn columnTitle;
+ private readonly DataColumn columnAlbum;
+ private readonly DataColumn columnLength;
+ private readonly DataColumn columnTrack;
+
+ public PlaylistDataTable()
+ : base("Playlist")
+ {
+ columnId = Columns.Add("id", typeof(int));
+ columnId.AutoIncrement = true;
+ columnId.AutoIncrementSeed = -1;
+ columnId.AutoIncrementStep = -1;
+ columnPath = Columns.Add("path", typeof(string));
+ columnArtist = Columns.Add("artist", typeof(string));
+ columnTitle = Columns.Add("title", typeof(string));
+ columnAlbum = Columns.Add("album", typeof(string));
+ columnLength = Columns.Add("length", typeof(int));
+ columnTrack = Columns.Add("track", typeof(int));
+ PrimaryKey = new[] { columnId };
+ }
+
+ public PlaylistRow this[int index]
+ {
+ get { return (PlaylistRow)Rows[index]; }
+ }
+
+ public PlaylistRow AddPlaylistRow(string path, string artist, string title, string album, int length, int track)
+ {
+ PlaylistRow row = (PlaylistRow)NewRow();
+ row.path = path;
+ row.artist = artist;
+ row.title = title;
+ row.album = album;
+ row.length = length;
+ row.track = track;
+ Rows.Add(row);
+ return row;
+ }
+
+ public IEnumerator GetEnumerator()
+ {
+ foreach (DataRow row in Rows)
+ if (row.RowState != DataRowState.Deleted)
+ yield return (PlaylistRow)row;
+ }
+
+ protected override Type GetRowType()
+ {
+ return typeof(PlaylistRow);
+ }
+
+ protected override DataRow NewRowFromBuilder(DataRowBuilder builder)
+ {
+ return new PlaylistRow(builder);
+ }
+ }
+
+ public partial class PlaylistRow : DataRow
+ {
+ internal PlaylistRow(DataRowBuilder builder)
+ : base(builder)
+ {
+ }
+
+ public int id
+ {
+ get { return FieldValue("id"); }
+ set { this["id"] = value; }
+ }
+
+ public string path
+ {
+ get { return FieldValue("path"); }
+ set { this["path"] = value ?? (object)DBNull.Value; }
+ }
+
+ public string artist
+ {
+ get { return FieldValue("artist"); }
+ set { this["artist"] = value ?? (object)DBNull.Value; }
+ }
+
+ public string title
+ {
+ get { return FieldValue("title"); }
+ set { this["title"] = value ?? (object)DBNull.Value; }
+ }
+
+ public string album
+ {
+ get { return FieldValue("album"); }
+ set { this["album"] = value ?? (object)DBNull.Value; }
+ }
+
+ public int length
+ {
+ get { return FieldValue("length"); }
+ set { this["length"] = value; }
+ }
+
+ public int track
+ {
+ get { return FieldValue("track"); }
+ set { this["track"] = value; }
+ }
+
+ private T FieldValue(string columnName)
+ {
+ object value = this[columnName];
+ if (value == DBNull.Value)
+ return default(T);
+ return (T)value;
+ }
+ }
+ }
+
+ namespace DataSet1TableAdapters
+ {
+ public class PlaylistTableAdapter
+ {
+ private static string PlaylistFile
+ {
+ get
+ {
+ return Path.Combine(
+ Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
+ "CUEPlayer",
+ "playlist.xml");
+ }
+ }
+
+ public int Fill(DataSet1.PlaylistDataTable table)
+ {
+ table.Clear();
+ if (!File.Exists(PlaylistFile))
+ return 0;
+
+ DataSet dataSet = new DataSet();
+ dataSet.ReadXml(PlaylistFile);
+ if (!dataSet.Tables.Contains("Playlist"))
+ return 0;
+
+ int count = 0;
+ foreach (DataRow row in dataSet.Tables["Playlist"].Rows)
+ {
+ DataSet1.PlaylistRow playlistRow = table.AddPlaylistRow(
+ ReadString(row, "path"),
+ ReadString(row, "artist"),
+ ReadString(row, "title"),
+ ReadString(row, "album"),
+ ReadInt32(row, "length"),
+ ReadInt32(row, "track"));
+ if (dataSet.Tables["Playlist"].Columns.Contains("id"))
+ playlistRow.id = ReadInt32(row, "id");
+ count++;
+ }
+ table.AcceptChanges();
+ return count;
+ }
+
+ public int Update(DataSet1.PlaylistDataTable table)
+ {
+ string directory = Path.GetDirectoryName(PlaylistFile);
+ if (!Directory.Exists(directory))
+ Directory.CreateDirectory(directory);
+
+ DataTable copy = table.Clone();
+ foreach (DataRow row in table.Rows)
+ {
+ if (row.RowState == DataRowState.Deleted)
+ continue;
+ DataRow newRow = copy.NewRow();
+ foreach (DataColumn column in table.Columns)
+ newRow[column.ColumnName] = row[column, DataRowVersion.Current];
+ copy.Rows.Add(newRow);
+ }
+
+ DataSet dataSet = new DataSet("DataSet1");
+ dataSet.Tables.Add(copy);
+ dataSet.WriteXml(PlaylistFile, XmlWriteMode.WriteSchema);
+ int count = copy.Rows.Count;
+ table.AcceptChanges();
+ return count;
+ }
+
+ private static string ReadString(DataRow row, string columnName)
+ {
+ if (!row.Table.Columns.Contains(columnName) || row[columnName] == DBNull.Value)
+ return null;
+ return Convert.ToString(row[columnName]);
+ }
+
+ private static int ReadInt32(DataRow row, string columnName)
+ {
+ if (!row.Table.Columns.Contains(columnName) || row[columnName] == DBNull.Value)
+ return 0;
+ return Convert.ToInt32(row[columnName]);
+ }
+ }
+ }
+}
diff --git a/CUEPlayer/Deck.cs b/CUEPlayer/Deck.cs
index 1ec726218..d001a4392 100644
--- a/CUEPlayer/Deck.cs
+++ b/CUEPlayer/Deck.cs
@@ -1,11 +1,12 @@
using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Threading;
-using System.Windows.Forms;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms;
using CUETools.Codecs;
using CUETools.Processor;
using CUETools.DSP.Mixer;
@@ -73,7 +74,7 @@ internal void UpdateDeck()
textBoxAlbum.Text = playingRow < 0 ? "" : dataSet.Playlist[playingRow].album;
textBoxTitle.Text = playingRow < 0 ? "" : dataSet.Playlist[playingRow].title;
textBoxDuration.Text = "";
- pictureBox.Image = playingCue != null && playingCue.Cover != null ? playingCue.Cover : pictureBox.InitialImage;
+ pictureBox.Image = GetCoverImage(playingCue) ?? pictureBox.InitialImage;
if (nextDeck != null && nextDeck.playingSource == null && playingRow >= 0 && playingRow < dataSet.Playlist.Rows.Count - 1)
{
@@ -88,8 +89,8 @@ internal void UpdateDeck()
mediaSlider.Value = (int)(playingSource.Position - playingStart);
}
- private void mediaSliderA_ValueChanged(object sender, EventArgs e)
- {
+ private void mediaSliderA_ValueChanged(object sender, EventArgs e)
+ {
if (mediaSlider.Maximum == 1) return;
TimeSpan len1 = TimeSpan.FromSeconds(mediaSlider.Maximum / 44100.0);
TimeSpan len2 = TimeSpan.FromSeconds(mediaSlider.Value / 44100.0);
@@ -97,10 +98,24 @@ private void mediaSliderA_ValueChanged(object sender, EventArgs e)
string lenStr2 = string.Format("{0:d}.{1:d2}:{2:d2}:{3:d2}", len2.Days, len2.Hours, len2.Minutes, len2.Seconds).TrimStart('0', ':', '.');
lenStr1 = "0:00".Substring(0, Math.Max(0, 4 - lenStr1.Length)) + lenStr1;
lenStr2 = "0:00".Substring(0, Math.Max(0, 4 - lenStr2.Length)) + lenStr2;
- textBoxDuration.Text = lenStr2 + " / " + lenStr1;
- }
-
- private int seekTo = -1;
+ textBoxDuration.Text = lenStr2 + " / " + lenStr1;
+ }
+
+ private static Image GetCoverImage(CUESheet cueSheet)
+ {
+ if (cueSheet == null || cueSheet.AlbumArt == null)
+ return null;
+ var picture = cueSheet.AlbumArt.Find(x => x.Type == TagLib.PictureType.FrontCover) ??
+ cueSheet.AlbumArt.Find(x => x.Type != TagLib.PictureType.NotAPicture);
+ if (picture == null)
+ return null;
+ using (MemoryStream imageStream = new MemoryStream(picture.Data.Data, 0, picture.Data.Count))
+ try { return Image.FromStream(imageStream); }
+ catch { }
+ return null;
+ }
+
+ private int seekTo = -1;
private bool stopNow = false;
private void PlayThread()
diff --git a/CUEPlayer/Properties/Resources.Designer.cs b/CUEPlayer/Properties/Resources.Designer.cs
index 5d5c3efe9..c27069a65 100644
--- a/CUEPlayer/Properties/Resources.Designer.cs
+++ b/CUEPlayer/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace CUEPlayer.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/CUEPlayer/Properties/Settings.Designer.cs b/CUEPlayer/Properties/Settings.Designer.cs
index ab8462056..3500a56d0 100644
--- a/CUEPlayer/Properties/Settings.Designer.cs
+++ b/CUEPlayer/Properties/Settings.Designer.cs
@@ -12,7 +12,7 @@ namespace CUEPlayer.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
diff --git a/CUEPlayer/app.config b/CUEPlayer/app.config
index 26cdf92ef..b22c675f1 100644
--- a/CUEPlayer/app.config
+++ b/CUEPlayer/app.config
@@ -11,6 +11,6 @@
-
+
diff --git a/CUERipper.WPF/CUERipper.WPF.csproj b/CUERipper.WPF/CUERipper.WPF.csproj
index ffdd9999c..f51ac2d4d 100644
--- a/CUERipper.WPF/CUERipper.WPF.csproj
+++ b/CUERipper.WPF/CUERipper.WPF.csproj
@@ -1,159 +1,39 @@
-
-
+
+
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {2D8D7A03-DFFA-44EF-9299-8BB56D122245}
+ net10.0-windows
WinExe
- Properties
- CUERipper.WPF
CUERipper.WPF
- v4.7
- 512
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 4
-
-
-
-
-
-
- 3.5
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- false
+ CUERipper.WPF
+ 7.0
+ true
+ true
+ false
+ ..\bin\$(Configuration)\
+
-
- 3.0
-
-
- 3.0
-
-
-
- 3.5
-
-
-
-
- 3.5
-
-
- 3.5
-
-
-
-
+
+
+
+
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
- App.xaml
- Code
-
-
- Window1.xaml
- Code
-
+
+
+
+
+
-
- Code
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
+
ResXFileCodeGenerator
Resources.Designer.cs
-
-
+
SettingsSingleFileGenerator
Settings.Designer.cs
-
-
-
-
- {CA4D64E6-6544-4A29-8BA5-7DB08D50D072}
- CUEControls
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
-
-
- {4911BD82-49EF-4858-8B51-5394F86739A4}
- CUETools.Processor
-
-
-
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
-
-
\ No newline at end of file
+
+
diff --git a/CUERipper.WPF/Properties/Resources.Designer.cs b/CUERipper.WPF/Properties/Resources.Designer.cs
index 4fd0e16b7..6f4dfdb91 100644
--- a/CUERipper.WPF/Properties/Resources.Designer.cs
+++ b/CUERipper.WPF/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace CUERipper.WPF.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/CUERipper.WPF/Properties/Settings.Designer.cs b/CUERipper.WPF/Properties/Settings.Designer.cs
index 6269b8287..008c3faaa 100644
--- a/CUERipper.WPF/Properties/Settings.Designer.cs
+++ b/CUERipper.WPF/Properties/Settings.Designer.cs
@@ -12,7 +12,7 @@ namespace CUERipper.WPF.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
diff --git a/CUERipper.WPF/app.config b/CUERipper.WPF/app.config
index 545e8d3eb..220b02fab 100644
--- a/CUERipper.WPF/app.config
+++ b/CUERipper.WPF/app.config
@@ -1,6 +1,6 @@
-
+
diff --git a/CUERipper/CUERipper.csproj b/CUERipper/CUERipper.csproj
index 0fe5a3cfe..d9e2c08b9 100644
--- a/CUERipper/CUERipper.csproj
+++ b/CUERipper/CUERipper.csproj
@@ -1,278 +1,44 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {39B43BBB-BAFC-4D85-9BEA-3BCB7EFED89C}
- WinExe
- Properties
- CUERipper
- CUERipper
-
-
- 3.5
-
-
- cue2.ico
- F89503BB83CA42A647C506D67956D6F32C1C6E7E
- CUERipper_TemporaryKey.pfx
- false
- false
- true
- false
-
-
- LocalIntranet
- Properties\app.manifest
- v4.7
- publish\
- true
- Web
- true
- Background
- 7
- Days
- false
- false
- true
- http://www.cuetools.net/install/cueripper/
- http://www.cuetools.net/
- CUERipper
- Gregory S. Chudov
- true
- index.html
- 0
- 1.0.0.%2a
- false
- true
- true
-
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
- true
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- AllRules.ruleset
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form
-
-
- frmCUERipper.cs
-
-
- Form
-
-
- frmFreedbSubmit.cs
-
-
- Form
-
-
- Options.cs
-
-
-
-
- frmCUERipper.cs
-
-
- Designer
- frmCUERipper.cs
-
-
- frmCUERipper.cs
-
-
- frmFreedbSubmit.cs
-
-
- frmFreedbSubmit.cs
-
-
- frmFreedbSubmit.cs
-
-
- Options.cs
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
-
- True
- Resources.resx
- True
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
-
-
- {CA4D64E6-6544-4A29-8BA5-7DB08D50D072}
- CUEControls
-
-
- {5802C7E9-157E-4124-946D-70B5AE48A5A1}
- CUETools.AccurateRip
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
-
-
- {c36efaa5-4f81-4a29-800d-ba866ff13bc8}
- CUETools.CTDB.Types
-
-
- {AA2A9A7E-45FB-4632-AD85-85B0E556F818}
- CUETools.CTDB
-
-
- {4911BD82-49EF-4858-8B51-5394F86739A4}
- CUETools.Processor
-
-
- {D2700165-3E77-4B28-928D-551F5FC11954}
- CUETools.Ripper
-
-
- {5ADCFD6D-BFEA-4B10-BB45-9083BBB56AF4}
- Freedb
-
-
- {8DD1E84B-0B03-4C0B-9B42-1E49F75E7CB1}
- ProgressODoom
-
-
- {1219a514-d3fa-40db-bbb2-92ce05e35839}
- TaglibSharp
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 2.0 %28x86%29
- true
-
-
- False
- .NET Framework 3.0 %28x86%29
- false
-
-
- False
- .NET Framework 3.5
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- Visual C++ Runtime Libraries %28x64%29
- true
-
-
- False
- Visual C++ Runtime Libraries %28x86%29
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ 2.2.6.0
+ WinExe
+ CUERipper
+ CUERipper
+ cue2.ico
+ Properties\app.manifest
+ 7.0
+ true
+ false
+ true
+ $(NoWarn);WFO1000
+ ..\bin\$(Configuration)\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
diff --git a/CUERipper/Program.cs b/CUERipper/Program.cs
index 0e56cf1e5..69efe3e50 100644
--- a/CUERipper/Program.cs
+++ b/CUERipper/Program.cs
@@ -1,9 +1,8 @@
-using System;
-using System.Deployment.Application;
-using System.Globalization;
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.Windows.Forms;
+using System;
+using System.Globalization;
+using System.Runtime.InteropServices;
+using System.Threading;
+using System.Windows.Forms;
using CUETools.Processor;
using CUETools.Processor.Settings;
@@ -31,26 +30,10 @@ static void Main()
Application.Run(new frmCUERipper());
}
- static void GetSatelliteAssemblies(string groupName)
- {
- if (ApplicationDeployment.IsNetworkDeployed)
- {
- ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment;
-
- if (deploy.IsFirstRun)
- {
- try
- {
- deploy.DownloadFileGroup(groupName);
- }
- catch (DeploymentException)
- {
- // Log error. Do not report this error to the user, because a satellite
- // assembly may not exist if the user's culture and the application's
- // default culture match.
- }
- }
- }
- }
- }
-}
\ No newline at end of file
+ static void GetSatelliteAssemblies(string groupName)
+ {
+ // System.Deployment.Application is not available on .NET 10.
+ // Optional plugin file groups must be included by the publish/package step.
+ }
+ }
+}
diff --git a/CUERipper/Properties/Resources.Designer.cs b/CUERipper/Properties/Resources.Designer.cs
index 18cec7edc..8b296b685 100644
--- a/CUERipper/Properties/Resources.Designer.cs
+++ b/CUERipper/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace CUERipper.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/CUERipper/Properties/Settings.Designer.cs b/CUERipper/Properties/Settings.Designer.cs
index ec1ef4e54..696701e66 100644
--- a/CUERipper/Properties/Settings.Designer.cs
+++ b/CUERipper/Properties/Settings.Designer.cs
@@ -12,7 +12,7 @@ namespace CUERipper.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
diff --git a/CUERipper/app.config b/CUERipper/app.config
index b979734e5..8f8552c04 100644
--- a/CUERipper/app.config
+++ b/CUERipper/app.config
@@ -8,6 +8,6 @@
-
+
diff --git a/CUETools.ALACEnc/CUETools.ALACEnc.csproj b/CUETools.ALACEnc/CUETools.ALACEnc.csproj
index e6288638d..b5645b86a 100644
--- a/CUETools.ALACEnc/CUETools.ALACEnc.csproj
+++ b/CUETools.ALACEnc/CUETools.ALACEnc.csproj
@@ -1,9 +1,7 @@
- net47;net20;netcoreapp2.0
- false
- 2.0.9
+ net10.0
2.2.6.0
CUETools.ALACEnc
CUETools.ALACEnc
diff --git a/CUETools.ARCUE/CUETools.ARCUE.csproj b/CUETools.ARCUE/CUETools.ARCUE.csproj
index 1075c0667..e96771d2f 100644
--- a/CUETools.ARCUE/CUETools.ARCUE.csproj
+++ b/CUETools.ARCUE/CUETools.ARCUE.csproj
@@ -1,9 +1,7 @@
- net47;netcoreapp2.0
- false
- 2.0.9
+ net10.0
2.2.6.0
CUETools.ARCUE
CUETools.ARCUE
diff --git a/CUETools.AccurateRip/CUETools.AccurateRip.csproj b/CUETools.AccurateRip/CUETools.AccurateRip.csproj
index fc2763575..f68e72078 100644
--- a/CUETools.AccurateRip/CUETools.AccurateRip.csproj
+++ b/CUETools.AccurateRip/CUETools.AccurateRip.csproj
@@ -1,7 +1,7 @@
- net20;net47;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.AccurateRip
CUETools.AccurateRip
diff --git a/CUETools.CDImage/CUETools.CDImage.csproj b/CUETools.CDImage/CUETools.CDImage.csproj
index c103a5dca..1e49300c7 100644
--- a/CUETools.CDImage/CUETools.CDImage.csproj
+++ b/CUETools.CDImage/CUETools.CDImage.csproj
@@ -1,7 +1,7 @@
- net20;net47;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.CDImage
CUETools.CDImage
diff --git a/CUETools.CLParity/CLParity.cs b/CUETools.CLParity/CLParity.cs
index 6a56349f9..218708cf4 100644
--- a/CUETools.CLParity/CLParity.cs
+++ b/CUETools.CLParity/CLParity.cs
@@ -111,7 +111,7 @@ public class CLParityWriter : IAudioDest
bool inited = false;
OpenCLManager OCLMan;
- Program openCLProgram;
+ CLProgram openCLProgram;
CLParityTask task1;
CLParityTask task2;
@@ -123,6 +123,7 @@ public class CLParityWriter : IAudioDest
public CLParityWriter(string path, Stream IO, AudioPCMConfig pcm)
{
_pcm = pcm;
+ _encoderSettings = new CUETools.Codecs.WAV.EncoderSettings(pcm);
if (pcm.BitsPerSample != 16)
throw new Exception("Bits per sample must be 16.");
if (pcm.ChannelCount != 2)
@@ -137,6 +138,7 @@ public CLParityWriter(string path, AudioPCMConfig pcm)
}
internal CLParitySettings _settings = new CLParitySettings();
+ private readonly IAudioEncoderSettings _encoderSettings;
public object Settings
{
@@ -152,6 +154,8 @@ public object Settings
}
}
+ IAudioEncoderSettings IAudioDest.Settings => _encoderSettings;
+
//[DllImport("kernel32.dll")]
//static extern bool GetThreadTimes(IntPtr hThread, out long lpCreationTime, out long lpExitTime, out long lpKernelTime, out long lpUserTime);
//[DllImport("kernel32.dll")]
@@ -388,7 +392,7 @@ public unsafe void do_output_frames(int strideCount)
internal class CLParityTask
{
- Program openCLProgram;
+ CLProgram openCLProgram;
public CommandQueue openCLCQ;
public Kernel reedSolomonInit;
public Kernel reedSolomonInitGx;
@@ -432,7 +436,7 @@ internal class CLParityTask
public CLParityWriter writer;
public bool UseMappedMemory = false;
- unsafe public CLParityTask(Program _openCLProgram, CLParityWriter writer, int groupSize, int npar, int stride, int maxStridesCount)
+ unsafe public CLParityTask(CLProgram _openCLProgram, CLParityWriter writer, int groupSize, int npar, int stride, int maxStridesCount)
{
this.UseMappedMemory = writer._settings.MappedMemory || writer._settings.DeviceType == OpenCLDeviceType.CPU;
this.groupSize = groupSize;
@@ -629,7 +633,6 @@ internal unsafe void EnqueueKernels()
}
}
-#if LKJLKJLJK
public static class OpenCLExtensions
{
public static void SetArgs(this Kernel kernel, params object[] args)
@@ -660,5 +663,4 @@ public static void EnqueueNDRangeKernel(this CommandQueue queue, Kernel kernel,
queue.EnqueueNDRangeKernel(kernel, 2, null, new long[] { localSizeX * globalSizeX, localSizeY * globalSizeY }, new long[] { localSizeX, localSizeY });
}
}
-#endif
}
diff --git a/CUETools.CLParity/CUETools.CLParity.csproj b/CUETools.CLParity/CUETools.CLParity.csproj
index 7c131fcc9..363bc7022 100644
--- a/CUETools.CLParity/CUETools.CLParity.csproj
+++ b/CUETools.CLParity/CUETools.CLParity.csproj
@@ -1,128 +1,37 @@
-
-
+
+
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {D41FEFF9-9D43-4049-BF9B-B13D9AC7E192}
+ net10.0-windows
+ 2.2.6.0
Library
- Properties
- CUETools.CLParity
CUETools.CLParity
-
-
- 3.5
-
-
- v4.7
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\plugins\net47\
- DEBUG;TRACE
- prompt
- 4
- true
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\plugins\net47\
- TRACE
- prompt
- 4
+ CUETools.CLParity
+ 7.0
+ true
true
- AllRules.ruleset
+ false
+ $(NoWarn);WFO1000
+ ..\bin\$(Configuration)\$(TargetFramework)\plugins\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
-
-
- False
- ..\ThirdParty\OpenCLNet.dll
-
-
-
-
-
-
-
-
-
- True
- True
- Resources.resx
-
-
-
-
- {082D6B9E-326E-4D15-9798-EDAE9EDE70A6}
- CUETools.Codecs.Flake
- False
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
+
+
+
False
-
+
+
-
- PreserveNewest
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
+
+
+
+
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
+
+ PreserveNewest
+
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
diff --git a/CUETools.CLParity/Properties/Resources.Designer.cs b/CUETools.CLParity/Properties/Resources.Designer.cs
index 39b66af0a..baf61d06c 100644
--- a/CUETools.CLParity/Properties/Resources.Designer.cs
+++ b/CUETools.CLParity/Properties/Resources.Designer.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.18033
+// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -19,7 +19,7 @@ namespace CUETools.CLParity.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/CUETools.CTDB.Converter/CUETools.CTDB.Converter.csproj b/CUETools.CTDB.Converter/CUETools.CTDB.Converter.csproj
index cc91ce79d..b1f7938d5 100644
--- a/CUETools.CTDB.Converter/CUETools.CTDB.Converter.csproj
+++ b/CUETools.CTDB.Converter/CUETools.CTDB.Converter.csproj
@@ -1,9 +1,7 @@
- net47;net20;netcoreapp2.0
- false
- 2.0.9
+ net10.0
2.2.6.0
CUETools.CTDB.Converter
CUETools.CTDB.Converter
diff --git a/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj b/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj
index 46037b6dd..91a6644a6 100644
--- a/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj
+++ b/CUETools.CTDB.EACPlugin/CUETools.CTDB.EACPlugin.csproj
@@ -1,180 +1,32 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {816D964C-9772-46C5-AF1D-49E8C78A1E7C}
- Library
- Properties
- CUETools.CTDB.EACPlugin
- CUETools.CTDB.EACPlugin
- v2.0
- 512
-
-
- 3.5
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\interop\EAC\
- DEBUG;TRACE
- prompt
- 4
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\interop\EAC\
- TRACE
- prompt
- 4
- AllRules.ruleset
-
-
-
- Form
-
-
- FormSubmitParity.cs
-
-
- Form
-
-
- FormMetadata.cs
-
-
- Component
-
-
- ImagePreview.cs
-
-
-
-
-
- Form
-
-
- Options.cs
-
-
-
- True
- True
- Resources.resx
-
-
-
-
- FormSubmitParity.cs
-
-
- FormMetadata.cs
-
-
- ImagePreview.cs
-
-
- Options.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
-
-
- .\Interop.HelperFunctionsLib.dll
- True
-
-
-
-
-
-
-
-
- {5802c7e9-157e-4124-946d-70b5ae48a5a1}
- CUETools.AccurateRip
-
-
- {1dd41038-d885-46c5-8dde-e0b82f066584}
- CUETools.CDImage
-
-
- {6458a13a-30ef-45a9-9d58-e5031b17bee2}
- CUETools.Codecs
-
-
- {c36efaa5-4f81-4a29-800d-ba866ff13bc8}
- CUETools.CTDB.Types
-
-
- {aa2a9a7e-45fb-4632-ad85-85b0e556f818}
- CUETools.CTDB
-
-
- {eceb839c-171b-4535-958f-9899310a0342}
- CUETools.Parity
-
-
-
-
-
+
+
+
+ net10.0-windows
+ Library
+ CUETools.CTDB.EACPlugin
+ CUETools.CTDB.EACPlugin
+ true
+ false
+ $(NoWarn);WFO1000
+ ..\bin\$(Configuration)\$(TargetFramework)\interop\EAC\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
+
+
+
+
+ .\Interop.HelperFunctionsLib.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CUETools.CTDB.Types/CUETools.CTDB.Types.csproj b/CUETools.CTDB.Types/CUETools.CTDB.Types.csproj
index 409d6327c..e7c1ed0ce 100644
--- a/CUETools.CTDB.Types/CUETools.CTDB.Types.csproj
+++ b/CUETools.CTDB.Types/CUETools.CTDB.Types.csproj
@@ -1,7 +1,7 @@
- net20;net47;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.CTDB.Types
CUETools.CTDB
diff --git a/CUETools.CTDB/CUETools.CTDB.csproj b/CUETools.CTDB/CUETools.CTDB.csproj
index 59df590f6..62d6975bb 100644
--- a/CUETools.CTDB/CUETools.CTDB.csproj
+++ b/CUETools.CTDB/CUETools.CTDB.csproj
@@ -1,7 +1,7 @@
- net20;net47;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.CTDB
CUETools.CTDB
@@ -22,15 +22,9 @@
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/CUETools.CTDB/CUEToolsDB.cs b/CUETools.CTDB/CUEToolsDB.cs
index c8b0dc3e1..06a13c18d 100644
--- a/CUETools.CTDB/CUEToolsDB.cs
+++ b/CUETools.CTDB/CUEToolsDB.cs
@@ -296,7 +296,7 @@ public static string GetUUID()
#else
uuidInfo = new DeviceIdBuilder()
.AddMachineName()
-#if NET47
+#if NET48
.AddProcessorId()
.AddMotherboardSerialNumber()
#endif
diff --git a/CUETools.ChaptersToCue/CUETools.ChaptersToCue.csproj b/CUETools.ChaptersToCue/CUETools.ChaptersToCue.csproj
index 141d158f8..5c1f6f848 100644
--- a/CUETools.ChaptersToCue/CUETools.ChaptersToCue.csproj
+++ b/CUETools.ChaptersToCue/CUETools.ChaptersToCue.csproj
@@ -1,110 +1,20 @@
-
-
+
+
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {6ADBBF4B-AD3A-4782-A694-18662196780B}
+ net10.0
Exe
- Properties
- CUETools.ChaptersToCue
CUETools.ChaptersToCue
-
-
- 3.5
-
-
- v4.7
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- AllRules.ruleset
+ CUETools.ChaptersToCue
+ false
+ ..\bin\$(Configuration)\
+
-
-
-
-
-
-
-
-
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
-
-
- {c36efaa5-4f81-4a29-800d-ba866ff13bc8}
- CUETools.CTDB.Types
-
-
- {AA2A9A7E-45FB-4632-AD85-85B0E556F818}
- CUETools.CTDB
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
-
-
- {1219a514-d3fa-40db-bbb2-92ce05e35839}
- TaglibSharp
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
+
+
+
+
+
-
-
-
\ No newline at end of file
+
+
diff --git a/CUETools.Codecs.ALAC/CUETools.Codecs.ALAC.csproj b/CUETools.Codecs.ALAC/CUETools.Codecs.ALAC.csproj
index effe2f82e..18600e1e6 100644
--- a/CUETools.Codecs.ALAC/CUETools.Codecs.ALAC.csproj
+++ b/CUETools.Codecs.ALAC/CUETools.Codecs.ALAC.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.ALAC
CUETools.Codecs
diff --git a/CUETools.Codecs.CoreAudio/CUETools.Codecs.CoreAudio.csproj b/CUETools.Codecs.CoreAudio/CUETools.Codecs.CoreAudio.csproj
index 94861db06..53edbdf33 100644
--- a/CUETools.Codecs.CoreAudio/CUETools.Codecs.CoreAudio.csproj
+++ b/CUETools.Codecs.CoreAudio/CUETools.Codecs.CoreAudio.csproj
@@ -1,7 +1,7 @@
- net47;net20
+ netstandard2.1
2.2.6.0
CUETools.Codecs.CoreAudio
CUETools.Codecs.CoreAudio
diff --git a/CUETools.Codecs.DirectSound/CUETools.Codecs.DirectSound.csproj b/CUETools.Codecs.DirectSound/CUETools.Codecs.DirectSound.csproj
index 84fd72b2d..d63d3447e 100644
--- a/CUETools.Codecs.DirectSound/CUETools.Codecs.DirectSound.csproj
+++ b/CUETools.Codecs.DirectSound/CUETools.Codecs.DirectSound.csproj
@@ -1,99 +1,29 @@
-
-
+
+
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {5A9FB016-6388-475D-AB33-6F86AD49FDAD}
+ net10.0-windows
+ 1.0.0.0
Library
- Properties
- CUETools.Codecs.DirectSound
CUETools.Codecs.DirectSound
- v4.7
- 512
-
-
-
-
- 3.5
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- AllRules.ruleset
+ CUETools.Codecs.DirectSound
+ 7.0
+ true
+ false
+ $(NoWarn);WFO1000
+ ..\bin\$(Configuration)\$(TargetFramework)\plugins\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
-
-
- False
-
-
-
-
-
-
-
-
-
-
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
+
+
+
+ False
-
+
+
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
+
+
-
-
-
\ No newline at end of file
+
+
diff --git a/CUETools.Codecs.DirectSound/DirectSoundOut.cs b/CUETools.Codecs.DirectSound/DirectSoundOut.cs
index 2ed8e3ca7..2ad9e50c2 100644
--- a/CUETools.Codecs.DirectSound/DirectSoundOut.cs
+++ b/CUETools.Codecs.DirectSound/DirectSoundOut.cs
@@ -1,297 +1,77 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.IO;
-using System.Threading;
+using System;
using System.Windows.Forms;
-using Microsoft.DirectX;
-using Microsoft.DirectX.DirectSound;
+using CUETools.Codecs.CoreAudio;
+using NAudio.CoreAudioApi;
namespace CUETools.Codecs.DirectSound
{
- public class DirectSoundOut : IWavePlayer
- {
- private Device dSound;
- private WaveFormat format;// = new WaveFormat();
- private BufferDescription description = new BufferDescription();
- private SecondaryBuffer secondaryBuffer;
- private Notify notify;
- private MemoryStream pcmStream;
- private int SecBufByteSize;
- private AudioEncoderSettings m_settings;
- PlaybackState playbackState = PlaybackState.Stopped;
-
- ///
- /// Playback Stopped
- ///
- public event EventHandler PlaybackStopped;
-
- AutoResetEvent
- SecBufNotifyAtBegin = new AutoResetEvent(false),
- SecBufNotifyAtOneThird = new AutoResetEvent(false),
- SecBufNotifyAtTwoThirds = new AutoResetEvent(false);
- WaitHandle[] SecBufWaitHandles;
-
- public DirectSoundOut(Control owner, AudioPCMConfig pcm, int delay)
- {
- this.m_settings = new AudioEncoderSettings(pcm);
-
- //buffer = new CyclicBuffer(44100*4/10);
- //output = new CycilcBufferOutputStream(buffer);
- //input = new CycilcBufferInputStream(buffer);
-
- dSound = new Device();
- dSound.SetCooperativeLevel(owner, CooperativeLevel.Priority);
- format.AverageBytesPerSecond = pcm.SampleRate * pcm.BlockAlign;
- format.BitsPerSample = (short)pcm.BitsPerSample;
- format.BlockAlign = (short)pcm.BlockAlign;
- format.Channels = (short)pcm.ChannelCount;
- format.SamplesPerSecond = pcm.SampleRate;
- format.FormatTag = WaveFormatTag.Pcm;
- SecBufByteSize = delay * pcm.SampleRate * pcm.BlockAlign / 1000;
- description.Format = format;
- description.BufferBytes = SecBufByteSize;
- description.CanGetCurrentPosition = true;
- description.ControlPositionNotify = true;
- //description.ControlVolume = true;
- description.GlobalFocus = true;
- secondaryBuffer = new SecondaryBuffer(description, dSound);
- //secondaryBuffer.Volume = 100;
-
- notify = new Notify(secondaryBuffer);
- BufferPositionNotify[] bufferPositions = new BufferPositionNotify[3];
- bufferPositions[0].Offset = 0;
- bufferPositions[0].EventNotifyHandle = SecBufNotifyAtBegin.Handle;
- bufferPositions[1].Offset = SecBufByteSize / 3;
- bufferPositions[1].EventNotifyHandle = SecBufNotifyAtOneThird.Handle;
- bufferPositions[2].Offset = 2 * SecBufByteSize / 3;
- bufferPositions[2].EventNotifyHandle = SecBufNotifyAtTwoThirds.Handle;
- notify.SetNotificationPositions(bufferPositions);
- pcmStream = new MemoryStream(SecBufByteSize);
-
- SecBufWaitHandles = new WaitHandle[] { SecBufNotifyAtBegin, SecBufNotifyAtOneThird, SecBufNotifyAtTwoThirds };
-
- //wavoutput = new WAVWriter("", output, pcm);
- }
-
- ///
- /// Volume
- ///
- public float Volume
- {
- get
- {
- return 1.0f;
- }
- set
- {
- if (value != 1.0f)
- {
- throw new NotImplementedException();
- }
- }
- }
-
- //int SecBufNextWritePosition = 0;
- //bool SecBufInitialLoad = false;
-
- bool playing = false;
- public void Write(AudioBuffer src)
- {
- //wavoutput.Write(src);
-
- pcmStream.SetLength(0);
- pcmStream.Write(src.Bytes, 0, src.ByteLength);
- pcmStream.Position = 0;
- //pcmStream.Position = 0;
-
- //while (true)
- //{
- // if (SecBufInitialLoad)
- // {
- // int count = Math.Min(src.ByteLength, SecBufByteSize - SecBufNextWritePosition);
- // if (count > 0)
- // {
- // secondaryBuffer.Write(SecBufNextWritePosition, pcmStream, count, LockFlag.None);
- // SecBufNextWritePosition += count;
- // pcmStream.Position += count;
- // }
-
- // if (SecBufByteSize == SecBufNextWritePosition)
- // {
- // // Finished filling the buffer
- // SecBufInitialLoad = false;
- // SecBufNextWritePosition = 0;
-
- // // So start the playback in its own thread
- // secondaryBuffer.Play(0, BufferPlayFlags.Looping);
-
- // // Yield rest of timeslice so playback can
- // // start right away.
- // Thread.Sleep(0);
- // }
- // else
- // {
- // continue; // Get more PCM data
- // }
- // }
-
- // Exhaust the current PCM data by writing the data into secondaryBuffer
- while (pcmStream.Position < pcmStream.Length)
- {
- int PlayPosition, WritePosition;
-
- secondaryBuffer.GetCurrentPosition(out PlayPosition, out WritePosition);
-
- int WriteCount = (int)Math.Min(
- (SecBufByteSize + PlayPosition - WritePosition) % SecBufByteSize,
- pcmStream.Length - pcmStream.Position);
-
- if (WriteCount > 0)
- {
- secondaryBuffer.Write(
- WritePosition,
- pcmStream,
- WriteCount,
- LockFlag.None);
- pcmStream.Position += WriteCount;
- if (!playing)
- {
- secondaryBuffer.Play(0, 0);
- playing = true;
- }
- }
- else
- {
- WaitHandle.WaitAny(SecBufWaitHandles, new TimeSpan(0, 0, 5), true);
- }
- }
- }
-
- ///
- /// Begin Playback
- ///
- public void Play()
- {
- switch (playbackState)
- {
- case PlaybackState.Playing:
- return;
- case PlaybackState.Paused:
- playbackState = PlaybackState.Playing;
- return;
- case PlaybackState.Stopped:
- playbackState = PlaybackState.Playing;
- //playThread = new Thread(new ThreadStart(PlayThread));
- //playThread.Priority = ThreadPriority.Highest;
- //playThread.IsBackground = true;
- //playThread.Name = "Pro Audio";
- //playThread.Start();
- return;
- }
- }
-
- ///
- /// Stop playback and flush buffers
- ///
- public void Stop()
- {
- if (playbackState != PlaybackState.Stopped)
- {
- playbackState = PlaybackState.Stopped;
- //if (frameEventWaitHandle != null)
- // frameEventWaitHandle.Set();
- //playThread.Join();
- //playThread = null;
- //ReleaseBuffer(readBuffers[0], false, 0);
- //ReleaseBuffer(readBuffers[1], false, 0);
- //active = null;
- //active_offset = 0;
- }
- }
-
- ///
- /// Stop playback without flushing buffers
- ///
- public void Pause()
- {
- if (playbackState == PlaybackState.Playing)
- {
- playbackState = PlaybackState.Paused;
- }
- //if (frameEventWaitHandle != null)
- // frameEventWaitHandle.Set();
- }
-
- ///
- /// Playback State
- ///
- public PlaybackState PlaybackState
- {
- get { return playbackState; }
- }
-
- public void Close()
- {
- if (secondaryBuffer != null)
- {
- secondaryBuffer.Dispose();
- secondaryBuffer = null;
- }
- if (dSound != null)
- {
- dSound.Dispose();
- dSound = null;
- }
- //wavoutput.Close();
- }
-
- public void Delete()
- {
- Close();
- }
-
- #region IAudioDest Members
-
- public long Position
- {
- get
- {
- return 0;
- }
- }
-
- public long FinalSampleCount
- {
- set { ; }
- }
-
- public object Settings
- {
- get
- {
- return m_settings;
- }
- }
-
- public string Path { get { return null; } }
-
- #endregion
-
- #region IDisposable Members
-
- ///
- /// Dispose
- ///
- public void Dispose()
- {
- //if (audioClient != null)
- {
- Stop();
- }
-
- }
-
- #endregion
- }
+ public class DirectSoundOut : CUETools.Codecs.IWavePlayer
+ {
+ private readonly WasapiOut player;
+
+ public DirectSoundOut(Control owner, AudioPCMConfig pcm, int delay)
+ {
+ player = new WasapiOut(WasapiOut.GetDefaultAudioEndpoint(), AudioClientShareMode.Shared, true, delay, pcm);
+ }
+
+ public event EventHandler PlaybackStopped
+ {
+ add { player.PlaybackStopped += value; }
+ remove { player.PlaybackStopped -= value; }
+ }
+
+ public float Volume
+ {
+ get { return player.Volume; }
+ set { player.Volume = value; }
+ }
+
+ public CUETools.Codecs.PlaybackState PlaybackState => (CUETools.Codecs.PlaybackState)player.PlaybackState;
+
+ public long Position => player.Position;
+
+ public long FinalSampleCount
+ {
+ set { player.FinalSampleCount = value; }
+ }
+
+ public IAudioEncoderSettings Settings => player.Settings;
+
+ public string Path => player.Path;
+
+ public void Write(AudioBuffer src)
+ {
+ player.Write(src);
+ }
+
+ public void Play()
+ {
+ player.Play();
+ }
+
+ public void Stop()
+ {
+ player.Stop();
+ }
+
+ public void Pause()
+ {
+ player.Pause();
+ }
+
+ public void Close()
+ {
+ player.Close();
+ }
+
+ public void Delete()
+ {
+ player.Delete();
+ }
+
+ public void Dispose()
+ {
+ player.Dispose();
+ }
+ }
}
diff --git a/CUETools.Codecs.FLACCL/CUETools.Codecs.FLACCL.csproj b/CUETools.Codecs.FLACCL/CUETools.Codecs.FLACCL.csproj
index eef5c9144..fb605770a 100644
--- a/CUETools.Codecs.FLACCL/CUETools.Codecs.FLACCL.csproj
+++ b/CUETools.Codecs.FLACCL/CUETools.Codecs.FLACCL.csproj
@@ -1,131 +1,41 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {DFE55765-564C-4B8F-993B-A94C4D1C212E}
- Library
- Properties
- CUETools.Codecs.FLACCL
- CUETools.Codecs.FLACCL
-
-
- 3.5
-
-
- v4.7
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\net47\plugins\
- DEBUG;TRACE
- prompt
- 4
- true
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\plugins\
- TRACE
- prompt
- 4
- true
- AllRules.ruleset
-
-
-
-
-
-
-
-
-
-
- True
- True
- Resources.resx
-
-
-
-
- {082D6B9E-326E-4D15-9798-EDAE9EDE70A6}
- CUETools.Codecs.Flake
- False
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
- False
-
-
- {8373e3b2-16f0-4fd3-a13b-0b0248ffc228}
- OpenCLNet
-
-
-
-
- PreserveNewest
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ 2.2.6.0
+ Library
+ CUETools.Codecs.FLACCL
+ CUETools.Codecs.FLACCL
+ 7.0
+ true
+ true
+ false
+ $(NoWarn);WFO1000
+ ..\bin\$(Configuration)\$(TargetFramework)\plugins\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
diff --git a/CUETools.Codecs.FLACCL/Properties/Resources.Designer.cs b/CUETools.Codecs.FLACCL/Properties/Resources.Designer.cs
index b43ad8e85..6f341093c 100644
--- a/CUETools.Codecs.FLACCL/Properties/Resources.Designer.cs
+++ b/CUETools.Codecs.FLACCL/Properties/Resources.Designer.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.18033
+// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -19,7 +19,7 @@ namespace CUETools.Codecs.FLACCL.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/CUETools.Codecs.Flake/CUETools.Codecs.Flake.csproj b/CUETools.Codecs.Flake/CUETools.Codecs.Flake.csproj
index 3f1b647db..dc45658ec 100644
--- a/CUETools.Codecs.Flake/CUETools.Codecs.Flake.csproj
+++ b/CUETools.Codecs.Flake/CUETools.Codecs.Flake.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.Flake
CUETools.Codecs.Flake
diff --git a/CUETools.Codecs.HDCD/CUETools.Codecs.HDCD.csproj b/CUETools.Codecs.HDCD/CUETools.Codecs.HDCD.csproj
index 998621d09..d7acaccba 100644
--- a/CUETools.Codecs.HDCD/CUETools.Codecs.HDCD.csproj
+++ b/CUETools.Codecs.HDCD/CUETools.Codecs.HDCD.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.HDCD
CUETools.Codecs.HDCD
diff --git a/CUETools.Codecs.HDCD/HDCDDLL.cs b/CUETools.Codecs.HDCD/HDCDDLL.cs
index c0750fb8c..cac612ae4 100644
--- a/CUETools.Codecs.HDCD/HDCDDLL.cs
+++ b/CUETools.Codecs.HDCD/HDCDDLL.cs
@@ -53,7 +53,7 @@ static HDCDDLL()
var myFolder = System.IO.Path.GetDirectoryName(myPath);
var is64 = IntPtr.Size == 8;
var subfolder = is64 ? "x64" : "win32";
-#if NET47
+#if NET48
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(myFolder, subfolder, DllName + ".dll"));
#else
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(System.IO.Path.Combine(myFolder, subfolder), DllName + ".dll"));
diff --git a/CUETools.Codecs.Icecast/CUETools.Codecs.Icecast.csproj b/CUETools.Codecs.Icecast/CUETools.Codecs.Icecast.csproj
index 00c6d013a..219bf91f6 100644
--- a/CUETools.Codecs.Icecast/CUETools.Codecs.Icecast.csproj
+++ b/CUETools.Codecs.Icecast/CUETools.Codecs.Icecast.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.Icecast
CUETools.Codecs.Icecast
diff --git a/CUETools.Codecs.LossyWAV/CUETools.Codecs.LossyWAV.csproj b/CUETools.Codecs.LossyWAV/CUETools.Codecs.LossyWAV.csproj
index 43bcfaf0f..26b589703 100644
--- a/CUETools.Codecs.LossyWAV/CUETools.Codecs.LossyWAV.csproj
+++ b/CUETools.Codecs.LossyWAV/CUETools.Codecs.LossyWAV.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.LossyWAV
CUETools.Codecs.LossyWAV
diff --git a/CUETools.Codecs.MACLib/CUETools.Codecs.MACLib.csproj b/CUETools.Codecs.MACLib/CUETools.Codecs.MACLib.csproj
index ae90a69a0..936f0d38f 100644
--- a/CUETools.Codecs.MACLib/CUETools.Codecs.MACLib.csproj
+++ b/CUETools.Codecs.MACLib/CUETools.Codecs.MACLib.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.MACLib
CUETools.Codecs.MACLib
diff --git a/CUETools.Codecs.MACLib/MACLibDll.cs b/CUETools.Codecs.MACLib/MACLibDll.cs
index 30efa25e4..d5289c99c 100644
--- a/CUETools.Codecs.MACLib/MACLibDll.cs
+++ b/CUETools.Codecs.MACLib/MACLibDll.cs
@@ -72,7 +72,7 @@ static MACLibDll()
var myFolder = System.IO.Path.GetDirectoryName(myPath);
var is64 = IntPtr.Size == 8;
var subfolder = is64 ? "x64" : "win32";
-#if NET47
+#if NET48
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(myFolder, subfolder, DllName + ".dll"));
#else
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(System.IO.Path.Combine(myFolder, subfolder), DllName + ".dll"));
diff --git a/CUETools.Codecs.MPEG/CUETools.Codecs.MPEG.csproj b/CUETools.Codecs.MPEG/CUETools.Codecs.MPEG.csproj
index 473bb4f92..7d043cbdf 100644
--- a/CUETools.Codecs.MPEG/CUETools.Codecs.MPEG.csproj
+++ b/CUETools.Codecs.MPEG/CUETools.Codecs.MPEG.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.MPEG
CUETools.Codecs.MPEG
diff --git a/CUETools.Codecs.WMA/CUETools.Codecs.WMA.csproj b/CUETools.Codecs.WMA/CUETools.Codecs.WMA.csproj
index 11e5be0a8..2f0e88be5 100644
--- a/CUETools.Codecs.WMA/CUETools.Codecs.WMA.csproj
+++ b/CUETools.Codecs.WMA/CUETools.Codecs.WMA.csproj
@@ -1,7 +1,7 @@
- net47;net20
+ netstandard2.1
2.2.6.0
CUETools.Codecs.WMA
CUETools.Codecs.WMA
diff --git a/CUETools.Codecs.ffmpeg/CUETools.Codecs.ffmpeg.csproj b/CUETools.Codecs.ffmpeg/CUETools.Codecs.ffmpeg.csproj
index b8bad433f..b386b79f2 100644
--- a/CUETools.Codecs.ffmpeg/CUETools.Codecs.ffmpeg.csproj
+++ b/CUETools.Codecs.ffmpeg/CUETools.Codecs.ffmpeg.csproj
@@ -1,7 +1,7 @@
- net47;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.ffmpegdll
CUETools.Codecs.ffmpegdll
@@ -25,7 +25,7 @@
-
+
diff --git a/CUETools.Codecs.lame_enc/CUETools.Codecs.LAME.csproj b/CUETools.Codecs.lame_enc/CUETools.Codecs.LAME.csproj
index d95f4f801..ae7e56b63 100644
--- a/CUETools.Codecs.lame_enc/CUETools.Codecs.LAME.csproj
+++ b/CUETools.Codecs.lame_enc/CUETools.Codecs.LAME.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.lame_enc
CUETools.Codecs.lame_enc
diff --git a/CUETools.Codecs.libFLAC/CUETools.Codecs.libFLAC.csproj b/CUETools.Codecs.libFLAC/CUETools.Codecs.libFLAC.csproj
index f2bef093a..368e65b79 100644
--- a/CUETools.Codecs.libFLAC/CUETools.Codecs.libFLAC.csproj
+++ b/CUETools.Codecs.libFLAC/CUETools.Codecs.libFLAC.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.libFLAC
CUETools.Codecs.libFLAC
diff --git a/CUETools.Codecs.libFLAC/FLACDLL.cs b/CUETools.Codecs.libFLAC/FLACDLL.cs
index 8555e7b3b..37f123e44 100644
--- a/CUETools.Codecs.libFLAC/FLACDLL.cs
+++ b/CUETools.Codecs.libFLAC/FLACDLL.cs
@@ -163,7 +163,7 @@ static FLACDLL()
var myFolder = System.IO.Path.GetDirectoryName(myPath);
var is64 = IntPtr.Size == 8;
var subfolder = is64 ? "x64" : "win32";
-#if NET47
+#if NET48
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(myFolder, subfolder, DllName + ".dll"));
#else
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(System.IO.Path.Combine(myFolder, subfolder), DllName + ".dll"));
diff --git a/CUETools.Codecs.libmp3lame/CUETools.Codecs.libmp3lame.csproj b/CUETools.Codecs.libmp3lame/CUETools.Codecs.libmp3lame.csproj
index 2e874255b..01205e4ef 100644
--- a/CUETools.Codecs.libmp3lame/CUETools.Codecs.libmp3lame.csproj
+++ b/CUETools.Codecs.libmp3lame/CUETools.Codecs.libmp3lame.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.libmp3lame
CUETools.Codecs.libmp3lame
diff --git a/CUETools.Codecs.libmp3lame/libmp3lamedll.cs b/CUETools.Codecs.libmp3lame/libmp3lamedll.cs
index 12a086658..42eae49f2 100644
--- a/CUETools.Codecs.libmp3lame/libmp3lamedll.cs
+++ b/CUETools.Codecs.libmp3lame/libmp3lamedll.cs
@@ -52,7 +52,7 @@ static libmp3lamedll()
var myFolder = System.IO.Path.GetDirectoryName(myPath);
var is64 = IntPtr.Size == 8;
var subfolder = is64 ? "x64" : "win32";
-#if NET47
+#if NET48
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(myFolder, subfolder, DllName + ".dll"));
#else
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(System.IO.Path.Combine(myFolder, subfolder), DllName + ".dll"));
diff --git a/CUETools.Codecs.libwavpack/CUETools.Codecs.libwavpack.csproj b/CUETools.Codecs.libwavpack/CUETools.Codecs.libwavpack.csproj
index 364267a04..f20505199 100644
--- a/CUETools.Codecs.libwavpack/CUETools.Codecs.libwavpack.csproj
+++ b/CUETools.Codecs.libwavpack/CUETools.Codecs.libwavpack.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs.libwavpack
CUETools.Codecs.libwavpack
diff --git a/CUETools.Codecs.libwavpack/wavpackdll.cs b/CUETools.Codecs.libwavpack/wavpackdll.cs
index a320d9dba..dc04b2531 100644
--- a/CUETools.Codecs.libwavpack/wavpackdll.cs
+++ b/CUETools.Codecs.libwavpack/wavpackdll.cs
@@ -71,7 +71,7 @@ static wavpackdll()
var myFolder = System.IO.Path.GetDirectoryName(myPath);
var is64 = IntPtr.Size == 8;
var subfolder = is64 ? "x64" : "win32";
-#if NET47
+#if NET48
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(myFolder, subfolder, DllName + ".dll"));
#else
IntPtr Dll = LoadLibrary(System.IO.Path.Combine(System.IO.Path.Combine(myFolder, subfolder), DllName + ".dll"));
diff --git a/CUETools.Codecs/CUETools.Codecs.csproj b/CUETools.Codecs/CUETools.Codecs.csproj
index baf595324..fb673685c 100644
--- a/CUETools.Codecs/CUETools.Codecs.csproj
+++ b/CUETools.Codecs/CUETools.Codecs.csproj
@@ -1,7 +1,7 @@
- net20;net47;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Codecs
CUETools.Codecs
@@ -17,7 +17,7 @@
-
+
diff --git a/CUETools.Compression.Rar/CUETools.Compression.Rar.csproj b/CUETools.Compression.Rar/CUETools.Compression.Rar.csproj
index 86ec0cc82..b34838b62 100644
--- a/CUETools.Compression.Rar/CUETools.Compression.Rar.csproj
+++ b/CUETools.Compression.Rar/CUETools.Compression.Rar.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Compression.Rar
CUETools.Compression.Rar
diff --git a/CUETools.Compression.Zip/CUETools.Compression.Zip.csproj b/CUETools.Compression.Zip/CUETools.Compression.Zip.csproj
index ec4870c33..f00e9c809 100644
--- a/CUETools.Compression.Zip/CUETools.Compression.Zip.csproj
+++ b/CUETools.Compression.Zip/CUETools.Compression.Zip.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Compression.Zip
CUETools.Compression.Zip
diff --git a/CUETools.Compression/CUETools.Compression.csproj b/CUETools.Compression/CUETools.Compression.csproj
index 2b94c2cec..ae76599a1 100644
--- a/CUETools.Compression/CUETools.Compression.csproj
+++ b/CUETools.Compression/CUETools.Compression.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Compression
CUETools.Compression
diff --git a/CUETools.Converter/CUETools.Converter.csproj b/CUETools.Converter/CUETools.Converter.csproj
index 3f8e3c0ef..f0089738c 100644
--- a/CUETools.Converter/CUETools.Converter.csproj
+++ b/CUETools.Converter/CUETools.Converter.csproj
@@ -1,9 +1,7 @@
- net47;netcoreapp2.0
- false
- 2.0.9
+ net10.0
2.2.6.0
CUETools.Converter
CUETools.Converter
diff --git a/CUETools.DSP.Mixer/CUETools.DSP.Mixer.csproj b/CUETools.DSP.Mixer/CUETools.DSP.Mixer.csproj
index 286423439..ce87b37c2 100644
--- a/CUETools.DSP.Mixer/CUETools.DSP.Mixer.csproj
+++ b/CUETools.DSP.Mixer/CUETools.DSP.Mixer.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.DSP.Mixer
CUETools.DSP.Mixer
diff --git a/CUETools.DSP.Resampler/CUETools.DSP.Resampler.csproj b/CUETools.DSP.Resampler/CUETools.DSP.Resampler.csproj
index 0b3fd772f..99961d8d1 100644
--- a/CUETools.DSP.Resampler/CUETools.DSP.Resampler.csproj
+++ b/CUETools.DSP.Resampler/CUETools.DSP.Resampler.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.DSP.Resampler
CUETools.DSP.Resampler
diff --git a/CUETools.FLACCL.cmd/App.config b/CUETools.FLACCL.cmd/App.config
index c8d467dcf..0f9b4a6db 100644
--- a/CUETools.FLACCL.cmd/App.config
+++ b/CUETools.FLACCL.cmd/App.config
@@ -1,8 +1,8 @@
-
+
-
\ No newline at end of file
+
diff --git a/CUETools.FLACCL.cmd/CUETools.FLACCL.cmd.csproj b/CUETools.FLACCL.cmd/CUETools.FLACCL.cmd.csproj
index 8f870ca4e..a376e3085 100644
--- a/CUETools.FLACCL.cmd/CUETools.FLACCL.cmd.csproj
+++ b/CUETools.FLACCL.cmd/CUETools.FLACCL.cmd.csproj
@@ -1,114 +1,29 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {1FCA8834-34E6-47CF-B53F-D8DF35345363}
- Exe
- Properties
- CUETools.FLACCL.cmd
- CUETools.FLACCL.cmd
-
-
- 3.5
-
-
- v4.7
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
- AnyCPU
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- AnyCPU
- AllRules.ruleset
-
-
-
- False
- ..\ThirdParty\openclnet\source\bin\$(Configuration)\net47\OpenCLNet.dll
-
-
-
-
-
-
-
-
-
-
-
- {082D6B9E-326E-4D15-9798-EDAE9EDE70A6}
- CUETools.Codecs.Flake
- False
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
- False
-
-
- {DFE55765-564C-4B8F-993B-A94C4D1C212E}
- CUETools.Codecs.FLACCL
- False
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ 2.2.6.0
+ Exe
+ CUETools.FLACCL.cmd
+ CUETools.FLACCL.cmd
+ 7.0
+ false
+ ..\bin\$(Configuration)\$(TargetFramework)\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CUETools.Flake/CUETools.Flake.csproj b/CUETools.Flake/CUETools.Flake.csproj
index a68dde5a2..9c8e2389c 100644
--- a/CUETools.Flake/CUETools.Flake.csproj
+++ b/CUETools.Flake/CUETools.Flake.csproj
@@ -1,9 +1,7 @@
- net47;net20;netcoreapp2.0
- false
- 2.0.9
+ net10.0
2.2.6.0
CUETools.Flake
CUETools.Flake
diff --git a/CUETools.LossyWAV/CUETools.LossyWAV.csproj b/CUETools.LossyWAV/CUETools.LossyWAV.csproj
index b7c3b0c69..5fc5d1169 100644
--- a/CUETools.LossyWAV/CUETools.LossyWAV.csproj
+++ b/CUETools.LossyWAV/CUETools.LossyWAV.csproj
@@ -1,9 +1,7 @@
- net47;net20;netcoreapp2.0
- false
- 2.0.9
+ net10.0
2.2.6.0
CUETools.LossyWAV
CUETools.LossyWAV
diff --git a/CUETools.Parity/CUETools.Parity.csproj b/CUETools.Parity/CUETools.Parity.csproj
index 136e47052..12b6fd022 100644
--- a/CUETools.Parity/CUETools.Parity.csproj
+++ b/CUETools.Parity/CUETools.Parity.csproj
@@ -1,7 +1,7 @@
- net20;net47;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Parity
CUETools.Parity
diff --git a/CUETools.Processor/CUESheet.cs b/CUETools.Processor/CUESheet.cs
index d44c91cd0..727745623 100644
--- a/CUETools.Processor/CUESheet.cs
+++ b/CUETools.Processor/CUESheet.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Drawing;
-#if NET47 || NET20
+#if NET48 || NET20
using System.Drawing.Drawing2D;
#endif
using System.Globalization;
@@ -127,7 +127,7 @@ public List AlbumArt
get { return _albumArt; }
}
-#if NET47 || NET20
+#if NET48 || NET20
public Image Cover
{
get
@@ -1828,7 +1828,7 @@ public void LoadAndResizeAlbumArt()
using (MemoryStream imageStream = new MemoryStream(pic.Data.Data, 0, pic.Data.Count))
try
{
-#if NET47 || NET20
+#if NET48 || NET20
var image = Image.FromStream(ms);
pic.Description += $" ({image.Width}x{image.Height})";
//if (image.Height > 0 && image.Width > 0 && (image.Height * 1.0 / image.Width) > 0.9 && (image.Width * 1.0 / image.Height) > 0.9)
@@ -1863,7 +1863,7 @@ public void LoadAndResizeAlbumArt()
}
}
}
-#if NET47 || NET20
+#if NET48 || NET20
ResizeAlbumArt();
#endif
}
@@ -3030,7 +3030,7 @@ public CUEToolsLocalDBEntry OpenLocalDBEntry()
return entry;
}
-#if NET47 || NET20
+#if NET48 || NET20
private static Bitmap resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
@@ -3152,7 +3152,7 @@ private void LoadAlbumArt(TagLib.File fileInfo)
using (MemoryStream imageStream = new MemoryStream(pic.Data.Data, 0, pic.Data.Count))
try
{
-#if NET47 || NET20
+#if NET48 || NET20
var image = Image.FromStream(imageStream);
pic.Description += $" ({image.Width}x{image.Height})";
if (image.Height > 0 && image.Width > 0 && (image.Height * 1.0 / image.Width) > 0.9 && (image.Width * 1.0 / image.Height) > 0.9)
@@ -3170,7 +3170,7 @@ private void LoadAlbumArt(TagLib.File fileInfo)
}
}
-#if NET47 || NET20
+#if NET48 || NET20
public void ResizeAlbumArt()
{
if (_albumArt == null)
diff --git a/CUETools.Processor/CUETools.Processor.csproj b/CUETools.Processor/CUETools.Processor.csproj
index 9c4375f32..7dfed0e2b 100644
--- a/CUETools.Processor/CUETools.Processor.csproj
+++ b/CUETools.Processor/CUETools.Processor.csproj
@@ -1,7 +1,7 @@
- net47;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Processor
CUETools.Processor
@@ -23,7 +23,7 @@
-
+
diff --git a/CUETools.Ripper.Console/CUETools.ConsoleRipper.csproj b/CUETools.Ripper.Console/CUETools.ConsoleRipper.csproj
index 0fcc017aa..cf4cde0e2 100644
--- a/CUETools.Ripper.Console/CUETools.ConsoleRipper.csproj
+++ b/CUETools.Ripper.Console/CUETools.ConsoleRipper.csproj
@@ -1,7 +1,7 @@
- net47;net20
+ net10.0
2.2.6.0
CUETools.Ripper.Console
CUETools.Ripper.Console
diff --git a/CUETools.Ripper.SCSI/CUETools.Ripper.SCSI.csproj b/CUETools.Ripper.SCSI/CUETools.Ripper.SCSI.csproj
index b22030687..1d6133ee0 100644
--- a/CUETools.Ripper.SCSI/CUETools.Ripper.SCSI.csproj
+++ b/CUETools.Ripper.SCSI/CUETools.Ripper.SCSI.csproj
@@ -1,7 +1,7 @@
- net47;net20
+ netstandard2.1
2.2.6.0
CUETools.Ripper.SCSI
CUETools.Ripper.SCSI
diff --git a/CUETools.Ripper/CUETools.Ripper.csproj b/CUETools.Ripper/CUETools.Ripper.csproj
index e28e6b3e1..37ec076ba 100644
--- a/CUETools.Ripper/CUETools.Ripper.csproj
+++ b/CUETools.Ripper/CUETools.Ripper.csproj
@@ -1,7 +1,7 @@
- net47;net20;netstandard2.0
+ netstandard2.1
2.2.6.0
CUETools.Ripper
CUETools.Ripper
diff --git a/CUETools.TestHelpers/CUETools.TestHelpers.csproj b/CUETools.TestHelpers/CUETools.TestHelpers.csproj
index a481ec7a9..ad13db1d0 100644
--- a/CUETools.TestHelpers/CUETools.TestHelpers.csproj
+++ b/CUETools.TestHelpers/CUETools.TestHelpers.csproj
@@ -1,110 +1,25 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {84EBB7CB-02C9-40A9-9D32-C641B822DAA2}
- Library
- Properties
- CUETools.TestHelpers
- CUETools.TestHelpers
- v4.7
- 512
-
-
- 3.5
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- AllRules.ruleset
-
-
-
-
-
-
-
-
-
-
-
-
-
- {5802C7E9-157E-4124-946D-70B5AE48A5A1}
- CUETools.AccurateRip
- False
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
- False
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
- False
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
\ No newline at end of file
+
+
+
+ netstandard2.1
+ 1.0.0.0
+ Library
+ CUETools.TestHelpers
+ CUETools.TestHelpers
+ false
+ ..\bin\$(Configuration)\
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
diff --git a/CUETools.TestHelpers/app.config b/CUETools.TestHelpers/app.config
index 957cb1382..6b2c6ac27 100644
--- a/CUETools.TestHelpers/app.config
+++ b/CUETools.TestHelpers/app.config
@@ -1,6 +1,6 @@
-
+
diff --git a/CUETools.eac3to/CUETools.eac3to.csproj b/CUETools.eac3to/CUETools.eac3to.csproj
index cb4c0acc2..cbc402221 100644
--- a/CUETools.eac3to/CUETools.eac3to.csproj
+++ b/CUETools.eac3to/CUETools.eac3to.csproj
@@ -1,9 +1,7 @@
- net47;netcoreapp2.0
- false
- 2.0.9
+ net10.0
2.2.6.0
CUETools.eac3to
CUETools.eac3to
diff --git a/CUETools.eac3ui/App.config b/CUETools.eac3ui/App.config
index e8460b80e..0561a2203 100644
--- a/CUETools.eac3ui/App.config
+++ b/CUETools.eac3ui/App.config
@@ -6,7 +6,7 @@
-
+
diff --git a/CUETools.eac3ui/BLUTools.csproj b/CUETools.eac3ui/BLUTools.csproj
index 590aa97d9..1dc1393df 100644
--- a/CUETools.eac3ui/BLUTools.csproj
+++ b/CUETools.eac3ui/BLUTools.csproj
@@ -1,194 +1,42 @@
-
-
-
+
+
- Debug
- AnyCPU
- {678875A6-6B3A-4AAC-83B6-D9A72D9016CF}
+ net10.0-windows
WinExe
- BluTools
BluTools
- v4.7
- 512
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 4
- true
-
-
-
- AnyCPU
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- false
-
-
+ BluTools
Icons\cue2.ico
+ 7.0
+ true
+ true
+ false
+ ..\bin\$(Configuration)\
+
-
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
-
-
+
+
+
+
+
+
+
+
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
- App.xaml
- Code
-
-
- MainWindow.xaml
- Code
-
+
+
+
-
- Code
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
+
ResXFileCodeGenerator
Resources.Designer.cs
- Designer
-
+
SettingsSingleFileGenerator
Settings.Designer.cs
-
-
-
-
-
- {1dd41038-d885-46c5-8dde-e0b82f066584}
- CUETools.CDImage
-
-
- {e75f7ccd-4266-42e1-a039-dc7eb5edd8f6}
- CUETools.Codecs.MPEG
- False
-
-
- {082d6b9e-326e-4d15-9798-edae9ede70a6}
- CUETools.Codecs.Flake
- False
-
-
- {6458a13a-30ef-45a9-9d58-e5031b17bee2}
- CUETools.Codecs
-
-
- {c36efaa5-4f81-4a29-800d-ba866ff13bc8}
- CUETools.CTDB.Types
-
-
- {aa2a9a7e-45fb-4632-ad85-85b0e556f818}
- CUETools.CTDB
-
-
- {4911bd82-49ef-4858-8b51-5394f86739a4}
- CUETools.Processor
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
diff --git a/CUETools.eac3ui/Properties/Resources.Designer.cs b/CUETools.eac3ui/Properties/Resources.Designer.cs
index c9872e05a..95a11a94e 100644
--- a/CUETools.eac3ui/Properties/Resources.Designer.cs
+++ b/CUETools.eac3ui/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace BluTools.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/CUETools.eac3ui/Properties/Settings.Designer.cs b/CUETools.eac3ui/Properties/Settings.Designer.cs
index b0899f9ab..bc1ad4c4a 100644
--- a/CUETools.eac3ui/Properties/Settings.Designer.cs
+++ b/CUETools.eac3ui/Properties/Settings.Designer.cs
@@ -12,7 +12,7 @@ namespace BluTools.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
diff --git a/CUETools/CUETools.TestCodecs/CUETools.TestCodecs.csproj b/CUETools/CUETools.TestCodecs/CUETools.TestCodecs.csproj
index b86e414f6..a25804673 100644
--- a/CUETools/CUETools.TestCodecs/CUETools.TestCodecs.csproj
+++ b/CUETools/CUETools.TestCodecs/CUETools.TestCodecs.csproj
@@ -1,191 +1,65 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {04945FB2-8410-4F14-8262-2ED18DCDACD6}
- Library
- CUETools.TestCodecs
- CUETools.TestCodecs
- 4
- {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-
-
- 3.5
-
-
- v4.7
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
-
- true
- full
- false
- ..\..\bin\$(Configuration)\net47\tests\
- DEBUG;TRACE
- true
- AllRules.ruleset
- false
-
-
- true
- true
- ..\..\bin\$(Configuration)\net47\tests\
- TRACE
- pdbonly
- true
- AllRules.ruleset
- false
-
-
-
- False
- ..\..\ThirdParty\CSScriptLibrary.v1.1.dll
- False
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {5802C7E9-157E-4124-946D-70B5AE48A5A1}
- CUETools.AccurateRip
- False
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
- False
-
-
- {F2EC7193-D5E5-4252-9803-5CEB407E910F}
- CUETools.Codecs.ALAC
- True
-
-
- {082D6B9E-326E-4D15-9798-EDAE9EDE70A6}
- CUETools.Codecs.Flake
- True
-
-
- {f10ab92c-9afb-4fc0-94e0-06fcd3ca8155}
- CUETools.Codecs.libFLAC
-
-
- {8A0426FA-0BC2-4C49-A6E5-1F9A68156F19}
- CUETools.Codecs.LossyWAV
- False
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
- True
-
-
- {14EE067E-C218-4625-9540-2361AB27C4A6}
- CUETools.Compression
- False
-
-
- {A6303861-CA06-4C2C-A104-BA9291538F6F}
- CUETools.DSP.Resampler
- False
-
-
- {D2700165-3E77-4B28-928D-551F5FC11954}
- CUETools.Ripper
- False
-
-
- {84EBB7CB-02C9-40A9-9D32-C641B822DAA2}
- CUETools.TestHelpers
- False
-
-
- {5ADCFD6D-BFEA-4B10-BB45-9083BBB56AF4}
- Freedb
- False
-
-
-
-
- False
- Microsoft .NET Framework 4 %28x86 and x64%29
- true
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ Library
+ CUETools.TestCodecs
+ CUETools.TestCodecs
+ true
+ true
+ false
+ false
+ true
+ $(NoWarn);WFO1000
+ ..\..\bin\$(Configuration)\$(TargetFramework)\tests\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CUETools/CUETools.TestParity/CUETools.TestParity.csproj b/CUETools/CUETools.TestParity/CUETools.TestParity.csproj
index 9916acbee..d316ef0d7 100644
--- a/CUETools/CUETools.TestParity/CUETools.TestParity.csproj
+++ b/CUETools/CUETools.TestParity/CUETools.TestParity.csproj
@@ -1,134 +1,40 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {6C74652F-1EF4-459E-84F4-99D93D3D17DA}
- Library
- Properties
- CUETools.TestParity
- CUETools.TestParity
- v4.7
- 512
- {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-
-
- 3.5
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
-
- true
- full
- false
- ..\..\bin\$(Configuration)\net47\tests\
- DEBUG;TRACE
- prompt
- 4
- true
- AllRules.ruleset
- false
-
-
- pdbonly
- true
- ..\..\bin\$(Configuration)\net47\tests\
- TRACE
- prompt
- 4
- true
- AllRules.ruleset
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {5802C7E9-157E-4124-946D-70B5AE48A5A1}
- CUETools.AccurateRip
- False
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
- False
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
- False
-
-
- {ECEB839C-171B-4535-958F-9899310A0342}
- CUETools.Parity
- False
-
-
- {84EBB7CB-02C9-40A9-9D32-C641B822DAA2}
- CUETools.TestHelpers
- False
-
-
-
-
-
-
-
- False
- Microsoft .NET Framework 4 %28x86 and x64%29
- true
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ Library
+ CUETools.TestParity
+ CUETools.TestParity
+ true
+ false
+ false
+ true
+ ..\..\bin\$(Configuration)\$(TargetFramework)\tests\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CUETools/CUETools.TestParity/app.config b/CUETools/CUETools.TestParity/app.config
index 957cb1382..6b2c6ac27 100644
--- a/CUETools/CUETools.TestParity/app.config
+++ b/CUETools/CUETools.TestParity/app.config
@@ -1,6 +1,6 @@
-
+
diff --git a/CUETools/CUETools.TestProcessor/CUETools.TestProcessor.csproj b/CUETools/CUETools.TestProcessor/CUETools.TestProcessor.csproj
index 058f176c5..9bf68d3ce 100644
--- a/CUETools/CUETools.TestProcessor/CUETools.TestProcessor.csproj
+++ b/CUETools/CUETools.TestProcessor/CUETools.TestProcessor.csproj
@@ -1,144 +1,48 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {A430AD28-B76A-4ED0-AF7D-D13B8969297F}
- Library
- CUETools.TestProcessor
- CUETools.TestProcessor
- 4
- {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-
-
- 3.5
-
-
- v4.7
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
-
- true
- full
- false
- ..\..\bin\$(Configuration)\net47\tests\
- DEBUG;TRACE
- AllRules.ruleset
- false
-
-
- true
- true
- ..\..\bin\$(Configuration)\net47\tests\
- TRACE
- pdbonly
- AllRules.ruleset
- false
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {5802C7E9-157E-4124-946D-70B5AE48A5A1}
- CUETools.AccurateRip
- False
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
- False
-
-
- {8A0426FA-0BC2-4C49-A6E5-1F9A68156F19}
- CUETools.Codecs.LossyWAV
- False
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
- False
-
-
- {14EE067E-C218-4625-9540-2361AB27C4A6}
- CUETools.Compression
- False
-
-
- {c36efaa5-4f81-4a29-800d-ba866ff13bc8}
- CUETools.CTDB.Types
-
-
- {AA2A9A7E-45FB-4632-AD85-85B0E556F818}
- CUETools.CTDB
- False
-
-
- {4911BD82-49EF-4858-8B51-5394F86739A4}
- CUETools.Processor
- False
-
-
- {D2700165-3E77-4B28-928D-551F5FC11954}
- CUETools.Ripper
- False
-
-
- {5ADCFD6D-BFEA-4B10-BB45-9083BBB56AF4}
- Freedb
- False
-
-
-
-
- False
- Microsoft .NET Framework 4 %28x86 and x64%29
- true
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ Library
+ CUETools.TestProcessor
+ CUETools.TestProcessor
+ true
+ false
+ false
+ true
+ $(NoWarn);WFO1000
+ ..\..\bin\$(Configuration)\$(TargetFramework)\tests\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CUETools/CUETools.csproj b/CUETools/CUETools.csproj
index ae92622fc..7380f7734 100644
--- a/CUETools/CUETools.csproj
+++ b/CUETools/CUETools.csproj
@@ -1,430 +1,66 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {EF351583-A9CD-4530-92C3-20AC02136BC2}
- WinExe
- Properties
- JDP
- CUETools
- cue2.ico
- 611F49E043614FEDCFF1B128868CC8DC0B6656C5
- CUETools_TemporaryKey.pfx
- false
- false
- true
- LocalIntranet
-
-
- 3.5
-
-
- v4.7
-
- ftp://cuetools.net/cuetools.net/install/cuetools/
- true
- Web
- true
- Background
- 1
- Days
- true
- false
- true
- http://cuetools.net/install/cuetools/
- http://cuetools.net/
- CUETools
- CUETools
- true
- publish.htm
- 0
- 1.0.0.%2a
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
- true
- x86
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- true
- AnyCPU
- true
- AllRules.ruleset
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form
-
-
- frmSubmit.cs
-
-
- Form
-
-
- frmAbout.cs
-
-
- Form
-
-
- frmBatch.cs
-
-
- Form
-
-
- frmChoice.cs
-
-
- Form
-
-
- frmOverwrite.cs
-
-
- Form
-
-
- frmPassword.cs
-
-
- Form
-
-
- frmReport.cs
-
-
- Form
-
-
- frmSettings.cs
-
-
- Form
-
-
- frmCUETools.cs
-
-
-
-
- frmAbout.cs
- Designer
-
-
- Designer
- frmAbout.cs
-
-
- Designer
- frmAbout.cs
-
-
- Designer
- frmBatch.cs
-
-
- frmChoice.cs
- Designer
-
-
- Designer
- frmChoice.cs
-
-
- frmChoice.cs
-
-
- Designer
- frmCUETools.cs
-
-
- Designer
- frmCUETools.cs
-
-
- Designer
- frmCUETools.cs
-
-
- frmOverwrite.cs
-
-
- frmPassword.cs
- Designer
-
-
- Designer
- frmPassword.cs
-
-
- frmPassword.cs
-
-
- frmReport.cs
- Designer
-
-
- Designer
- frmReport.cs
-
-
- frmReport.cs
-
-
- Designer
- frmSettings.cs
-
-
- Designer
- frmSettings.cs
-
-
- Designer
- frmSettings.cs
-
-
- frmSubmit.cs
-
-
- frmSubmit.cs
-
-
- frmSubmit.cs
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
- True
-
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
-
-
-
- {CA4D64E6-6544-4A29-8BA5-7DB08D50D072}
- CUEControls
-
-
- {5802C7E9-157E-4124-946D-70B5AE48A5A1}
- CUETools.AccurateRip
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
-
-
- {14EE067E-C218-4625-9540-2361AB27C4A6}
- CUETools.Compression
-
-
- {c36efaa5-4f81-4a29-800d-ba866ff13bc8}
- CUETools.CTDB.Types
-
-
- {AA2A9A7E-45FB-4632-AD85-85B0E556F818}
- CUETools.CTDB
-
-
- {4911BD82-49EF-4858-8B51-5394F86739A4}
- CUETools.Processor
-
-
- {5ADCFD6D-BFEA-4B10-BB45-9083BBB56AF4}
- Freedb
-
-
- {1219a514-d3fa-40db-bbb2-92ce05e35839}
- TaglibSharp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 2.0 %28x86%29
- true
-
-
- False
- .NET Framework 3.0 %28x86%29
- false
-
-
- False
- .NET Framework 3.5
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- Visual C++ Runtime Libraries %28x86%29
- true
-
-
-
-
- False
-
-
-
-
- Include
- True
- Satellite
-
-
- False
-
-
-
-
- Include
- True
- Satellite
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ 2.2.6.0
+ WinExe
+ CUETools
+ JDP
+ cue2.ico
+ Properties\app.manifest
+ 7.0
+ true
+ false
+ true
+ $(NoWarn);WFO1000
+ ..\bin\$(Configuration)\
+
+
+
+ x86
+
+
+
+ AnyCPU
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
diff --git a/CUETools/Program.cs b/CUETools/Program.cs
index e8222a5be..d2b64633a 100644
--- a/CUETools/Program.cs
+++ b/CUETools/Program.cs
@@ -1,12 +1,11 @@
using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.IO;
-using System.Runtime.Remoting;
-using System.Runtime.Remoting.Channels.Ipc;
-using System.Text;
-using System.Threading;
-using System.Windows.Forms;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.IO.Pipes;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms;
using CUETools.Processor;
using CUETools.Processor.Settings;
@@ -74,12 +73,14 @@ static void Main(string[] args)
}
}
- [Serializable]
- class SingletonController : MarshalByRefObject
- {
- private static IpcChannel m_IPCChannel = null;
-
- public delegate bool ReceiveDelegate(string[] args);
+ class SingletonController
+ {
+ private static Mutex m_Mutex = null;
+ private static string m_PipeName = null;
+ private static Thread m_ListenerThread = null;
+ private static CancellationTokenSource m_Cancellation = null;
+
+ public delegate bool ReceiveDelegate(string[] args);
static private ReceiveDelegate m_Receive = null;
static public ReceiveDelegate Receiver
@@ -107,55 +108,126 @@ public static bool IamFirst(string id, ReceiveDelegate r)
}
}
- public static bool IamFirst(string id)
- {
- try
- {
- m_IPCChannel = new IpcChannel(id);
- }
- catch
- {
- return false;
- }
- System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(m_IPCChannel, false);
- RemotingConfiguration.RegisterWellKnownServiceType(
- typeof(SingletonController),
- "SingletonController",
- WellKnownObjectMode.SingleCall);
- return true;
- }
-
- public static void Cleanup()
- {
- if (m_IPCChannel != null)
- m_IPCChannel.StopListening(null);
- m_IPCChannel = null;
- }
-
- public static void Send(string id, string[] s)
- {
- SingletonController ctrl;
- IpcChannel channel = new IpcChannel();
- System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(channel, false);
- bool result = false;
- try
- {
- ctrl = (SingletonController)Activator.GetObject(typeof(SingletonController), "ipc://" + id + "/SingletonController");
- result = ctrl.Receive(s);
- }
- catch
- {
- }
+ public static bool IamFirst(string id)
+ {
+ bool createdNew;
+ try
+ {
+ m_Mutex = new Mutex(true, "CUETools-" + id, out createdNew);
+ }
+ catch
+ {
+ return false;
+ }
+
+ if (!createdNew)
+ return false;
+
+ m_PipeName = "CUETools-" + id;
+ m_Cancellation = new CancellationTokenSource();
+ m_ListenerThread = new Thread(Listen);
+ m_ListenerThread.IsBackground = true;
+ m_ListenerThread.Name = "CUETools single-instance listener";
+ m_ListenerThread.Start();
+ return true;
+ }
+
+ public static void Cleanup()
+ {
+ if (m_Cancellation != null)
+ {
+ m_Cancellation.Cancel();
+ try
+ {
+ using (NamedPipeClientStream client = new NamedPipeClientStream(".", m_PipeName, PipeDirection.Out))
+ client.Connect(50);
+ }
+ catch
+ {
+ }
+ }
+
+ if (m_ListenerThread != null)
+ m_ListenerThread.Join(1000);
+ m_ListenerThread = null;
+ m_Cancellation = null;
+ m_PipeName = null;
+
+ if (m_Mutex != null)
+ {
+ try
+ {
+ m_Mutex.ReleaseMutex();
+ }
+ catch
+ {
+ }
+ m_Mutex.Dispose();
+ }
+ m_Mutex = null;
+ }
+
+ public static void Send(string id, string[] s)
+ {
+ bool result = false;
+ try
+ {
+ using (NamedPipeClientStream client = new NamedPipeClientStream(".", "CUETools-" + id, PipeDirection.InOut))
+ {
+ client.Connect(1000);
+ BinaryWriter writer = new BinaryWriter(client, Encoding.UTF8, true);
+ writer.Write(s.Length);
+ foreach (string arg in s)
+ writer.Write(arg ?? "");
+ writer.Flush();
+
+ BinaryReader reader = new BinaryReader(client, Encoding.UTF8, true);
+ result = reader.ReadBoolean();
+ }
+ }
+ catch
+ {
+ }
if (!result)
MessageBox.Show("Another instance of the application seems to be running, but not responding.",
- "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
-
- public bool Receive(string[] s)
- {
- if (m_Receive == null)
- return false;
+ "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+
+ private static void Listen()
+ {
+ while (m_Cancellation != null && !m_Cancellation.IsCancellationRequested)
+ {
+ try
+ {
+ using (NamedPipeServerStream server = new NamedPipeServerStream(m_PipeName, PipeDirection.InOut, 1))
+ {
+ server.WaitForConnection();
+ if (m_Cancellation.IsCancellationRequested)
+ continue;
+
+ BinaryReader reader = new BinaryReader(server, Encoding.UTF8, true);
+ int count = reader.ReadInt32();
+ string[] args = new string[count];
+ for (int i = 0; i < count; i++)
+ args[i] = reader.ReadString();
+
+ bool result = Receive(args);
+ BinaryWriter writer = new BinaryWriter(server, Encoding.UTF8, true);
+ writer.Write(result);
+ writer.Flush();
+ }
+ }
+ catch
+ {
+ }
+ }
+ }
+
+ private static bool Receive(string[] s)
+ {
+ if (m_Receive == null)
+ return false;
return m_Receive(s);
}
}
-}
\ No newline at end of file
+}
diff --git a/CUETools/Properties/Resources.Designer.cs b/CUETools/Properties/Resources.Designer.cs
index a22d9de58..1d7fab57b 100644
--- a/CUETools/Properties/Resources.Designer.cs
+++ b/CUETools/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace JDP.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/CUETools/Properties/Settings.Designer.cs b/CUETools/Properties/Settings.Designer.cs
index e04f3d25c..1ee1fa702 100644
--- a/CUETools/Properties/Settings.Designer.cs
+++ b/CUETools/Properties/Settings.Designer.cs
@@ -12,7 +12,7 @@ namespace JDP.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "18.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
diff --git a/CUETools/TestRipper/CDDriveReaderTest.cs b/CUETools/TestRipper/CDDriveReaderTest.cs
index da7dc2227..8484f52e5 100644
--- a/CUETools/TestRipper/CDDriveReaderTest.cs
+++ b/CUETools/TestRipper/CDDriveReaderTest.cs
@@ -37,10 +37,11 @@ public TestContext TestContext
}
}
- const int max_pass = 64;
- const int Sectors2Read = 2400;
-
- bool markErrors = true;
+ const int max_pass = 64;
+ const int Sectors2Read = 2400;
+ const string FixtureDirectory = @"Y:\Temp\dbg\960";
+
+ bool markErrors = true;
int _currentStart = 0, _realErrors = 0;
byte[] _currentData = new byte[Sectors2Read * 4 * 588];
@@ -54,11 +55,13 @@ public TestContext TestContext
//You can use the following additional attributes as you write your tests:
//
//Use ClassInitialize to run code before running the first test in the class
- [ClassInitialize()]
- public static void MyClassInitialize(TestContext testContext)
- {
- for (ulong i = 0; i < 256; i++)
- {
+ [ClassInitialize()]
+ public static void MyClassInitialize(TestContext testContext)
+ {
+ EnsureExternalFixtureAvailable();
+
+ for (ulong i = 0; i < 256; i++)
+ {
ulong bl = 0;
for (int b = 0; b < 8; b++)
bl += ((i >> b) & 1) << (b << 3);
@@ -68,12 +71,12 @@ public static void MyClassInitialize(TestContext testContext)
//Random rnd = new Random(2314);
//rnd.NextBytes(_realData);
- byte [] c2data = new byte[Sectors2Read * 296];
- for (int p = 0; p < max_pass; p++)
- {
- // string nm_d = string.Format("Y:\\Temp\\dbg\\{0:x}-{1:00}.bin", _currentStart, dbg_pass);
- using (FileStream fs = new FileStream(string.Format("Y:\\Temp\\dbg\\960\\960-{0:00}.bin", p), FileMode.Open))
- using (FileStream fs2 = new FileStream(string.Format("Y:\\Temp\\dbg\\960\\960-{0:00}.c2", p), FileMode.Open))
+ byte [] c2data = new byte[Sectors2Read * 296];
+ for (int p = 0; p < max_pass; p++)
+ {
+ // string nm_d = string.Format("Y:\\Temp\\dbg\\{0:x}-{1:00}.bin", _currentStart, dbg_pass);
+ using (FileStream fs = new FileStream(Path.Combine(FixtureDirectory, string.Format("960-{0:00}.bin", p)), FileMode.Open))
+ using (FileStream fs2 = new FileStream(Path.Combine(FixtureDirectory, string.Format("960-{0:00}.c2", p)), FileMode.Open))
{
fs.Read(_realData, 0, Sectors2Read * 4 * 588);
fs2.Read(c2data, 0, Sectors2Read * 296);
@@ -107,10 +110,27 @@ public static void MyClassInitialize(TestContext testContext)
// }
// }
}
- using (FileStream fs = new FileStream(string.Format("Y:\\Temp\\dbg\\960\\960.bin", 0), FileMode.Open))
- fs.Read(_realData, 0, Sectors2Read * 4 * 588);
- }
- //
+ using (FileStream fs = new FileStream(Path.Combine(FixtureDirectory, "960.bin"), FileMode.Open))
+ fs.Read(_realData, 0, Sectors2Read * 4 * 588);
+ }
+
+ static void EnsureExternalFixtureAvailable()
+ {
+ if (!Directory.Exists(FixtureDirectory))
+ Assert.Inconclusive("External TestRipper fixture directory is missing: " + FixtureDirectory);
+
+ for (int p = 0; p < max_pass; p++)
+ {
+ string binPath = Path.Combine(FixtureDirectory, string.Format("960-{0:00}.bin", p));
+ string c2Path = Path.Combine(FixtureDirectory, string.Format("960-{0:00}.c2", p));
+ if (!File.Exists(binPath) || !File.Exists(c2Path))
+ Assert.Inconclusive("External TestRipper fixture files are missing under: " + FixtureDirectory);
+ }
+
+ if (!File.Exists(Path.Combine(FixtureDirectory, "960.bin")))
+ Assert.Inconclusive("External TestRipper reference file is missing: " + Path.Combine(FixtureDirectory, "960.bin"));
+ }
+ //
//Use ClassCleanup to run code after all tests in a class have run
//[ClassCleanup()]
//public static void MyClassCleanup()
diff --git a/CUETools/TestRipper/TestRipper.csproj b/CUETools/TestRipper/TestRipper.csproj
index dab36e2ce..c1ed0b84b 100644
--- a/CUETools/TestRipper/TestRipper.csproj
+++ b/CUETools/TestRipper/TestRipper.csproj
@@ -1,133 +1,36 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {5C8B61C0-BC3D-4316-B8A7-419D55BB5796}
- Library
- Properties
- TestRipper
- TestRipper
- v4.7
- 512
- {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-
-
- 3.5
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- true
- full
- false
- ..\..\bin\$(Configuration)\net47\tests\
- DEBUG;TRACE
- prompt
- 4
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\..\bin\$(Configuration)\net47\tests\
- TRACE
- prompt
- 4
- AllRules.ruleset
-
-
-
-
-
-
-
-
-
-
-
-
-
- {F2DFEB00-BB35-4665-85EA-CB8C7729A6B7}
- Bwg.Logging
- false
-
-
- {A05B6AA6-0EC3-495D-BCC4-ECE1210071A8}
- Bwg.Scsi
- false
-
-
- {1DD41038-D885-46C5-8DDE-E0B82F066584}
- CUETools.CDImage
- false
-
-
- {6458A13A-30EF-45A9-9D58-E5031B17BEE2}
- CUETools.Codecs
- false
-
-
- {8CF07381-BEA2-4AFC-B3DD-9B2F21C65A3A}
- CUETools.Ripper.SCSI
- false
-
-
- {D2700165-3E77-4B28-928D-551F5FC11954}
- CUETools.Ripper
- false
-
-
-
-
-
-
-
-
-
-
- False
- Microsoft .NET Framework 4 %28x86 and x64%29
- true
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ Library
+ TestRipper
+ TestRipper
+ false
+ false
+ true
+ ..\..\bin\$(Configuration)\$(TargetFramework)\tests\
+ false
+ $(BaseIntermediateOutputPath)\$(Configuration)\$(TargetFramework)\
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CUETools/TestRipper/app.config b/CUETools/TestRipper/app.config
index 73859b00e..8a046a0b8 100644
--- a/CUETools/TestRipper/app.config
+++ b/CUETools/TestRipper/app.config
@@ -1,3 +1,3 @@
-
+
diff --git a/CUETools/app.config b/CUETools/app.config
index 7680fe265..a19e70143 100644
--- a/CUETools/app.config
+++ b/CUETools/app.config
@@ -6,6 +6,6 @@
-
+
diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs
index 58218f689..7536dc3ae 100644
--- a/CUETools/frmCUETools.cs
+++ b/CUETools/frmCUETools.cs
@@ -1002,10 +1002,10 @@ private void WriteAudioFilesThread(object o)
UpdateOutputPath(pathIn, cueSheet);
pathOut = txtOutputPath.Text;
- if (dlgRes != DialogResult.Cancel && cueSheet.AlbumArt.Count != 0)
- pictureBoxMotd.Image = cueSheet.Cover;
- else
- pictureBoxMotd.Image = motdImage;
+ if (dlgRes != DialogResult.Cancel && cueSheet.AlbumArt.Count != 0)
+ pictureBoxMotd.Image = GetCoverImage(cueSheet);
+ else
+ pictureBoxMotd.Image = motdImage;
});
if (dlgRes == DialogResult.Cancel)
@@ -1049,8 +1049,8 @@ private void WriteAudioFilesThread(object o)
{
this.Invoke((MethodInvoker)delegate ()
{
- pictureBoxMotd.Image = cueSheet.Cover ?? motdImage;
- });
+ pictureBoxMotd.Image = GetCoverImage(cueSheet) ?? motdImage;
+ });
cueSheet.UsePregapForFirstTrackInSingleFile = _usePregapForFirstTrackInSingleFile && !outputAudio;
if (script == null || script.name == "default")
{
@@ -2108,10 +2108,10 @@ private void rbAction_CheckedChanged(object sender, EventArgs e)
SetupControls(false);
}
- public bool OnSecondCall(string[] args)
- {
- if ((_workThread != null) && (_workThread.IsAlive))
- return false;
+ public bool OnSecondCall(string[] args)
+ {
+ if ((_workThread != null) && (_workThread.IsAlive))
+ return false;
this.Invoke((MethodInvoker)delegate()
{
if (args.Length == 1)
@@ -2152,11 +2152,25 @@ public bool OnSecondCall(string[] args)
WindowState = FormWindowState.Normal;
Activate();
});
- return true;
- }
-
- private void locateInExplorerToolStripMenuItem_Click(object sender, EventArgs e)
- {
+ return true;
+ }
+
+ private static Image GetCoverImage(CUESheet cueSheet)
+ {
+ if (cueSheet == null || cueSheet.AlbumArt == null)
+ return null;
+ var picture = cueSheet.AlbumArt.Find(x => x.Type == TagLib.PictureType.FrontCover) ??
+ cueSheet.AlbumArt.Find(x => x.Type != TagLib.PictureType.NotAPicture);
+ if (picture == null)
+ return null;
+ using (MemoryStream imageStream = new MemoryStream(picture.Data.Data, 0, picture.Data.Count))
+ try { return Image.FromStream(imageStream); }
+ catch { }
+ return null;
+ }
+
+ private void locateInExplorerToolStripMenuItem_Click(object sender, EventArgs e)
+ {
var node = contextMenuStripFileTree.Tag as CUEControls.FileSystemTreeNode;
if (node is FileSystemTreeNodeLocalDBFolder)
{
diff --git a/Freedb/Freedb.csproj b/Freedb/Freedb.csproj
index 91ef4fac7..6d9da7e5e 100644
--- a/Freedb/Freedb.csproj
+++ b/Freedb/Freedb.csproj
@@ -1,167 +1,12 @@
-
-
-
- Local
- 9.0.30729
- 2.0
- {5ADCFD6D-BFEA-4B10-BB45-9083BBB56AF4}
- Debug
- AnyCPU
-
-
-
-
- Freedb
-
-
- JScript
- Grid
- IE50
- false
- Library
- Freedb
- OnBuildSuccess
-
-
-
-
-
-
- 3.5
- v4.7
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- ..\bin\Debug\net47\
- false
- 285212672
- false
-
-
- DEBUG;TRACE
-
-
- true
- 4096
- false
-
-
- false
- false
- false
- false
- 4
- full
- prompt
- AllRules.ruleset
-
-
- ..\bin\Release\net47\
- false
- 285212672
- false
-
-
-
-
-
-
- true
- 4096
- false
-
-
- true
- false
- false
- false
- 4
- pdbonly
- prompt
- AllRules.ruleset
-
-
-
- System
-
-
- System.Data
-
-
- System.Drawing
-
-
- System.Windows.Forms
-
-
- System.XML
-
-
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+ netstandard2.1
+ Freedb
+ Freedb
+ Library
+ false
+ ..\bin\$(Configuration)\
+
+
+
diff --git a/MusicBrainz/MusicBrainz.csproj b/MusicBrainz/MusicBrainz.csproj
index 9698612b5..81e49830d 100644
--- a/MusicBrainz/MusicBrainz.csproj
+++ b/MusicBrainz/MusicBrainz.csproj
@@ -1,81 +1,10 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- {74C2036B-2C9B-4FC8-B7BD-AE81A8DCE533}
- Library
- MusicBrainz
- MusicBrainz
-
-
-
-
- 2.0
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- prompt
- 4
- .
- true
- false
- v4.7
- true
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- prompt
- 4
- .
- true
- v1.1
- AnyCPU
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+ netstandard2.1
+ MusicBrainz
+ MusicBrainz
+ ..\bin\$(Configuration)\
+
+
+
diff --git a/ProgressODoom/ProgressODoom.csproj b/ProgressODoom/ProgressODoom.csproj
index 50f560b14..e7a0f2bfb 100644
--- a/ProgressODoom/ProgressODoom.csproj
+++ b/ProgressODoom/ProgressODoom.csproj
@@ -1,228 +1,20 @@
-
-
-
- Debug
- AnyCPU
- 9.0.30729
- 2.0
- {8DD1E84B-0B03-4C0B-9B42-1E49F75E7CB1}
- Library
- Properties
- ProgressODoom
- ProgressODoom
-
-
- 3.5
-
-
- false
- v4.7
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- true
-
-
- true
- full
- false
- ..\bin\Debug\net47\
- DEBUG;TRACE
- prompt
- 4
- AllRules.ruleset
-
-
- pdbonly
- true
- ..\bin\Release\net47\
- TRACE
- prompt
- 4
- AllRules.ruleset
-
-
-
-
-
-
-
-
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
-
-
-
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
- Component
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 2.0 %28x86%29
- true
-
-
- False
- .NET Framework 3.0 %28x86%29
- false
-
-
- False
- .NET Framework 3.5
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
-
-
-
\ No newline at end of file
+
+
+
+ net10.0-windows
+ Library
+ ProgressODoom
+ ProgressODoom
+ 7.0
+ true
+ false
+ false
+ $(NoWarn);WFO1000
+ ..\bin\$(Configuration)\
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index 0e53ea8a4..f50cf7da5 100644
--- a/README.md
+++ b/README.md
@@ -17,9 +17,10 @@ Prebuilt binaries can be downloaded from [CUETools Download](http://cue.tools/wi
`git apply --directory=ThirdParty/MAC_SDK ThirdParty/ThirdParty_MAC_SDK_CUETools.patch`
`git apply --directory=ThirdParty/taglib-sharp ThirdParty/submodule_taglib-sharp_CUETools.patch`
`git apply --directory=ThirdParty/WavPack ThirdParty/submodule_WavPack_CUETools.patch`
+`git apply --directory=ThirdParty/openclnet ThirdParty/submodule_openclnet_CUETools.patch`
`git apply --directory=ThirdParty/WindowsMediaLib ThirdParty/submodule_WindowsMediaLib_CUETools.patch`
* The solution can be built using Microsoft Visual Studio 2017 or newer (Community Edition will work)
- * Install the required .NET development tools (currently .NET Framework 4.7 and .NET Core 2.0)
+ * Install the required .NET development tools (currently .NET 10 SDK)
* Install an appropriate Windows SDK version (e.g. 10.0.16299.0 or newer)
* Install the Microsoft Visual Studio Installer Projects
* Open cuetools.net\CUETools.sln
diff --git a/ThirdParty/WavPack b/ThirdParty/WavPack
index 4827b9889..5803634a0 160000
--- a/ThirdParty/WavPack
+++ b/ThirdParty/WavPack
@@ -1 +1 @@
-Subproject commit 4827b9889665b937b6ed71b9c6c0123152cd7a02
+Subproject commit 5803634a030e2a11dba602ba057b89cc34486c67
diff --git a/ThirdParty/submodule_WindowsMediaLib_CUETools.patch b/ThirdParty/submodule_WindowsMediaLib_CUETools.patch
index 5b868f610..aafaacf66 100644
--- a/ThirdParty/submodule_WindowsMediaLib_CUETools.patch
+++ b/ThirdParty/submodule_WindowsMediaLib_CUETools.patch
@@ -1,7 +1,16 @@
diff --git a/wmlib/src/WindowsMediaLib.csproj b/wmlib/src/WindowsMediaLib.csproj
-index 24c8569..62cb8db 100644
+index 24c8569..d908906 100644
--- a/wmlib/src/WindowsMediaLib.csproj
+++ b/wmlib/src/WindowsMediaLib.csproj
+@@ -1,7 +1,7 @@
+
+
+
+- net47;net20
++ netstandard2.1
+ 1.1.0.0
+ WindowsMediaLib
+ WindowsMediaLib
@@ -10,7 +10,9 @@
Copyright (c) 2008-2018 snarfle
snarfle
diff --git a/ThirdParty/submodule_openclnet_CUETools.patch b/ThirdParty/submodule_openclnet_CUETools.patch
new file mode 100644
index 000000000..c0bd63145
--- /dev/null
+++ b/ThirdParty/submodule_openclnet_CUETools.patch
@@ -0,0 +1,21 @@
+diff --git a/source/OpenCLNet.csproj b/source/OpenCLNet.csproj
+index f2ec492..d8a2bce 100644
+--- a/source/OpenCLNet.csproj
++++ b/source/OpenCLNet.csproj
+@@ -1,7 +1,7 @@
+
+
+
+- net47
++ net10.0-windows
+ 0.5.1.0
+ OpenCL.Net
+ OpenCL.Net
+@@ -11,6 +11,7 @@
+ Olav Kalgraf
+ OpenCLNet
+ OpenCLNet
++ 7.0
+
+
+
diff --git a/ThirdParty/submodule_taglib-sharp_CUETools.patch b/ThirdParty/submodule_taglib-sharp_CUETools.patch
index 13c96332a..542797d26 100644
--- a/ThirdParty/submodule_taglib-sharp_CUETools.patch
+++ b/ThirdParty/submodule_taglib-sharp_CUETools.patch
@@ -1,8 +1,78 @@
+diff --git a/Directory.Build.props b/Directory.Build.props
+index dec1261..8f041a1 100644
+--- a/Directory.Build.props
++++ b/Directory.Build.props
+@@ -6,15 +6,11 @@
+ git
+
+
+- net462;netcoreapp3.1
+- net462;netstandard2.0
++ net10.0
++ netstandard2.1
+ latest
+
+
+-
+- full
+-
+-
+
+
+
+diff --git a/src/TaglibSharp.Tests/Images/Validators/ImageTest.cs b/src/TaglibSharp.Tests/Images/Validators/ImageTest.cs
+index dfbd151..65f6d9d 100644
+--- a/src/TaglibSharp.Tests/Images/Validators/ImageTest.cs
++++ b/src/TaglibSharp.Tests/Images/Validators/ImageTest.cs
+@@ -5,6 +5,7 @@
+
+ using SixLabors.ImageSharp;
+ using SixLabors.ImageSharp.Advanced;
++using SixLabors.ImageSharp.PixelFormats;
+
+ using TagLib;
+
+@@ -146,9 +147,9 @@ string ReadImageData (TagLib.Image.File file)
+ // TODO, ImageSharp doesn't support tiff yet (4/25/2020): https://github.com/SixLabors/ImageSharp/issues/12
+ md5Sum = "";// Utils.Md5Encode (v.Data);
+ } else {
+- using var image = Image.Load (v.Data);
+- image.TryGetSinglePixelSpan (out var span);
+- byte[] result = MemoryMarshal.AsBytes (span).ToArray ();
++ using var image = Image.Load (v.Data);
++ image.DangerousTryGetSinglePixelMemory (out var memory);
++ byte[] result = MemoryMarshal.AsBytes (memory.Span).ToArray ();
+ md5Sum = Utils.Md5Encode (result);
+ }
+
+diff --git a/src/TaglibSharp.Tests/TaglibSharp.Tests.csproj b/src/TaglibSharp.Tests/TaglibSharp.Tests.csproj
+index 5e1466b..09061a8 100644
+--- a/src/TaglibSharp.Tests/TaglibSharp.Tests.csproj
++++ b/src/TaglibSharp.Tests/TaglibSharp.Tests.csproj
+@@ -12,13 +12,13 @@
+
+
+
+-
+-
+-
++
++
++
+
+
+-
+-
++
++
+
+
+
diff --git a/src/TaglibSharp/Aac/AudioHeader.cs b/src/TaglibSharp/Aac/AudioHeader.cs
index 50613aa..8828d19 100644
--- a/src/TaglibSharp/Aac/AudioHeader.cs
+++ b/src/TaglibSharp/Aac/AudioHeader.cs
-@@ -203,6 +203,18 @@ public class AudioHeader : IAudioCodec
+@@ -203,6 +203,18 @@ public int AudioBitrate {
}
}
@@ -25,7 +95,7 @@ diff --git a/src/TaglibSharp/Aiff/StreamHeader.cs b/src/TaglibSharp/Aiff/StreamH
index 318be17..8ad1ec4 100644
--- a/src/TaglibSharp/Aiff/StreamHeader.cs
+++ b/src/TaglibSharp/Aiff/StreamHeader.cs
-@@ -205,6 +205,18 @@ public StreamHeader (ByteVector data, long streamLength)
+@@ -205,6 +205,18 @@ public int AudioBitrate {
}
}
@@ -48,7 +118,7 @@ diff --git a/src/TaglibSharp/Ape/StreamHeader.cs b/src/TaglibSharp/Ape/StreamHea
index 75a2675..4bdd5c3 100644
--- a/src/TaglibSharp/Ape/StreamHeader.cs
+++ b/src/TaglibSharp/Ape/StreamHeader.cs
-@@ -294,6 +294,18 @@ public StreamHeader (ByteVector data, long streamLength)
+@@ -294,6 +294,18 @@ public int AudioBitrate {
}
}
@@ -67,7 +137,7 @@ index 75a2675..4bdd5c3 100644
///
/// Gets the sample rate of the audio represented by the
/// current instance.
-@@ -356,4 +368,5 @@ public StreamHeader (ByteVector data, long streamLength)
+@@ -356,4 +368,5 @@ public int BitsPerSample {
public CompressionLevel Compression { get; private set; }
#endregion
@@ -80,7 +150,7 @@ diff --git a/src/TaglibSharp/Ape/Tag.cs b/src/TaglibSharp/Ape/Tag.cs
index c3b631b..49a7f37 100644
--- a/src/TaglibSharp/Ape/Tag.cs
+++ b/src/TaglibSharp/Ape/Tag.cs
-@@ -1536,6 +1536,74 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -1536,6 +1536,74 @@ public override string MusicBrainzReleaseCountry {
set { SetValue ("RELEASECOUNTRY", value); }
}
@@ -159,7 +229,7 @@ diff --git a/src/TaglibSharp/Asf/FilePropertiesObject.cs b/src/TaglibSharp/Asf/F
index fc0f513..64111bd 100644
--- a/src/TaglibSharp/Asf/FilePropertiesObject.cs
+++ b/src/TaglibSharp/Asf/FilePropertiesObject.cs
-@@ -198,6 +198,12 @@ public FilePropertiesObject (File file, long position)
+@@ -198,6 +198,12 @@ public TimeSpan SendDuration {
///
public ulong Preroll { get; private set; }
@@ -176,7 +246,7 @@ diff --git a/src/TaglibSharp/Asf/Tag.cs b/src/TaglibSharp/Asf/Tag.cs
index 84717ba..5251b84 100644
--- a/src/TaglibSharp/Asf/Tag.cs
+++ b/src/TaglibSharp/Asf/Tag.cs
-@@ -1298,6 +1298,40 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -1298,6 +1298,40 @@ public override string MusicBrainzReleaseCountry {
set { SetDescriptorString (value, "MusicBrainz/Album Release Country"); }
}
@@ -221,7 +291,7 @@ diff --git a/src/TaglibSharp/CombinedTag.cs b/src/TaglibSharp/CombinedTag.cs
index 009eb8f..ee59e6e 100644
--- a/src/TaglibSharp/CombinedTag.cs
+++ b/src/TaglibSharp/CombinedTag.cs
-@@ -1637,6 +1637,162 @@ protected void ClearTags ()
+@@ -1637,6 +1637,162 @@ public override string MusicBrainzReleaseCountry {
}
}
@@ -388,7 +458,7 @@ diff --git a/src/TaglibSharp/Dsf/StreamHeader.cs b/src/TaglibSharp/Dsf/StreamHea
index 339d2f3..0651c84 100644
--- a/src/TaglibSharp/Dsf/StreamHeader.cs
+++ b/src/TaglibSharp/Dsf/StreamHeader.cs
-@@ -249,6 +249,18 @@ public StreamHeader (ByteVector data, long streamLength)
+@@ -249,6 +249,18 @@ public int AudioBitrate {
}
}
@@ -423,7 +493,7 @@ index ecc4955..1bfb20a 100644
IsLastBlock = false;
BlockSize = blockSize;
diff --git a/src/TaglibSharp/Flac/Picture.cs b/src/TaglibSharp/Flac/Picture.cs
-index 8b6659f..4685ad5 100644
+index 8b6659f..3a41783 100644
--- a/src/TaglibSharp/Flac/Picture.cs
+++ b/src/TaglibSharp/Flac/Picture.cs
@@ -22,6 +22,7 @@
@@ -440,7 +510,7 @@ index 8b6659f..4685ad5 100644
- if (!(picture is Picture flac_picture))
+ if (!(picture is Picture flac_picture)) {
-+#if NET47 || NET20
++#if NET48 || NET20
+ try
+ {
+ using (System.Drawing.Image ipicture_picture = (Bitmap)((new ImageConverter ()).ConvertFrom (picture.Data.Data)))
@@ -464,7 +534,7 @@ diff --git a/src/TaglibSharp/Flac/StreamHeader.cs b/src/TaglibSharp/Flac/StreamH
index 5a57bbc..0c4d054 100644
--- a/src/TaglibSharp/Flac/StreamHeader.cs
+++ b/src/TaglibSharp/Flac/StreamHeader.cs
-@@ -130,6 +130,18 @@ public StreamHeader (ByteVector data, long streamLength)
+@@ -130,6 +130,18 @@ public int AudioBitrate {
}
}
@@ -537,7 +607,7 @@ diff --git a/src/TaglibSharp/Id3v2/Tag.cs b/src/TaglibSharp/Id3v2/Tag.cs
index 1c3676f..c780d76 100644
--- a/src/TaglibSharp/Id3v2/Tag.cs
+++ b/src/TaglibSharp/Id3v2/Tag.cs
-@@ -2083,6 +2083,77 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -2083,6 +2083,77 @@ public override string MusicBrainzReleaseCountry {
set { SetUserTextAsString ("MusicBrainz Album Release Country", value); }
}
@@ -619,7 +689,7 @@ diff --git a/src/TaglibSharp/Matroska/AudioTrack.cs b/src/TaglibSharp/Matroska/A
index e3ee49e..062f5cf 100644
--- a/src/TaglibSharp/Matroska/AudioTrack.cs
+++ b/src/TaglibSharp/Matroska/AudioTrack.cs
-@@ -127,6 +127,18 @@ public AudioTrack (File _file, EBMLreader element)
+@@ -127,6 +127,18 @@ public int AudioBitrate {
get { return 0; }
}
@@ -642,7 +712,7 @@ diff --git a/src/TaglibSharp/Matroska/Tag.cs b/src/TaglibSharp/Matroska/Tag.cs
index 0fc3f7d..bc139ee 100644
--- a/src/TaglibSharp/Matroska/Tag.cs
+++ b/src/TaglibSharp/Matroska/Tag.cs
-@@ -1248,6 +1248,34 @@ uint GetUint (string key, string subkey = null, bool recu = false)
+@@ -1248,6 +1248,34 @@ public override string MusicBrainzReleaseCountry {
set { }
}
@@ -681,7 +751,7 @@ diff --git a/src/TaglibSharp/Mpc/StreamHeader.cs b/src/TaglibSharp/Mpc/StreamHea
index 16bb005..987114c 100644
--- a/src/TaglibSharp/Mpc/StreamHeader.cs
+++ b/src/TaglibSharp/Mpc/StreamHeader.cs
-@@ -361,6 +361,18 @@ ulong ReadSize (ByteVector data, ref int pos)
+@@ -361,6 +361,18 @@ public int AudioBitrate {
}
}
@@ -704,7 +774,7 @@ diff --git a/src/TaglibSharp/Mpeg/AudioHeader.cs b/src/TaglibSharp/Mpeg/AudioHea
index d18ea77..06a15e1 100644
--- a/src/TaglibSharp/Mpeg/AudioHeader.cs
+++ b/src/TaglibSharp/Mpeg/AudioHeader.cs
-@@ -356,6 +356,18 @@ public struct AudioHeader : IAudioCodec
+@@ -356,6 +356,18 @@ public int AudioBitrate {
}
}
@@ -762,7 +832,7 @@ index 020aab1..ac53ef5 100644
continue;
} else {
return (AppleDataBox)box.GetChild (BoxType.Data);
-@@ -1580,6 +1585,77 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -1580,6 +1585,77 @@ public override string MusicBrainzReleaseCountry {
set { SetDashBox ("com.apple.iTunes", "MusicBrainz Album Release Country", value); }
}
@@ -840,7 +910,7 @@ index 020aab1..ac53ef5 100644
///
/// Gets and sets the ReplayGain Track Value of the media represented by
/// the current instance.
-@@ -1742,21 +1818,21 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -1742,21 +1818,21 @@ public override string ISRC {
set { SetDashBox ("com.apple.iTunes", "ISRC", value); }
}
@@ -877,24 +947,11 @@ index 020aab1..ac53ef5 100644
///
/// Gets and sets the Remixer
-diff --git a/src/TaglibSharp/Mpeg4/BoxFactory.cs b/src/TaglibSharp/Mpeg4/BoxFactory.cs
-index 1c952f6..0fed9f4 100644
---- a/src/TaglibSharp/Mpeg4/BoxFactory.cs
-+++ b/src/TaglibSharp/Mpeg4/BoxFactory.cs
-@@ -112,7 +112,7 @@ public static class BoxFactory
- return new AppleElementaryStreamDescriptor (header, file, handler);
- else if (type == BoxType.Free || type == BoxType.Skip)
- return new IsoFreeSpaceBox (header, file, handler);
-- else if (type == BoxType.Mean || type == BoxType.Name)
-+ else if ((type == BoxType.Mean || type == BoxType.Name) && header.DataSize >= 4)
- return new AppleAdditionalInfoBox (header, file, handler);
-
- // If we still don't have a tag, and we're inside an
diff --git a/src/TaglibSharp/Mpeg4/Boxes/IsoAudioSampleEntry.cs b/src/TaglibSharp/Mpeg4/Boxes/IsoAudioSampleEntry.cs
index d8f71c3..6f59f99 100644
--- a/src/TaglibSharp/Mpeg4/Boxes/IsoAudioSampleEntry.cs
+++ b/src/TaglibSharp/Mpeg4/Boxes/IsoAudioSampleEntry.cs
-@@ -189,6 +189,18 @@ public IsoAudioSampleEntry (BoxHeader header, TagLib.File file, IsoHandlerBox ha
+@@ -189,6 +189,18 @@ public int AudioBitrate {
}
}
@@ -917,7 +974,7 @@ diff --git a/src/TaglibSharp/Ogg/Codecs/Opus.cs b/src/TaglibSharp/Ogg/Codecs/Opu
index a4717cc..68f2219 100644
--- a/src/TaglibSharp/Ogg/Codecs/Opus.cs
+++ b/src/TaglibSharp/Ogg/Codecs/Opus.cs
-@@ -209,6 +209,18 @@ public override void SetCommentPacket (ByteVectorCollection packets, XiphComment
+@@ -209,6 +209,18 @@ public int AudioBitrate {
get { return 0; }
}
@@ -952,7 +1009,7 @@ index 917f9cb..c6c8438 100644
else
packets.Insert (1, data);
}
-@@ -203,6 +207,18 @@ public override void SetCommentPacket (ByteVectorCollection packets, XiphComment
+@@ -203,6 +207,18 @@ public int AudioBitrate {
}
}
@@ -975,7 +1032,7 @@ diff --git a/src/TaglibSharp/Ogg/GroupedComment.cs b/src/TaglibSharp/Ogg/Grouped
index 80f2a90..2b30997 100644
--- a/src/TaglibSharp/Ogg/GroupedComment.cs
+++ b/src/TaglibSharp/Ogg/GroupedComment.cs
-@@ -1290,6 +1290,138 @@ public void AddComment (uint streamSerialNumber, ByteVector data)
+@@ -1290,6 +1290,138 @@ public override string MusicBrainzReleaseCountry {
set { if (tags.Count > 0) tags[0].MusicBrainzReleaseCountry = value; }
}
@@ -1118,7 +1175,7 @@ diff --git a/src/TaglibSharp/Ogg/XiphComment.cs b/src/TaglibSharp/Ogg/XiphCommen
index dd1f98e..102c200 100644
--- a/src/TaglibSharp/Ogg/XiphComment.cs
+++ b/src/TaglibSharp/Ogg/XiphComment.cs
-@@ -982,6 +982,10 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -982,6 +982,10 @@ public override uint TrackCount {
null && uint.TryParse (text, out var value))
return value;
@@ -1129,7 +1186,7 @@ index dd1f98e..102c200 100644
if ((text = GetFirstField ("TRACKNUMBER")) !=
null && (values = text.Split ('/'))
.Length > 1 && uint.TryParse (
-@@ -1047,6 +1051,10 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -1047,6 +1051,10 @@ public override uint DiscCount {
&& uint.TryParse (text, out var value))
return value;
@@ -1140,7 +1197,7 @@ index dd1f98e..102c200 100644
if ((text = GetFirstField ("DISCNUMBER")) !=
null && (values = text.Split ('/'))
.Length > 1 && uint.TryParse (
-@@ -1400,6 +1408,74 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -1400,6 +1408,74 @@ public override string MusicBrainzReleaseCountry {
set { SetField ("RELEASECOUNTRY", value); }
}
@@ -1215,7 +1272,7 @@ index dd1f98e..102c200 100644
///
/// Gets and sets a collection of pictures associated with
/// the media represented by the current instance.
-@@ -1637,19 +1713,19 @@ IEnumerator IEnumerable.GetEnumerator ()
+@@ -1637,19 +1713,19 @@ public override string RemixedBy {
set { SetField ("REMIXEDBY", value); }
}
@@ -1252,7 +1309,7 @@ diff --git a/src/TaglibSharp/Properties.cs b/src/TaglibSharp/Properties.cs
index befda88..5a6ce9a 100644
--- a/src/TaglibSharp/Properties.cs
+++ b/src/TaglibSharp/Properties.cs
-@@ -242,6 +242,32 @@ public Properties (TimeSpan duration, IEnumerable codecs)
+@@ -242,6 +242,32 @@ public int AudioBitrate {
}
}
@@ -1289,7 +1346,7 @@ diff --git a/src/TaglibSharp/Riff/WaveFormatEx.cs b/src/TaglibSharp/Riff/WaveFor
index 360a2b6..03b2873 100644
--- a/src/TaglibSharp/Riff/WaveFormatEx.cs
+++ b/src/TaglibSharp/Riff/WaveFormatEx.cs
-@@ -179,6 +179,18 @@ public WaveFormatEx (ByteVector data, int offset)
+@@ -179,6 +179,18 @@ public int AudioBitrate {
}
}
@@ -1312,7 +1369,7 @@ diff --git a/src/TaglibSharp/Tag.cs b/src/TaglibSharp/Tag.cs
index 9e5c00b..4ef6fc5 100644
--- a/src/TaglibSharp/Tag.cs
+++ b/src/TaglibSharp/Tag.cs
-@@ -1078,6 +1078,66 @@ public abstract class Tag
+@@ -1078,6 +1078,66 @@ public virtual string Length {
set { }
}
@@ -1380,7 +1437,7 @@ index 9e5c00b..4ef6fc5 100644
/// Gets and sets a collection of pictures associated with
/// the media represented by the current instance.
diff --git a/src/TaglibSharp/TaglibSharp.csproj b/src/TaglibSharp/TaglibSharp.csproj
-index 88ac00d..aec9676 100644
+index 23bdd8e..cb4bd9c 100644
--- a/src/TaglibSharp/TaglibSharp.csproj
+++ b/src/TaglibSharp/TaglibSharp.csproj
@@ -1,6 +1,8 @@
@@ -1388,7 +1445,7 @@ index 88ac00d..aec9676 100644
+ 2.3.0.0
-+ net47;netstandard2.0
++ netstandard2.1
$(LibTargetFrameworks)
bin\$(Configuration)\$(TargetFramework)\TaglibSharp.xml
TagLibSharp
diff --git a/collect_files.bat b/collect_files.bat
index f65e179e7..5b5d0ceb6 100644
--- a/collect_files.bat
+++ b/collect_files.bat
@@ -1,140 +1,109 @@
-@ECHO OFF
-REM This script collects the built .exe, .dll etc. files required for running CUETools
-REM Wolfgang Stöggl , 2020-2025.
-
-REM The script is located in the subdirectory CUETools
-echo %~dp0
-pushd %~dp0
-SET base_dir=.
-
-REM Get version of CUETools
-for /f "tokens=7 delims= " %%a in ('find "CUEToolsVersion =" %base_dir%\CUETools.Processor\CUESheet.cs') do set PRODUCTVER=%%a
-REM echo %PRODUCTVER%
-REM "2.1.7";
-
-REM Remove double quotes and semicolon
-set PRODUCTVER=%PRODUCTVER:"=%
-set PRODUCTVER=%PRODUCTVER:;=%
-echo CUETools version: %PRODUCTVER%
-
-SET release_dir=%base_dir%\bin\Release\CUETools_%PRODUCTVER%
-
-mkdir %release_dir%
-
-REM use xcopy instead of copy. xcopy creates directories if necessary and outputs the copied file
-REM /Y Suppresses prompting to confirm that you want to overwrite an existing destination file.
-REM /D xcopy copies all Source files that are newer than existing Destination files
-
-REM 32 files from net47
-xcopy /Y /D %base_dir%\bin\Release\net47\BluTools.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\BluTools.exe.config %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUEControls.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUERipper.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUERipper.exe.config %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.AccurateRip.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.ALACEnc.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.ALACEnc.exe.config %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.ARCUE.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.CDImage.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Codecs.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Compression.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Converter.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.CTDB.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.CTDB.Types.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.eac3to.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.eac3to.exe.config %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.exe.config %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.FLACCL.cmd.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.FLACCL.cmd.exe.config %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Flake.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Flake.exe.config %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Parity.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Processor.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Ripper.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Ripper.Console.exe %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Ripper.Console.exe.config %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\DeviceId.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\Freedb.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\ProgressODoom.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\TagLibSharp.dll %release_dir%
-
-xcopy /Y /D %base_dir%\License.txt %release_dir%
-xcopy /Y /D %base_dir%\CUETools\user_profiles_enabled %release_dir%
-
-xcopy /Y /D %base_dir%\bin\Release\net47\de-DE\* %release_dir%\de-DE\
-xcopy /Y /D %base_dir%\bin\Release\net47\ru-RU\* %release_dir%\ru-RU\
-
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\Bwg.Hardware.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\Bwg.Logging.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\Bwg.Scsi.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.ALAC.dll %release_dir%\plugins\
-REM No more win32\CUETools.Codecs.BDLPCM.dll and win32\CUETools.Codecs.BDLPCM.dll. Instead: CUETools.Codecs.MPEG.dll
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.MPEG.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.FLACCL.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.Flake.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.HDCD.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.libFLAC.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.libmp3lame.dll %release_dir%\plugins\
-REM No more win32\CUETools.Codecs.WavPack.dll and x64\CUETools.Codecs.WavPack.dll. Instead: CUETools.Codecs.libwavpack.dll
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.libwavpack.dll %release_dir%\plugins\
-REM Nor more win32\CUETools.Codecs.APE.dll and x64\CUETools.Codecs.APE.dll. Instead: CUETools.Codecs.MACLib.dll
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.MACLib.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.WMA.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Compression.Zip.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Ripper.SCSI.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\FFmpeg.AutoGen.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\flac.cl %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\OpenCLNet.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\WindowsMediaLib.dll %release_dir%\plugins\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\CUETools.Codecs.ffmpegdll.dll %release_dir%\plugins\
-
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\win32\CUETools.Codecs.TTA.dll %release_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\win32\CUETools.Compression.Rar.dll %release_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\x64\CUETools.Codecs.TTA.dll %release_dir%\plugins\x64\
-REM CUETools.Compression.Rar.dll is the same in the win32 and x64 directory of 2.1.7. Copy from win32
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\win32\CUETools.Compression.Rar.dll %release_dir%\plugins\x64\
-
-REM plugins translation files
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\de-DE\* %release_dir%\plugins\de-DE\
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\ru-RU\* %release_dir%\plugins\ru-RU\
-
-REM ThirdParty
-xcopy /Y /D %base_dir%\ThirdParty\ICSharpCode.SharpZipLib.dll %release_dir%\plugins\
-
-REM ThirdParty\Win32 plugins
-xcopy /Y /D %base_dir%\ThirdParty\Win32\hdcd.dll %release_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdParty\Win32\libFLAC_dynamic.dll %release_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdParty\Win32\libmp3lame.dll %release_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdParty\Win32\MACLibDll.dll %release_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdParty\Win32\unrar.dll %release_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdParty\Win32\wavpackdll.dll %release_dir%\plugins\win32\
-
-REM ThirdParty\x64 plugins
-xcopy /Y /D %base_dir%\ThirdParty\x64\hdcd.dll %release_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdParty\x64\libFLAC_dynamic.dll %release_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdParty\x64\libmp3lame.dll %release_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdParty\x64\MACLibDll.dll %release_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdParty\x64\Unrar.dll %release_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdParty\x64\wavpackdll.dll %release_dir%\plugins\x64\
-
-REM EAC Plugin
-REM CUETools.CTDB.Types.dll is also required now
-xcopy /Y /D %base_dir%\bin\Release\interop\EAC\CUETools.AccurateRip.dll %release_dir%\interop\EAC\
-xcopy /Y /D %base_dir%\bin\Release\interop\EAC\CUETools.CDImage.dll %release_dir%\interop\EAC\
-xcopy /Y /D %base_dir%\bin\Release\interop\EAC\CUETools.Codecs.dll %release_dir%\interop\EAC\
-xcopy /Y /D %base_dir%\bin\Release\interop\EAC\CUETools.CTDB.dll %release_dir%\interop\EAC\
-xcopy /Y /D %base_dir%\bin\Release\interop\EAC\CUETools.CTDB.EACPlugin.dll %release_dir%\interop\EAC\
-xcopy /Y /D %base_dir%\bin\Release\interop\EAC\CUETools.CTDB.Types.dll %release_dir%\interop\EAC\
-xcopy /Y /D %base_dir%\bin\Release\interop\EAC\CUETools.Parity.dll %release_dir%\interop\EAC\
-xcopy /Y /D %base_dir%\bin\Release\interop\EAC\Newtonsoft.Json.dll %release_dir%\interop\EAC\
-
-REM required for running CUERipper:
-REM Newtonsoft.Json.dll
-xcopy /Y /D %base_dir%\bin\Release\net47\plugins\Newtonsoft.Json.dll %release_dir%
-
-REM CUETools.LossyWAV.exe was not in 2.1.7 release, added
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.Codecs.LossyWAV.dll %release_dir%
-xcopy /Y /D %base_dir%\bin\Release\net47\CUETools.LossyWAV.exe %release_dir%
-
-popd
+@ECHO OFF
+REM Collect the built .exe, .dll, .json, and config files required for running CUETools.
+REM Wolfgang Stoeggl , 2020-2026.
+
+REM The script is located in the CUETools repository root.
+echo %~dp0
+pushd %~dp0
+SET base_dir=.
+
+REM Get version of CUETools
+for /f "tokens=7 delims= " %%a in ('find "CUEToolsVersion =" %base_dir%\CUETools.Processor\CUESheet.cs') do set PRODUCTVER=%%a
+REM echo %PRODUCTVER%
+REM "2.1.7";
+
+REM Remove double quotes and semicolon
+set PRODUCTVER=%PRODUCTVER:"=%
+set PRODUCTVER=%PRODUCTVER:;=%
+echo CUETools version: %PRODUCTVER%
+
+SET release_dir=%base_dir%\bin\Release\CUETools_%PRODUCTVER%
+SET win_dir=%base_dir%\bin\Release\net10.0-windows
+SET cli_dir=%base_dir%\bin\Release\net10.0
+SET lib_dir=%base_dir%\bin\Release\netstandard2.1
+
+if not exist "%release_dir%" mkdir "%release_dir%"
+
+REM use xcopy instead of copy. xcopy creates directories if necessary and outputs the copied file.
+REM /Y Suppresses prompting to confirm that you want to overwrite an existing destination file.
+REM /D xcopy copies all Source files that are newer than existing Destination files.
+REM /I treats the destination as a directory and avoids interactive prompts in batch mode.
+
+REM Windows applications and their runtime metadata.
+xcopy /Y /D /I "%win_dir%\*.exe" "%release_dir%\"
+xcopy /Y /D /I "%win_dir%\*.dll" "%release_dir%\"
+xcopy /Y /D /I "%win_dir%\*.deps.json" "%release_dir%\"
+xcopy /Y /D /I "%win_dir%\*.runtimeconfig.json" "%release_dir%\"
+xcopy /Y /D /I "%win_dir%\*.config" "%release_dir%\"
+xcopy /Y /D /I "%win_dir%\de-DE\*" "%release_dir%\de-DE\"
+xcopy /Y /D /I "%win_dir%\ru-RU\*" "%release_dir%\ru-RU\"
+
+REM Console tools and their runtime metadata.
+xcopy /Y /D /I "%cli_dir%\*.exe" "%release_dir%\"
+xcopy /Y /D /I "%cli_dir%\*.dll" "%release_dir%\"
+xcopy /Y /D /I "%cli_dir%\*.deps.json" "%release_dir%\"
+xcopy /Y /D /I "%cli_dir%\*.runtimeconfig.json" "%release_dir%\"
+xcopy /Y /D /I "%cli_dir%\*.config" "%release_dir%\"
+
+xcopy /Y /D /I "%base_dir%\License.txt" "%release_dir%\"
+xcopy /Y /D /I "%base_dir%\CUETools\user_profiles_enabled" "%release_dir%\"
+
+REM Managed plugins. Most plugins are libraries under netstandard2.1; FLACCL remains Windows-only.
+xcopy /Y /D /I /S "%lib_dir%\plugins\*.dll" "%release_dir%\plugins\"
+xcopy /Y /D /I /S "%lib_dir%\plugins\*.deps.json" "%release_dir%\plugins\"
+xcopy /Y /D /I /S "%win_dir%\plugins\*.dll" "%release_dir%\plugins\"
+xcopy /Y /D /I /S "%win_dir%\plugins\*.deps.json" "%release_dir%\plugins\"
+xcopy /Y /D /I /S "%win_dir%\plugins\*.cl" "%release_dir%\plugins\"
+
+REM ThirdParty
+IF EXIST "%base_dir%\ThirdParty\ICSharpCode.SharpZipLib.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\ICSharpCode.SharpZipLib.dll" "%release_dir%\plugins\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\ICSharpCode.SharpZipLib.dll
+
+REM ThirdParty\Win32 plugins
+IF EXIST "%base_dir%\ThirdParty\Win32\hdcd.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\Win32\hdcd.dll" "%release_dir%\plugins\win32\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\Win32\hdcd.dll
+IF EXIST "%base_dir%\ThirdParty\Win32\libFLAC_dynamic.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\Win32\libFLAC_dynamic.dll" "%release_dir%\plugins\win32\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\Win32\libFLAC_dynamic.dll
+IF EXIST "%base_dir%\ThirdParty\Win32\libmp3lame.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\Win32\libmp3lame.dll" "%release_dir%\plugins\win32\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\Win32\libmp3lame.dll
+IF EXIST "%base_dir%\ThirdParty\Win32\MACLibDll.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\Win32\MACLibDll.dll" "%release_dir%\plugins\win32\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\Win32\MACLibDll.dll
+IF EXIST "%base_dir%\ThirdParty\Win32\unrar.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\Win32\unrar.dll" "%release_dir%\plugins\win32\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\Win32\unrar.dll
+IF EXIST "%base_dir%\ThirdParty\Win32\wavpackdll.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\Win32\wavpackdll.dll" "%release_dir%\plugins\win32\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\Win32\wavpackdll.dll
+
+REM ThirdParty\x64 plugins
+IF EXIST "%base_dir%\ThirdParty\x64\hdcd.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\x64\hdcd.dll" "%release_dir%\plugins\x64\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\x64\hdcd.dll
+IF EXIST "%base_dir%\ThirdParty\x64\libFLAC_dynamic.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\x64\libFLAC_dynamic.dll" "%release_dir%\plugins\x64\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\x64\libFLAC_dynamic.dll
+IF EXIST "%base_dir%\ThirdParty\x64\libmp3lame.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\x64\libmp3lame.dll" "%release_dir%\plugins\x64\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\x64\libmp3lame.dll
+IF EXIST "%base_dir%\ThirdParty\x64\MACLibDll.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\x64\MACLibDll.dll" "%release_dir%\plugins\x64\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\x64\MACLibDll.dll
+IF EXIST "%base_dir%\ThirdParty\x64\Unrar.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\x64\Unrar.dll" "%release_dir%\plugins\x64\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\x64\Unrar.dll
+IF EXIST "%base_dir%\ThirdParty\x64\wavpackdll.dll" (
+ xcopy /Y /D /I "%base_dir%\ThirdParty\x64\wavpackdll.dll" "%release_dir%\plugins\x64\"
+) ELSE echo WARNING: Missing %base_dir%\ThirdParty\x64\wavpackdll.dll
+
+REM EAC Plugin
+xcopy /Y /D /I "%win_dir%\interop\EAC\*.dll" "%release_dir%\interop\EAC\"
+xcopy /Y /D /I "%win_dir%\interop\EAC\*.deps.json" "%release_dir%\interop\EAC\"
+xcopy /Y /D /I "%win_dir%\interop\EAC\*.config" "%release_dir%\interop\EAC\"
+xcopy /Y /D /I "%win_dir%\Newtonsoft.Json.dll" "%release_dir%\interop\EAC\"
+
+popd
diff --git a/collect_files_debug.bat b/collect_files_debug.bat
index 570a4305d..dac9b9c93 100644
--- a/collect_files_debug.bat
+++ b/collect_files_debug.bat
@@ -1,42 +1,57 @@
-@ECHO OFF
-REM This script collects built .dll and .pdb files from ThirdParty for debugging CUETools.
-REM Wolfgang Stöggl , 2020-2025.
-
-REM The script is located in the subdirectory CUETools
-echo %~dp0
-pushd %~dp0
-SET base_dir=.
-SET debug_dir=%base_dir%\bin\Debug\net47
-
-REM use xcopy instead of copy. xcopy creates directories if necessary and outputs the copied file
-REM /Y Suppresses prompting to confirm that you want to overwrite an existing destination file.
-REM /D xcopy copies all Source files that are newer than existing Destination files
-
-REM xcopy /Y /D %base_dir%\CUETools\user_profiles_enabled %debug_dir%
-
-REM ThirdParty
-xcopy /Y /D %base_dir%\ThirdParty\ICSharpCode.SharpZipLib.dll %debug_dir%\plugins\
-
-REM ThirdParty\Win32 plugins
-xcopy /Y /D %base_dir%\ThirdParty\Win32\hdcd.dll %debug_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\Win32\libFLAC_dynamic.dll %debug_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\Win32\libFLAC_dynamic.pdb %debug_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdParty\Win32\libmp3lame.dll %debug_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\Win32\MACLibDll.dll %debug_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\Win32\MACLibDll.pdb %debug_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdParty\Win32\unrar.dll %debug_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\Win32\wavpackdll.dll %debug_dir%\plugins\win32\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\Win32\wavpackdll.pdb %debug_dir%\plugins\win32\
-
-REM ThirdParty\x64 plugins
-xcopy /Y /D %base_dir%\ThirdParty\x64\hdcd.dll %debug_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\x64\libFLAC_dynamic.dll %debug_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\x64\libFLAC_dynamic.pdb %debug_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdParty\x64\libmp3lame.dll %debug_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\x64\MACLibDll.dll %debug_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\x64\MACLibDll.pdb %debug_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdParty\x64\Unrar.dll %debug_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\x64\wavpackdll.dll %debug_dir%\plugins\x64\
-xcopy /Y /D %base_dir%\ThirdPartyDebug\x64\wavpackdll.pdb %debug_dir%\plugins\x64\
-
-popd
+@ECHO OFF
+REM Collect native ThirdParty .dll and .pdb files for debugging CUETools.
+REM Wolfgang Stoeggl , 2020-2026.
+
+REM The script is located in the CUETools repository root.
+echo %~dp0
+pushd %~dp0
+SET base_dir=.
+SET debug_win_dir=%base_dir%\bin\Debug\net10.0-windows
+SET debug_lib_dir=%base_dir%\bin\Debug\netstandard2.1
+
+REM use xcopy instead of copy. xcopy creates directories if necessary and outputs the copied file.
+REM /Y Suppresses prompting to confirm that you want to overwrite an existing destination file.
+REM /D xcopy copies all Source files that are newer than existing Destination files.
+
+call :copy_native "%debug_win_dir%"
+call :copy_native "%debug_lib_dir%"
+
+popd
+goto :eof
+
+:copy_native
+SET target_dir=%~1
+
+REM ThirdParty
+call :copy_file "%base_dir%\ThirdParty\ICSharpCode.SharpZipLib.dll" "%target_dir%\plugins\"
+
+REM ThirdParty\Win32 plugins
+call :copy_file "%base_dir%\ThirdParty\Win32\hdcd.dll" "%target_dir%\plugins\win32\"
+call :copy_file "%base_dir%\ThirdPartyDebug\Win32\libFLAC_dynamic.dll" "%target_dir%\plugins\win32\"
+call :copy_file "%base_dir%\ThirdPartyDebug\Win32\libFLAC_dynamic.pdb" "%target_dir%\plugins\win32\"
+call :copy_file "%base_dir%\ThirdParty\Win32\libmp3lame.dll" "%target_dir%\plugins\win32\"
+call :copy_file "%base_dir%\ThirdPartyDebug\Win32\MACLibDll.dll" "%target_dir%\plugins\win32\"
+call :copy_file "%base_dir%\ThirdPartyDebug\Win32\MACLibDll.pdb" "%target_dir%\plugins\win32\"
+call :copy_file "%base_dir%\ThirdParty\Win32\unrar.dll" "%target_dir%\plugins\win32\"
+call :copy_file "%base_dir%\ThirdPartyDebug\Win32\wavpackdll.dll" "%target_dir%\plugins\win32\"
+call :copy_file "%base_dir%\ThirdPartyDebug\Win32\wavpackdll.pdb" "%target_dir%\plugins\win32\"
+
+REM ThirdParty\x64 plugins
+call :copy_file "%base_dir%\ThirdParty\x64\hdcd.dll" "%target_dir%\plugins\x64\"
+call :copy_file "%base_dir%\ThirdPartyDebug\x64\libFLAC_dynamic.dll" "%target_dir%\plugins\x64\"
+call :copy_file "%base_dir%\ThirdPartyDebug\x64\libFLAC_dynamic.pdb" "%target_dir%\plugins\x64\"
+call :copy_file "%base_dir%\ThirdParty\x64\libmp3lame.dll" "%target_dir%\plugins\x64\"
+call :copy_file "%base_dir%\ThirdPartyDebug\x64\MACLibDll.dll" "%target_dir%\plugins\x64\"
+call :copy_file "%base_dir%\ThirdPartyDebug\x64\MACLibDll.pdb" "%target_dir%\plugins\x64\"
+call :copy_file "%base_dir%\ThirdParty\x64\Unrar.dll" "%target_dir%\plugins\x64\"
+call :copy_file "%base_dir%\ThirdPartyDebug\x64\wavpackdll.dll" "%target_dir%\plugins\x64\"
+call :copy_file "%base_dir%\ThirdPartyDebug\x64\wavpackdll.pdb" "%target_dir%\plugins\x64\"
+exit /b 0
+
+:copy_file
+if exist "%~1" (
+ xcopy /Y /D /I "%~1" "%~2"
+) else (
+ echo WARNING: Missing %~1
+)
+exit /b 0
diff --git a/global.json b/global.json
new file mode 100644
index 000000000..17d728e19
--- /dev/null
+++ b/global.json
@@ -0,0 +1,7 @@
+{
+ "sdk": {
+ "version": "10.0.300",
+ "rollForward": "latestFeature",
+ "allowPrerelease": false
+ }
+}