diff --git a/ALACDotNet/ALACDotNet.cs b/ALACDotNet/ALACDotNet.cs index 036dbfd..2df5354 100644 --- a/ALACDotNet/ALACDotNet.cs +++ b/ALACDotNet/ALACDotNet.cs @@ -3,7 +3,7 @@ using System.Text; using System.IO; using System.Collections.Generic; using System.Collections.Specialized; -using AudioCodecsDotNet; +using CUETools.Codecs; //Copyright (c) 2008 Gregory S. Chudov. //This library is based on ALAC decoder by David Hammerton. @@ -25,7 +25,7 @@ using AudioCodecsDotNet; // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -namespace ALACDotNet +namespace CUETools.Codecs.ALAC { public class ALACReader : IAudioSource { diff --git a/ALACDotNet/ALACDotNet.csproj b/ALACDotNet/CUETools.Codecs.ALAC.csproj similarity index 90% rename from ALACDotNet/ALACDotNet.csproj rename to ALACDotNet/CUETools.Codecs.ALAC.csproj index 750817b..41281b4 100644 --- a/ALACDotNet/ALACDotNet.csproj +++ b/ALACDotNet/CUETools.Codecs.ALAC.csproj @@ -7,8 +7,8 @@ {F2EC7193-D5E5-4252-9803-5CEB407E910F} Library Properties - ALACDotNet - ALACDotNet + CUETools.Codecs.ALAC + CUETools.Codecs.ALAC true @@ -31,7 +31,7 @@ true - bin\x64\Debug\ + ..\bin\x64\Debug\ DEBUG;TRACE full x64 @@ -42,7 +42,7 @@ true - bin\x64\Release\ + ..\bin\x64\Release\ TRACE true pdbonly @@ -55,7 +55,7 @@ true - bin\x86\Debug\ + ..\bin\win32\Debug\ DEBUG;TRACE full x86 @@ -66,7 +66,7 @@ true - bin\x86\Release\ + ..\bin\win32\Release\ TRACE true pdbonly @@ -87,9 +87,9 @@ - + {6458A13A-30EF-45A9-9D58-E5031B17BEE2} - AudioCodecsDotNet + CUETools.Codecs diff --git a/APEDotNet/apedotnet.cpp b/APEDotNet/apedotnet.cpp index 02de089..a68b6b5 100644 --- a/APEDotNet/apedotnet.cpp +++ b/APEDotNet/apedotnet.cpp @@ -7,7 +7,7 @@ using namespace System::Collections::Specialized; using namespace System::Runtime::InteropServices; using namespace System::IO; using namespace APETagsDotNet; -using namespace AudioCodecsDotNet; +using namespace CUETools::Codecs; #ifndef _WAVEFORMATEX_ #define _WAVEFORMATEX_ diff --git a/ArCueDotNet/ArCueDotNet.csproj b/ArCueDotNet/ArCueDotNet.csproj index d2d818d..ed2bb1b 100644 --- a/ArCueDotNet/ArCueDotNet.csproj +++ b/ArCueDotNet/ArCueDotNet.csproj @@ -81,9 +81,9 @@ - + {4911BD82-49EF-4858-8B51-5394F86739A4} - CUEToolsLib + CUETools.Processor diff --git a/ArCueDotNet/Program.cs b/ArCueDotNet/Program.cs index f1393f0..103e010 100644 --- a/ArCueDotNet/Program.cs +++ b/ArCueDotNet/Program.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Text; using System.IO; -using CUEToolsLib; +using CUETools.Processor; namespace ArCueDotNet { diff --git a/CUETools.Ripper.Console/CUETools.ConsoleRipper.csproj b/CUETools.Ripper.Console/CUERipper.csproj similarity index 87% rename from CUETools.Ripper.Console/CUETools.ConsoleRipper.csproj rename to CUETools.Ripper.Console/CUERipper.csproj index 4addc0c..06b0976 100644 --- a/CUETools.Ripper.Console/CUETools.ConsoleRipper.csproj +++ b/CUETools.Ripper.Console/CUERipper.csproj @@ -7,8 +7,8 @@ {9253A314-1821-42BF-B02F-2BF986B1765D} Exe Properties - CUETools.Ripper.Console - CUETools.Ripper.Console + CUERipper + CUERipper true @@ -81,9 +81,17 @@ - + {6458A13A-30EF-45A9-9D58-E5031B17BEE2} - AudioCodecsDotNet + CUETools.Codecs + + + {5802C7E9-157E-4124-946D-70B5AE48A5A1} + CUETools.AccurateRip + + + {1DD41038-D885-46C5-8DDE-E0B82F066584} + CUETools.CDImage {8CF07381-BEA2-4AFC-B3DD-9B2F21C65A3A} diff --git a/CUETools.Ripper.Console/Program.cs b/CUETools.Ripper.Console/Program.cs index 1cca76a..406cc58 100644 --- a/CUETools.Ripper.Console/Program.cs +++ b/CUETools.Ripper.Console/Program.cs @@ -24,15 +24,16 @@ using System.IO; using System.Text; using System.Collections.Generic; using CUETools.Ripper.SCSI; -using AudioCodecsDotNet; +using CUETools.Codecs; +using CUETools.AccurateRip; -namespace CUETools.ConsoleRipper +namespace CUERipper { class Program { static void Usage() { - Console.WriteLine("Usage : CUETools.Ripper.Console.exe "); + Console.WriteLine("Usage : CUERipper.exe "); Console.WriteLine(); } @@ -56,36 +57,18 @@ namespace CUETools.ConsoleRipper CDDriveReader audioSource = new CDDriveReader(); audioSource.Open('D'); audioSource.DriveOffset = 48; - - StreamWriter logWriter = new StreamWriter(Path.ChangeExtension(destFile, ".log")); - logWriter.WriteLine("{0}", programVersion); - logWriter.WriteLine(); - logWriter.WriteLine("Extraction logfile from {0}",DateTime.Now); - logWriter.WriteLine(); - logWriter.WriteLine("Used drive : {0}", audioSource.Path); - logWriter.WriteLine(); - logWriter.WriteLine("TOC of the extracted CD"); - logWriter.WriteLine(); - logWriter.WriteLine(" Track | Start | Length | Start sector | End sector"); - logWriter.WriteLine(" ---------------------------------------------------------"); - for (int track = 0; track < audioSource.TOC.tracks.Count; track++) - logWriter.WriteLine("{0,9} | {1,8} | {2,8} | {3,9} | {4,9}", - audioSource.TOC.tracks[track].Number, - audioSource.TOC.tracks[track].Start.MSF, - audioSource.TOC.tracks[track].Length.MSF, - audioSource.TOC.tracks[track].Start.Sector, - audioSource.TOC.tracks[track].End.Sector); - logWriter.Close(); - - //audioSource.Close(); - //return; - + bool toStdout = false; + AccurateRipVerify arVerify = new AccurateRipVerify(audioSource.TOC); WAVWriter audioDest = new WAVWriter(destFile, audioSource.BitsPerSample, audioSource.ChannelCount, audioSource.SampleRate, toStdout ? Console.OpenStandardOutput() : null); int[,] buff = new int[audioSource.BestBlockSize, audioSource.ChannelCount]; - Console.WriteLine("Filename : {0}", destFile); + arVerify.ContactAccurateRip(audioSource.TOC._ArId); + Console.WriteLine("File Info : {0}kHz; {1} channel; {2} bit; {3}", audioSource.SampleRate, audioSource.ChannelCount, audioSource.BitsPerSample, TimeSpan.FromSeconds(audioSource.Length * 1.0 / audioSource.SampleRate)); + Console.WriteLine("Filename : {0}", destFile); + Console.WriteLine("AR status : {0}", arVerify.ARStatus == null ? "ok" : arVerify.ARStatus); + audioDest.FinalSampleCount = (long) audioSource.Length; DateTime start = DateTime.Now; @@ -95,6 +78,7 @@ namespace CUETools.ConsoleRipper { uint samplesRead = audioSource.Read(buff, Math.Min((uint)buff.GetLength(0), (uint)audioSource.Remaining)); if (samplesRead == 0) break; + arVerify.Write(buff, samplesRead); audioDest.Write(buff, samplesRead); TimeSpan elapsed = DateTime.Now - start; if ((elapsed - lastPrint).TotalMilliseconds > 60) @@ -117,18 +101,50 @@ namespace CUETools.ConsoleRipper ); audioDest.Close(); + StreamWriter logWriter = new StreamWriter(Path.ChangeExtension(destFile, ".log")); + logWriter.WriteLine("{0}", programVersion); + logWriter.WriteLine(); + logWriter.WriteLine("Extraction logfile from {0}", DateTime.Now); + logWriter.WriteLine(); + logWriter.WriteLine("Used drive : {0}", audioSource.Path); + logWriter.WriteLine(); + logWriter.WriteLine("Read offset correction : {0}", audioSource.DriveOffset); + logWriter.WriteLine(); + logWriter.WriteLine("TOC of the extracted CD"); + logWriter.WriteLine(); + logWriter.WriteLine(" Track | Start | Length | Start sector | End sector"); + logWriter.WriteLine(" ---------------------------------------------------------"); + for (int track = 1; track <= audioSource.TOC.TrackCount; track++) + logWriter.WriteLine("{0,9} | {1,8} | {2,8} | {3,9} | {4,9}", + audioSource.TOC[track].Number, + audioSource.TOC[track].StartMSF, + audioSource.TOC[track].LengthMSF, + audioSource.TOC[track].Start, + audioSource.TOC[track].End); + logWriter.WriteLine(); + logWriter.WriteLine("AccurateRip summary"); + logWriter.WriteLine(); + logWriter.WriteLine("Track\t[ CRC ] Status"); + arVerify.GenerateAccurateRipLog(logWriter, 0); + logWriter.WriteLine(); + logWriter.WriteLine("End of status report"); + logWriter.Close(); + StreamWriter cueWriter = new StreamWriter(Path.ChangeExtension(destFile, ".cue")); cueWriter.WriteLine("REM DISCID {0}", audioSource.TOC._cddbId); cueWriter.WriteLine("REM ACCURATERIPID {0}", audioSource.TOC._ArId); cueWriter.WriteLine("REM COMMENT \"{0}\"", programVersion); - if (audioSource.TOC._catalog != null) - cueWriter.WriteLine("CATALOG {0}", audioSource.TOC._catalog); + if (audioSource.TOC.Catalog != null) + cueWriter.WriteLine("CATALOG {0}", audioSource.TOC.Catalog); cueWriter.WriteLine("FILE \"{0}\" WAVE", destFile); - for (int track = 0; track < audioSource.TOC.tracks.Count; track++) + for (int track = 1; track <= audioSource.TOC.TrackCount; track++) + if (audioSource.TOC[track].IsAudio) { - cueWriter.WriteLine(" TRACK {0:00} AUDIO", audioSource.TOC.tracks[track].Number); - for (int index = 0; index < audioSource.TOC.tracks[track].indexes.Count; index ++) - cueWriter.WriteLine(" INDEX {0:00} {1}", audioSource.TOC.tracks[track].indexes[index].Index, audioSource.TOC.tracks[track].indexes[index].MSF); + cueWriter.WriteLine(" TRACK {0:00} AUDIO", audioSource.TOC[track].Number); + if (audioSource.TOC[track].ISRC != null) + cueWriter.WriteLine(" ISRC {0}", audioSource.TOC[track].ISRC); + for (int index = audioSource.TOC[track].Pregap > 0 ? 0 : 1; index <= audioSource.TOC[track].LastIndex; index++) + cueWriter.WriteLine(" INDEX {0:00} {1}", index, audioSource.TOC[track][index].MSF); } cueWriter.Close(); diff --git a/CUETools.Ripper.SCSI/CUETools.Ripper.SCSI.csproj b/CUETools.Ripper.SCSI/CUETools.Ripper.SCSI.csproj index 522e01c..68e4a62 100644 --- a/CUETools.Ripper.SCSI/CUETools.Ripper.SCSI.csproj +++ b/CUETools.Ripper.SCSI/CUETools.Ripper.SCSI.csproj @@ -85,9 +85,9 @@ - + {6458A13A-30EF-45A9-9D58-E5031B17BEE2} - AudioCodecsDotNet + CUETools.Codecs {F2DFEB00-BB35-4665-85EA-CB8C7729A6B7} @@ -97,6 +97,10 @@ {A05B6AA6-0EC3-495D-BCC4-ECE1210071A8} Bwg.Scsi + + {1DD41038-D885-46C5-8DDE-E0B82F066584} + CUETools.CDImage +