mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
CUETools: CTDB verification during encoding, CTDB confidence tags
This commit is contained in:
@@ -85,6 +85,12 @@ namespace CUETools.Processor
|
||||
[DefaultValue(false), Category("CTDB"), DisplayName("Detailed log")]
|
||||
public bool DetailedCTDBLog { get; set; }
|
||||
|
||||
[DefaultValue(true), Category("Tagging"), DisplayName("Write CTDB tags on encode")]
|
||||
public bool WriteCTDBTagsOnEncode { get; set; }
|
||||
|
||||
[DefaultValue(false), Category("Tagging"), DisplayName("Write CTDB tags on verify")]
|
||||
public bool WriteCTDBTagsOnVerify { get; set; }
|
||||
|
||||
[DefaultValue(false), Category("Tagging"), DisplayName("Use id3v2.4 instead of id3v2.3")]
|
||||
public bool UseId3v24 { get; set; }
|
||||
|
||||
|
||||
@@ -2400,7 +2400,7 @@ namespace CUETools.Processor
|
||||
_CUEToolsDB.GenerateLog(sw, _config.advanced.DetailedCTDBLog);
|
||||
}
|
||||
|
||||
public string GenerateAccurateRipStatus()
|
||||
public string GenerateVerifyStatus()
|
||||
{
|
||||
string prefix = "";
|
||||
if (hdcdDecoder != null && string.Format("{0:s}", hdcdDecoder) != "")
|
||||
@@ -2465,6 +2465,25 @@ namespace CUETools.Processor
|
||||
}
|
||||
}
|
||||
|
||||
public void GenerateCTDBTagsForTrack(NameValueCollection tags, int iTrack, string prefix)
|
||||
{
|
||||
tags.Add(String.Format("{0}CTDBTRACKCONFIDENCE", prefix), String.Format("{0}/{1}", _CUEToolsDB.GetConfidence(iTrack), _CUEToolsDB.Total));
|
||||
}
|
||||
|
||||
public void GenerateCTDBTags(NameValueCollection tags, int iTrack)
|
||||
{
|
||||
//tags.Add("ACCURATERIPID", _accurateRipId ?? AccurateRipVerify.CalculateAccurateRipId(_toc));
|
||||
tags.Add(String.Format("CTDBDISCCONFIDENCE"), String.Format("{0}/{1}", _CUEToolsDB.Confidence, _CUEToolsDB.Total));
|
||||
if (iTrack != -1)
|
||||
GenerateCTDBTagsForTrack(tags, iTrack, "");
|
||||
else
|
||||
for (iTrack = 0; iTrack < TrackCount; iTrack++)
|
||||
{
|
||||
GenerateCTDBTagsForTrack(tags, iTrack,
|
||||
String.Format("cue_track{0:00}_", iTrack + 1));
|
||||
}
|
||||
}
|
||||
|
||||
public void CleanupTags(NameValueCollection tags, string substring)
|
||||
{
|
||||
string[] keys = tags.AllKeys;
|
||||
@@ -2590,7 +2609,7 @@ namespace CUETools.Processor
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
var entry = OpenLocalDBEntry();
|
||||
entry.Status = this.GenerateAccurateRipStatus();
|
||||
entry.Status = this.GenerateVerifyStatus();
|
||||
entry.ARConfidence = isUsingAccurateRip ? _arVerify.WorstConfidence() : 0;
|
||||
entry.CTDBConfidence = isUsingCUEToolsDB && !isUsingCUEToolsDBFix ? CTDB.Confidence : 0;
|
||||
entry.Log = AccurateRipLog;
|
||||
@@ -2987,18 +3006,20 @@ namespace CUETools.Processor
|
||||
|
||||
public string WriteReport()
|
||||
{
|
||||
if (isUsingAccurateRip)
|
||||
if (isUsingAccurateRip || isUsingCUEToolsDB)
|
||||
{
|
||||
ShowProgress((string)"Generating AccurateRip report...", 0, null, null);
|
||||
if (_action == CUEAction.Verify && _config.writeArTagsOnVerify && _writeOffset == 0 && !_isArchive && !_isCD)
|
||||
if (_action == CUEAction.Verify && _writeOffset == 0 && !_isArchive && !_isCD)
|
||||
{
|
||||
uint tracksMatch;
|
||||
int bestOffset;
|
||||
FindBestOffset(1, true, out tracksMatch, out bestOffset);
|
||||
|
||||
if (_hasEmbeddedCUESheet)
|
||||
if (_config.writeArTagsOnVerify &&
|
||||
isUsingAccurateRip &&
|
||||
_arVerify.ExceptionStatus == WebExceptionStatus.Success)
|
||||
{
|
||||
if (_fileInfo is TagLib.Flac.File)
|
||||
uint tracksMatch;
|
||||
int bestOffset;
|
||||
FindBestOffset(1, true, out tracksMatch, out bestOffset);
|
||||
|
||||
if (_hasEmbeddedCUESheet)
|
||||
{
|
||||
NameValueCollection tags = Tagging.Analyze(_fileInfo);
|
||||
CleanupTags(tags, "ACCURATERIP");
|
||||
@@ -3006,11 +3027,9 @@ namespace CUETools.Processor
|
||||
if (Tagging.UpdateTags(_fileInfo, tags, _config))
|
||||
_fileInfo.Save();
|
||||
}
|
||||
}
|
||||
else if (_hasTrackFilenames)
|
||||
{
|
||||
for (int iTrack = 0; iTrack < TrackCount; iTrack++)
|
||||
if (_tracks[iTrack]._fileInfo is TagLib.Flac.File)
|
||||
else if (_hasTrackFilenames)
|
||||
{
|
||||
for (int iTrack = 0; iTrack < TrackCount; iTrack++)
|
||||
{
|
||||
NameValueCollection tags = Tagging.Analyze(_tracks[iTrack]._fileInfo);
|
||||
CleanupTags(tags, "ACCURATERIP");
|
||||
@@ -3018,6 +3037,34 @@ namespace CUETools.Processor
|
||||
if (Tagging.UpdateTags(_tracks[iTrack]._fileInfo, tags, _config))
|
||||
_tracks[iTrack]._fileInfo.Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_config.advanced.WriteCTDBTagsOnVerify &&
|
||||
isUsingCUEToolsDB &&
|
||||
_CUEToolsDB.QueryExceptionStatus == WebExceptionStatus.Success)
|
||||
{
|
||||
if (_hasEmbeddedCUESheet)
|
||||
{
|
||||
NameValueCollection tags = Tagging.Analyze(_fileInfo);
|
||||
CleanupTags(tags, "CTDBDISCCONFIDENCE");
|
||||
CleanupTags(tags, "CTDBTRACKCONFIDENCE");
|
||||
GenerateCTDBTags(tags, -1);
|
||||
if (Tagging.UpdateTags(_fileInfo, tags, _config))
|
||||
_fileInfo.Save();
|
||||
}
|
||||
else if (_hasTrackFilenames)
|
||||
{
|
||||
for (int iTrack = 0; iTrack < TrackCount; iTrack++)
|
||||
{
|
||||
NameValueCollection tags = Tagging.Analyze(_tracks[iTrack]._fileInfo);
|
||||
CleanupTags(tags, "CTDBDISCCONFIDENCE");
|
||||
CleanupTags(tags, "CTDBTRACKCONFIDENCE");
|
||||
GenerateCTDBTags(tags, iTrack);
|
||||
if (Tagging.UpdateTags(_tracks[iTrack]._fileInfo, tags, _config))
|
||||
_tracks[iTrack]._fileInfo.Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3039,7 +3086,7 @@ namespace CUETools.Processor
|
||||
WriteText(Path.ChangeExtension(_outputPath, ".toc"), CUESheetLogWriter.GetTOCContents(this));
|
||||
}
|
||||
}
|
||||
return GenerateAccurateRipStatus();
|
||||
return GenerateVerifyStatus();
|
||||
}
|
||||
|
||||
private NameValueCollection GenerateTrackTags(int iTrack, int bestOffset)
|
||||
@@ -3110,6 +3157,13 @@ namespace CUETools.Processor
|
||||
_arVerify.ExceptionStatus == WebExceptionStatus.Success)
|
||||
GenerateAccurateRipTags(destTags, bestOffset, iTrack);
|
||||
|
||||
if (_config.advanced.WriteCTDBTagsOnEncode &&
|
||||
_action == CUEAction.Encode &&
|
||||
isUsingCUEToolsDB &&
|
||||
!isUsingCUEToolsDBFix &&
|
||||
_CUEToolsDB.QueryExceptionStatus == WebExceptionStatus.Success)
|
||||
GenerateCTDBTags(destTags, iTrack);
|
||||
|
||||
if (_config.advanced.WriteCDTOCTag)
|
||||
destTags.Add("CDTOC", _toc.TAG);
|
||||
|
||||
@@ -3200,6 +3254,14 @@ namespace CUETools.Processor
|
||||
_arVerify.ExceptionStatus == WebExceptionStatus.Success)
|
||||
GenerateAccurateRipTags(destTags, bestOffset, -1);
|
||||
|
||||
if (fWithCUE &&
|
||||
_config.advanced.WriteCTDBTagsOnEncode &&
|
||||
_action == CUEAction.Encode &&
|
||||
isUsingCUEToolsDB &&
|
||||
!isUsingCUEToolsDBFix &&
|
||||
_CUEToolsDB.QueryExceptionStatus == WebExceptionStatus.Success)
|
||||
GenerateCTDBTags(destTags, -1);
|
||||
|
||||
return destTags;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace CUETools.Processor
|
||||
if (!sheet.Processed)
|
||||
{
|
||||
if (sheet.IsUsingCUEToolsDB) sheet.GenerateCTDBLog(writer);
|
||||
if (sheet.IsUsingAccurateRip)
|
||||
writer.WriteLine("[AccurateRip ID: {0}] {1}.", sheet.AccurateRipId ?? AccurateRipVerify.CalculateAccurateRipId(sheet.TOC), sheet.ArVerify.ARStatus ?? "found");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -28,10 +28,10 @@ namespace CUETools.Processor
|
||||
{
|
||||
_config.Load(sr);
|
||||
|
||||
_useFreeDb = sr.LoadBoolean("FreedbLookup") ?? _useFreeDb;
|
||||
_useMusicBrainz = sr.LoadBoolean("MusicBrainzLookup") ?? _useMusicBrainz;
|
||||
_useAccurateRip = sr.LoadBoolean("AccurateRipLookup") ?? _useAccurateRip;
|
||||
_useCUEToolsDB = sr.LoadBoolean("CUEToolsDBLookup") ?? _useCUEToolsDB;
|
||||
_editTags = sr.LoadBoolean("MusicBrainzLookup") ?? _editTags;
|
||||
_CTDBVerifyOnEncode = sr.LoadBoolean("CTDBVerifyOnEncode") ?? _CTDBVerifyOnEncode;
|
||||
_ARVerifyOnEncode = sr.LoadBoolean("AccurateRipLookup") ?? _ARVerifyOnEncode;
|
||||
_CTDBVerify = sr.LoadBoolean("CUEToolsDBLookup") ?? _CTDBVerify;
|
||||
_useLocalDB = sr.LoadBoolean("LocalDBLookup") ?? _useLocalDB;
|
||||
_skipRecent = sr.LoadBoolean("SkipRecent") ?? _skipRecent;
|
||||
_outputAudioType = (AudioEncoderType?)sr.LoadInt32("OutputAudioType", null, null) ?? _outputAudioType;
|
||||
@@ -47,12 +47,12 @@ namespace CUETools.Processor
|
||||
{
|
||||
_config.Save(sw);
|
||||
|
||||
sw.Save("FreedbLookup", _useFreeDb);
|
||||
sw.Save("MusicBrainzLookup", _useMusicBrainz);
|
||||
sw.Save("AccurateRipLookup", _useAccurateRip);
|
||||
sw.Save("MusicBrainzLookup", _editTags);
|
||||
sw.Save("CTDBVerifyOnEncode", _CTDBVerifyOnEncode);
|
||||
sw.Save("AccurateRipLookup", _ARVerifyOnEncode);
|
||||
sw.Save("LocalDBLookup", _useLocalDB);
|
||||
sw.Save("SkipRecent", _skipRecent);
|
||||
sw.Save("CUEToolsDBLookup", _useCUEToolsDB);
|
||||
sw.Save("CUEToolsDBLookup", _CTDBVerify);
|
||||
sw.Save("OutputAudioType", (int)_outputAudioType);
|
||||
sw.Save("OutputAudioFmt", _outputAudioFormat);
|
||||
sw.Save("AccurateRipMode", (int)_action);
|
||||
@@ -68,7 +68,7 @@ namespace CUETools.Processor
|
||||
public CUEAction _action = CUEAction.Encode;
|
||||
public CUEStyle _CUEStyle = CUEStyle.SingleFileWithCUE;
|
||||
public int _writeOffset = 0;
|
||||
public bool _useFreeDb = true, _useMusicBrainz = true, _useAccurateRip = true, _useCUEToolsDB = true, _useLocalDB = true, _skipRecent = false;
|
||||
public bool _editTags = true, _CTDBVerifyOnEncode = true, _ARVerifyOnEncode = true, _CTDBVerify = true, _useLocalDB = true, _skipRecent = false;
|
||||
|
||||
public string _name;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user