mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
Done with ripping for now
This commit is contained in:
@@ -231,7 +231,12 @@ namespace APEDotNet {
|
|||||||
|
|
||||||
virtual bool UpdateTags(bool preserveTime)
|
virtual bool UpdateTags(bool preserveTime)
|
||||||
{
|
{
|
||||||
return false;
|
Close ();
|
||||||
|
APETagDotNet^ apeTag = gcnew APETagDotNet (_path, true, false);
|
||||||
|
apeTag->SetStringTags (_tags, true);
|
||||||
|
apeTag->Save();
|
||||||
|
apeTag->Close();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual UInt32 Read([Out] array<Int32, 2>^ buff, UInt32 sampleCount)
|
virtual UInt32 Read([Out] array<Int32, 2>^ buff, UInt32 sampleCount)
|
||||||
|
|||||||
@@ -127,7 +127,12 @@ namespace CUETools.AccurateRip
|
|||||||
|
|
||||||
public uint CRC(int iTrack)
|
public uint CRC(int iTrack)
|
||||||
{
|
{
|
||||||
return CRC(iTrack);
|
return _offsetedCRC[iTrack, _arOffsetRange];
|
||||||
|
}
|
||||||
|
|
||||||
|
public uint BackupCRC(int iTrack)
|
||||||
|
{
|
||||||
|
return _backupCRC[iTrack];
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint CRC(int iTrack, int oi)
|
public uint CRC(int iTrack, int oi)
|
||||||
@@ -186,6 +191,13 @@ namespace CUETools.AccurateRip
|
|||||||
CheckPosition();
|
CheckPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void CreateBackup(int writeOffset)
|
||||||
|
{
|
||||||
|
_backupCRC = new uint[_toc.AudioTracks];
|
||||||
|
for (int i = 0; i < _toc.AudioTracks; i++)
|
||||||
|
_backupCRC[i] = CRC(i, writeOffset);
|
||||||
|
}
|
||||||
|
|
||||||
private void CheckPosition()
|
private void CheckPosition()
|
||||||
{
|
{
|
||||||
while (_samplesRemTrack <= 0)
|
while (_samplesRemTrack <= 0)
|
||||||
@@ -538,6 +550,7 @@ namespace CUETools.AccurateRip
|
|||||||
private HttpStatusCode _accResult;
|
private HttpStatusCode _accResult;
|
||||||
private uint[,] _offsetedCRC;
|
private uint[,] _offsetedCRC;
|
||||||
private uint[,] _offsetedFrame450CRC;
|
private uint[,] _offsetedFrame450CRC;
|
||||||
|
private uint[] _backupCRC;
|
||||||
|
|
||||||
private const int _arOffsetRange = 5 * 588 - 1;
|
private const int _arOffsetRange = 5 * 588 - 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ namespace CUERipper
|
|||||||
{
|
{
|
||||||
string programVersion = "CUERipper v1.9.3 Copyright (C) 2008 Gregory S. Chudov";
|
string programVersion = "CUERipper v1.9.3 Copyright (C) 2008 Gregory S. Chudov";
|
||||||
Console.SetOut(Console.Error);
|
Console.SetOut(Console.Error);
|
||||||
Console.WriteLine("{0}", programVersion);
|
Console.WriteLine("{0}", CDDriveReader.RipperVersion());
|
||||||
Console.WriteLine("This is free software under the GNU GPLv3+ license; There is NO WARRANTY, to");
|
Console.WriteLine("This is free software under the GNU GPLv3+ license; There is NO WARRANTY, to");
|
||||||
Console.WriteLine("the extent permitted by law. <http://www.gnu.org/licenses/> for details.");
|
Console.WriteLine("the extent permitted by law. <http://www.gnu.org/licenses/> for details.");
|
||||||
|
|
||||||
|
|||||||
@@ -430,6 +430,12 @@ namespace CUETools.Ripper.SCSI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string RipperVersion()
|
||||||
|
{
|
||||||
|
return "CUERipper v1.9.3 Copyright (C) 2008 Gregory S. Chudov";
|
||||||
|
// ripper.GetName().Name + " " + ripper.GetName().Version;
|
||||||
|
}
|
||||||
|
|
||||||
byte[] _sectorBuffer = new byte[CB_AUDIO * NSECTORS];
|
byte[] _sectorBuffer = new byte[CB_AUDIO * NSECTORS];
|
||||||
|
|
||||||
private int fromBCD(byte hex)
|
private int fromBCD(byte hex)
|
||||||
|
|||||||
@@ -171,7 +171,12 @@ namespace JDP
|
|||||||
//TimeSpan span = DateTime.Now - _startedAt;
|
//TimeSpan span = DateTime.Now - _startedAt;
|
||||||
progressBar1.Value = 0;
|
progressBar1.Value = 0;
|
||||||
progressBar2.Value = 0;
|
progressBar2.Value = 0;
|
||||||
if (cueSheet.AccurateRip != AccurateRipMode.None)
|
if (cueSheet.IsCD)
|
||||||
|
{
|
||||||
|
textBox1.Text += cueSheet.LOGContents();
|
||||||
|
textBox1.Show();
|
||||||
|
}
|
||||||
|
else if (cueSheet.AccurateRip != AccurateRipMode.None)
|
||||||
{
|
{
|
||||||
StringWriter sw = new StringWriter();
|
StringWriter sw = new StringWriter();
|
||||||
cueSheet.GenerateAccurateRipLog(sw);
|
cueSheet.GenerateAccurateRipLog(sw);
|
||||||
|
|||||||
@@ -364,7 +364,14 @@ namespace JDP {
|
|||||||
{
|
{
|
||||||
if (_batchPaths.Count == 0)
|
if (_batchPaths.Count == 0)
|
||||||
{
|
{
|
||||||
if (cueSheet.AccurateRip != AccurateRipMode.None)
|
if (cueSheet.IsCD)
|
||||||
|
{
|
||||||
|
frmReport reportForm = new frmReport();
|
||||||
|
reportForm.Message = cueSheet.LOGContents();
|
||||||
|
CenterSubForm(reportForm);
|
||||||
|
reportForm.ShowDialog(this);
|
||||||
|
}
|
||||||
|
else if (cueSheet.AccurateRip != AccurateRipMode.None)
|
||||||
{
|
{
|
||||||
frmReport reportForm = new frmReport();
|
frmReport reportForm = new frmReport();
|
||||||
StringWriter sw = new StringWriter();
|
StringWriter sw = new StringWriter();
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ namespace JDP {
|
|||||||
if (_config.wvCompressionMode == 2) rbWVHigh.Checked = true;
|
if (_config.wvCompressionMode == 2) rbWVHigh.Checked = true;
|
||||||
if (_config.wvCompressionMode == 3) rbWVVeryHigh.Checked = true;
|
if (_config.wvCompressionMode == 3) rbWVVeryHigh.Checked = true;
|
||||||
chkWVExtraMode.Checked = (_config.wvExtraMode != 0);
|
chkWVExtraMode.Checked = (_config.wvExtraMode != 0);
|
||||||
chkWVExtraMode_CheckedChanged(null, null);
|
|
||||||
if (_config.wvExtraMode != 0) numWVExtraMode.Value = _config.wvExtraMode;
|
if (_config.wvExtraMode != 0) numWVExtraMode.Value = _config.wvExtraMode;
|
||||||
chkWVStoreMD5.Checked = _config.wvStoreMD5;
|
chkWVStoreMD5.Checked = _config.wvStoreMD5;
|
||||||
switch (_config.apeCompressionLevel)
|
switch (_config.apeCompressionLevel)
|
||||||
@@ -68,6 +67,8 @@ namespace JDP {
|
|||||||
numericLossyWAVQuality.Value = _config.lossyWAVQuality;
|
numericLossyWAVQuality.Value = _config.lossyWAVQuality;
|
||||||
chkHDCDLW16.Checked = _config.decodeHDCDtoLW16;
|
chkHDCDLW16.Checked = _config.decodeHDCDtoLW16;
|
||||||
chkHDCD24bit.Checked = _config.decodeHDCDto24bit;
|
chkHDCD24bit.Checked = _config.decodeHDCDto24bit;
|
||||||
|
|
||||||
|
EnableDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void frmSettings_FormClosing(object sender, FormClosingEventArgs e) {
|
private void frmSettings_FormClosing(object sender, FormClosingEventArgs e) {
|
||||||
@@ -90,7 +91,7 @@ namespace JDP {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void chkWVExtraMode_CheckedChanged(object sender, EventArgs e) {
|
private void chkWVExtraMode_CheckedChanged(object sender, EventArgs e) {
|
||||||
numWVExtraMode.Enabled = chkWVExtraMode.Checked;
|
EnableDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnOK_Click(object sender, EventArgs e)
|
private void btnOK_Click(object sender, EventArgs e)
|
||||||
@@ -144,43 +145,59 @@ namespace JDP {
|
|||||||
_config.decodeHDCDto24bit = chkHDCD24bit.Checked;
|
_config.decodeHDCDto24bit = chkHDCD24bit.Checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chkArFixOffset_CheckedChanged(object sender, EventArgs e)
|
private void EnableDisable()
|
||||||
{
|
{
|
||||||
numFixWhenConfidence.Enabled =
|
numFixWhenConfidence.Enabled =
|
||||||
labelFixWhenConfidence.Enabled =
|
labelFixWhenConfidence.Enabled =
|
||||||
numFixWhenPercent.Enabled =
|
numFixWhenPercent.Enabled =
|
||||||
labelFixWhenPercent.Enabled = chkArFixOffset.Checked;
|
labelFixWhenPercent.Enabled = chkArFixOffset.Checked;
|
||||||
|
|
||||||
|
numEncodeWhenConfidence.Enabled =
|
||||||
|
labelEncodeWhenConfidence.Enabled =
|
||||||
|
numEncodeWhenPercent.Enabled =
|
||||||
|
labelEncodeWhenPercent.Enabled =
|
||||||
|
chkEncodeWhenZeroOffset.Enabled = chkArNoUnverifiedAudio.Checked;
|
||||||
|
|
||||||
|
grpHDCD.Enabled = chkHDCDDetect.Checked;
|
||||||
|
chkHDCDLW16.Enabled = chkHDCDDetect.Checked && chkHDCDDecode.Checked;
|
||||||
|
chkHDCD24bit.Enabled = chkHDCDDetect.Checked && chkHDCDDecode.Checked;
|
||||||
|
|
||||||
|
chkRemoveSpecial.Enabled = chkFilenamesANSISafe.Checked;
|
||||||
|
txtSpecialExceptions.Enabled = chkRemoveSpecial.Checked && chkFilenamesANSISafe.Checked;
|
||||||
|
|
||||||
|
txtSpecialExceptions.Enabled = chkRemoveSpecial.Checked;
|
||||||
|
|
||||||
|
numWVExtraMode.Enabled = chkWVExtraMode.Checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkArFixOffset_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
EnableDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chkArNoUnverifiedAudio_CheckedChanged(object sender, EventArgs e)
|
private void chkArNoUnverifiedAudio_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
numEncodeWhenConfidence.Enabled =
|
EnableDisable();
|
||||||
labelEncodeWhenConfidence.Enabled =
|
|
||||||
numEncodeWhenPercent.Enabled =
|
|
||||||
labelEncodeWhenPercent.Enabled =
|
|
||||||
chkEncodeWhenZeroOffset.Enabled = chkArNoUnverifiedAudio.Checked;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chkHDCDDetect_CheckedChanged(object sender, EventArgs e)
|
private void chkHDCDDetect_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
grpHDCD.Enabled = chkHDCDDetect.Checked;
|
EnableDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chkFilenamesANSISafe_CheckedChanged(object sender, EventArgs e)
|
private void chkFilenamesANSISafe_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
chkRemoveSpecial.Enabled = chkFilenamesANSISafe.Checked;
|
EnableDisable();
|
||||||
txtSpecialExceptions.Enabled = chkRemoveSpecial.Checked && chkFilenamesANSISafe.Checked;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chkRemoveSpecial_CheckedChanged(object sender, EventArgs e)
|
private void chkRemoveSpecial_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
txtSpecialExceptions.Enabled = chkRemoveSpecial.Checked;
|
EnableDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chkHDCDDecode_CheckedChanged(object sender, EventArgs e)
|
private void chkHDCDDecode_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
chkHDCDLW16.Enabled = chkHDCDDecode.Checked;
|
EnableDisable();
|
||||||
chkHDCD24bit.Enabled = chkHDCDDecode.Checked;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,6 @@
|
|||||||
// ****************************************************************************
|
// ****************************************************************************
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -521,7 +520,7 @@ namespace CUETools.Processor
|
|||||||
{
|
{
|
||||||
release = results.First();
|
release = results.First();
|
||||||
General.SetCUELine(_attributes, "REM", "DISCID", AccurateRipVerify.CalculateCDDBId(_toc), false);
|
General.SetCUELine(_attributes, "REM", "DISCID", AccurateRipVerify.CalculateCDDBId(_toc), false);
|
||||||
General.SetCUELine(_attributes, "REM", "COMMENT", VersionString(), true);
|
General.SetCUELine(_attributes, "REM", "COMMENT", CDDriveReader.RipperVersion(), true);
|
||||||
General.SetCUELine(_attributes, "REM", "DATE", release.GetEvents()[0].Date.Substring(0, 4), false);
|
General.SetCUELine(_attributes, "REM", "DATE", release.GetEvents()[0].Date.Substring(0, 4), false);
|
||||||
General.SetCUELine(_attributes, "PERFORMER", release.GetArtist(), true);
|
General.SetCUELine(_attributes, "PERFORMER", release.GetArtist(), true);
|
||||||
General.SetCUELine(_attributes, "TITLE", release.GetTitle(), true);
|
General.SetCUELine(_attributes, "TITLE", release.GetTitle(), true);
|
||||||
@@ -1182,24 +1181,29 @@ namespace CUETools.Processor
|
|||||||
sw1.Close();
|
sw1.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string VersionString()
|
|
||||||
{
|
|
||||||
return Assembly.GetExecutingAssembly().GetName().Name + " " + Assembly.GetExecutingAssembly().GetName().Version;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string LOGContents()
|
public string LOGContents()
|
||||||
{
|
{
|
||||||
if (!_isCD)
|
if (!_isCD)
|
||||||
return null;
|
return null;
|
||||||
#if !MONO
|
#if !MONO
|
||||||
StringWriter logWriter = new StringWriter();
|
StringWriter logWriter = new StringWriter();
|
||||||
logWriter.WriteLine("{0}", VersionString());
|
logWriter.WriteLine("{0}", CDDriveReader.RipperVersion());
|
||||||
logWriter.WriteLine();
|
logWriter.WriteLine("Extraction logfile from : {0}", DateTime.Now);
|
||||||
logWriter.WriteLine("Extraction logfile from {0}", DateTime.Now);
|
logWriter.WriteLine("Used drive : {0}", _driveName);
|
||||||
logWriter.WriteLine();
|
logWriter.WriteLine("Read offset correction : {0}", _driveOffset);
|
||||||
logWriter.WriteLine("Used drive : {0}", _driveName);
|
if (hdcdDecoder != null && hdcdDecoder.Detected)
|
||||||
logWriter.WriteLine();
|
{
|
||||||
logWriter.WriteLine("Read offset correction : {0}", _driveOffset);
|
hdcd_decoder_statistics stats;
|
||||||
|
hdcdDecoder.GetStatistics(out stats);
|
||||||
|
logWriter.WriteLine("HDCD : peak extend: {0}, transient filter: {1}, gain: {2}",
|
||||||
|
(stats.enabled_peak_extend ? (stats.disabled_peak_extend ? "some" : "yes") : "none"),
|
||||||
|
(stats.enabled_transient_filter ? (stats.disabled_transient_filter ? "some" : "yes") : "none"),
|
||||||
|
stats.min_gain_adjustment == stats.max_gain_adjustment ?
|
||||||
|
(stats.min_gain_adjustment == 1.0 ? "none" : String.Format("{0:0.0}dB", (Math.Log10(stats.min_gain_adjustment) * 20))) :
|
||||||
|
String.Format("{0:0.0}dB..{1:0.0}dB", (Math.Log10(stats.min_gain_adjustment) * 20), (Math.Log10(stats.max_gain_adjustment) * 20))
|
||||||
|
);
|
||||||
|
logWriter.WriteLine();
|
||||||
|
}
|
||||||
logWriter.WriteLine();
|
logWriter.WriteLine();
|
||||||
logWriter.WriteLine("TOC of the extracted CD");
|
logWriter.WriteLine("TOC of the extracted CD");
|
||||||
logWriter.WriteLine();
|
logWriter.WriteLine();
|
||||||
@@ -1213,6 +1217,10 @@ namespace CUETools.Processor
|
|||||||
_toc[track].Start,
|
_toc[track].Start,
|
||||||
_toc[track].End);
|
_toc[track].End);
|
||||||
logWriter.WriteLine();
|
logWriter.WriteLine();
|
||||||
|
if (_accurateRipMode == AccurateRipMode.VerifyThenConvert)
|
||||||
|
for (int iTrack = 0; iTrack < _toc.AudioTracks; iTrack++)
|
||||||
|
if (_arVerify.BackupCRC(iTrack) != _arVerify.CRC(iTrack))
|
||||||
|
logWriter.WriteLine("Track {0} CRC mismatch: test {1:X8} vs copy {2:X8}", iTrack + 1, _arVerify.BackupCRC(iTrack), _arVerify.CRC(iTrack));
|
||||||
if (_accurateRipMode != AccurateRipMode.None)
|
if (_accurateRipMode != AccurateRipMode.None)
|
||||||
{
|
{
|
||||||
logWriter.WriteLine("AccurateRip summary");
|
logWriter.WriteLine("AccurateRip summary");
|
||||||
@@ -1348,7 +1356,7 @@ namespace CUETools.Processor
|
|||||||
|
|
||||||
if (0 != _writeOffset)
|
if (0 != _writeOffset)
|
||||||
sw.WriteLine("Offset applied: {0}", _writeOffset);
|
sw.WriteLine("Offset applied: {0}", _writeOffset);
|
||||||
_arVerify.GenerateFullLog(sw, _accurateRipMode == AccurateRipMode.VerifyThenConvert ? _writeOffset : 0);
|
_arVerify.GenerateFullLog(sw, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GenerateAccurateRipTagsForTrack(NameValueCollection tags, int offset, int bestOffset, int iTrack, string prefix)
|
public void GenerateAccurateRipTagsForTrack(NameValueCollection tags, int offset, int bestOffset, int iTrack, string prefix)
|
||||||
@@ -1469,14 +1477,11 @@ namespace CUETools.Processor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( _accurateRipMode != AccurateRipMode.Verify )
|
if (_accurateRipMode != AccurateRipMode.Verify)
|
||||||
for (int i = 0; i < destPaths.Length; i++) {
|
for (int i = 0; i < destPaths.Length; i++)
|
||||||
for (int j = 0; j < _sourcePaths.Count; j++) {
|
for (int j = 0; j < _sourcePaths.Count; j++)
|
||||||
if (destPaths[i].ToLower() == _sourcePaths[j].ToLower()) {
|
if (destPaths[i].ToLower() == _sourcePaths[j].ToLower())
|
||||||
throw new Exception("Source and destination audio file paths cannot be the same.");
|
throw new Exception("Source and destination audio file paths cannot be the same.");
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
destLengths = CalculateAudioFileLengths(style);
|
destLengths = CalculateAudioFileLengths(style);
|
||||||
|
|
||||||
@@ -1546,6 +1551,7 @@ namespace CUETools.Processor
|
|||||||
{
|
{
|
||||||
_writeOffset = 0;
|
_writeOffset = 0;
|
||||||
WriteAudioFilesPass(dir, style, destPaths, destLengths, htoaToFile, true);
|
WriteAudioFilesPass(dir, style, destPaths, destLengths, htoaToFile, true);
|
||||||
|
_arVerify.CreateBackup(_writeOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (_accurateRipMode == AccurateRipMode.VerifyThenConvert)
|
else if (_accurateRipMode == AccurateRipMode.VerifyThenConvert)
|
||||||
@@ -1569,6 +1575,7 @@ namespace CUETools.Processor
|
|||||||
if (tracksMatch * 100 >= _config.fixWhenPercent * TrackCount)
|
if (tracksMatch * 100 >= _config.fixWhenPercent * TrackCount)
|
||||||
_writeOffset = bestOffset;
|
_writeOffset = bestOffset;
|
||||||
}
|
}
|
||||||
|
_arVerify.CreateBackup(_writeOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1586,6 +1593,14 @@ namespace CUETools.Processor
|
|||||||
{
|
{
|
||||||
string logContents = LOGContents();
|
string logContents = LOGContents();
|
||||||
string cueContents = CUESheetContents(style);
|
string cueContents = CUESheetContents(style);
|
||||||
|
bool needNewCRCs = _accurateRipMode != AccurateRipMode.None &&
|
||||||
|
(_accurateRipMode == AccurateRipMode.VerifyAndConvert || _isCD) &&
|
||||||
|
_config.writeArTagsOnConvert &&
|
||||||
|
_arVerify.AccResult == HttpStatusCode.OK;
|
||||||
|
uint tracksMatch = 0;
|
||||||
|
int bestOffset = 0;
|
||||||
|
if (needNewCRCs)
|
||||||
|
FindBestOffset(1, true, out tracksMatch, out bestOffset);
|
||||||
|
|
||||||
if (logContents != null)
|
if (logContents != null)
|
||||||
WriteText(Path.ChangeExtension(_cuePath, ".log"), logContents);
|
WriteText(Path.ChangeExtension(_cuePath, ".log"), logContents);
|
||||||
@@ -1593,13 +1608,8 @@ namespace CUETools.Processor
|
|||||||
{
|
{
|
||||||
WriteText(_cuePath, cueContents);
|
WriteText(_cuePath, cueContents);
|
||||||
#if !MONO
|
#if !MONO
|
||||||
if (_accurateRipMode == AccurateRipMode.VerifyAndConvert &&
|
if (needNewCRCs)
|
||||||
_config.writeArTagsOnConvert &&
|
|
||||||
_arVerify.AccResult == HttpStatusCode.OK)
|
|
||||||
{
|
{
|
||||||
uint tracksMatch;
|
|
||||||
int bestOffset;
|
|
||||||
FindBestOffset(1, true, out tracksMatch, out bestOffset);
|
|
||||||
for (int iTrack = 0; iTrack < TrackCount; iTrack++)
|
for (int iTrack = 0; iTrack < TrackCount; iTrack++)
|
||||||
{
|
{
|
||||||
IAudioSource audioSource = AudioReadWrite.GetAudioSource(destPaths[iTrack + (htoaToFile ? 1 : 0)], null);
|
IAudioSource audioSource = AudioReadWrite.GetAudioSource(destPaths[iTrack + (htoaToFile ? 1 : 0)], null);
|
||||||
@@ -1617,24 +1627,16 @@ namespace CUETools.Processor
|
|||||||
if (_config.createCUEFileWhenEmbedded)
|
if (_config.createCUEFileWhenEmbedded)
|
||||||
WriteText(Path.ChangeExtension(_cuePath, ".cue"), cueContents);
|
WriteText(Path.ChangeExtension(_cuePath, ".cue"), cueContents);
|
||||||
#if !MONO
|
#if !MONO
|
||||||
if ((_accurateRipMode == AccurateRipMode.VerifyAndConvert &&
|
if (needNewCRCs || _isCD)
|
||||||
_config.writeArTagsOnConvert &&
|
|
||||||
_arVerify.AccResult == HttpStatusCode.OK) ||
|
|
||||||
(_accurateRipMode != AccurateRipMode.VerifyThenConvert &&
|
|
||||||
_isCD))
|
|
||||||
{
|
{
|
||||||
IAudioSource audioSource = AudioReadWrite.GetAudioSource(destPaths[0], null);
|
IAudioSource audioSource = AudioReadWrite.GetAudioSource(destPaths[0], null);
|
||||||
if (_isCD)
|
if (_isCD)
|
||||||
{
|
{
|
||||||
audioSource.Tags.Add("CUESHEET", cueContents);
|
if (_accurateRipMode != AccurateRipMode.VerifyThenConvert)
|
||||||
|
audioSource.Tags.Add("CUESHEET", cueContents);
|
||||||
audioSource.Tags.Add("LOG", logContents);
|
audioSource.Tags.Add("LOG", logContents);
|
||||||
}
|
}
|
||||||
uint tracksMatch;
|
if (needNewCRCs)
|
||||||
int bestOffset;
|
|
||||||
FindBestOffset(1, true, out tracksMatch, out bestOffset);
|
|
||||||
if (_accurateRipMode == AccurateRipMode.VerifyAndConvert &&
|
|
||||||
_config.writeArTagsOnConvert &&
|
|
||||||
_arVerify.AccResult == HttpStatusCode.OK)
|
|
||||||
{
|
{
|
||||||
CleanupTags(audioSource.Tags, "ACCURATERIP");
|
CleanupTags(audioSource.Tags, "ACCURATERIP");
|
||||||
GenerateAccurateRipTags(audioSource.Tags, 0, bestOffset, -1);
|
GenerateAccurateRipTags(audioSource.Tags, 0, bestOffset, -1);
|
||||||
@@ -1754,7 +1756,7 @@ namespace CUETools.Processor
|
|||||||
destTags.Add("TRACKNUMBER", (iTrack + 1).ToString());
|
destTags.Add("TRACKNUMBER", (iTrack + 1).ToString());
|
||||||
if (_config.writeArTagsOnConvert)
|
if (_config.writeArTagsOnConvert)
|
||||||
{
|
{
|
||||||
if (_accurateRipMode == AccurateRipMode.VerifyThenConvert && _arVerify.AccResult == HttpStatusCode.OK)
|
if (!_isCD && _accurateRipMode == AccurateRipMode.VerifyThenConvert && _arVerify.AccResult == HttpStatusCode.OK)
|
||||||
GenerateAccurateRipTags(destTags, _writeOffset, bestOffset, iTrack);
|
GenerateAccurateRipTags(destTags, _writeOffset, bestOffset, iTrack);
|
||||||
else
|
else
|
||||||
destTags.Add("ACCURATERIPID", _accurateRipId);
|
destTags.Add("ACCURATERIPID", _accurateRipId);
|
||||||
@@ -1815,7 +1817,7 @@ namespace CUETools.Processor
|
|||||||
|
|
||||||
if (_config.writeArTagsOnConvert)
|
if (_config.writeArTagsOnConvert)
|
||||||
{
|
{
|
||||||
if (fWithCUE && _accurateRipMode == AccurateRipMode.VerifyThenConvert && _arVerify.AccResult == HttpStatusCode.OK)
|
if (fWithCUE && !_isCD && _accurateRipMode == AccurateRipMode.VerifyThenConvert && _arVerify.AccResult == HttpStatusCode.OK)
|
||||||
GenerateAccurateRipTags(destTags, _writeOffset, bestOffset, -1);
|
GenerateAccurateRipTags(destTags, _writeOffset, bestOffset, -1);
|
||||||
else
|
else
|
||||||
destTags.Add("ACCURATERIPID", _accurateRipId);
|
destTags.Add("ACCURATERIPID", _accurateRipId);
|
||||||
@@ -1899,7 +1901,7 @@ namespace CUETools.Processor
|
|||||||
uint diskLength = 588 * (_toc[_toc.TrackCount].IsAudio ? _toc[_toc.TrackCount].End + 1 : _toc[_toc.TrackCount - 1].End + 1);
|
uint diskLength = 588 * (_toc[_toc.TrackCount].IsAudio ? _toc[_toc.TrackCount].End + 1 : _toc[_toc.TrackCount - 1].End + 1);
|
||||||
uint diskOffset = 0;
|
uint diskOffset = 0;
|
||||||
|
|
||||||
if (_accurateRipMode != AccurateRipMode.None && (noOutput || _accurateRipMode == AccurateRipMode.VerifyAndConvert))
|
if (_accurateRipMode != AccurateRipMode.None)
|
||||||
_arVerify.Init();
|
_arVerify.Init();
|
||||||
|
|
||||||
ShowProgress(String.Format("{2} track {0:00} ({1:00}%)...", 0, 0, noOutput ? "Verifying" : "Writing"), 0, 0.0, null, null);
|
ShowProgress(String.Format("{2} track {0:00} ({1:00}%)...", 0, 0, noOutput ? "Verifying" : "Writing"), 0, 0.0, null, null);
|
||||||
@@ -2017,7 +2019,7 @@ namespace CUETools.Processor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_accurateRipMode != AccurateRipMode.None && (noOutput || _accurateRipMode == AccurateRipMode.VerifyAndConvert))
|
if (_accurateRipMode != AccurateRipMode.None)
|
||||||
_arVerify.Write(sampleBuffer, copyCount);
|
_arVerify.Write(sampleBuffer, copyCount);
|
||||||
|
|
||||||
currentOffset += copyCount;
|
currentOffset += copyCount;
|
||||||
@@ -2434,6 +2436,14 @@ namespace CUETools.Processor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsCD
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _isCD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private CDImageLayout _toc;
|
private CDImageLayout _toc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
|
|||||||
//
|
//
|
||||||
// You can specify all the values or you can default the Revision and Build Numbers
|
// You can specify all the values or you can default the Revision and Build Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("1.9.4.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
[assembly: AssemblyFileVersion("1.9.4.0")]
|
||||||
|
|||||||
@@ -174,12 +174,18 @@ namespace WavPackDotNet {
|
|||||||
|
|
||||||
virtual bool UpdateTags(bool preserveTime)
|
virtual bool UpdateTags(bool preserveTime)
|
||||||
{
|
{
|
||||||
return false;
|
Close ();
|
||||||
|
APETagDotNet^ apeTag = gcnew APETagDotNet (_path, true, false);
|
||||||
|
apeTag->SetStringTags (_tags, true);
|
||||||
|
apeTag->Save();
|
||||||
|
apeTag->Close();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Close()
|
virtual void Close()
|
||||||
{
|
{
|
||||||
_wpc = WavpackCloseFile(_wpc);
|
if (_wpc != NULL)
|
||||||
|
_wpc = WavpackCloseFile(_wpc);
|
||||||
if (_IO != nullptr)
|
if (_IO != nullptr)
|
||||||
{
|
{
|
||||||
_IO->Close ();
|
_IO->Close ();
|
||||||
|
|||||||
Reference in New Issue
Block a user