CUETools: CTDB verification during encoding, CTDB confidence tags

This commit is contained in:
Grigory Chudov
2013-06-04 00:10:33 -04:00
parent fc74fc5ad5
commit 1e502ab0b9
18 changed files with 1419 additions and 1078 deletions

View File

@@ -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; }

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}