Move all localizable strings from Aaru.Decoders project to resources.

This commit is contained in:
2022-11-27 13:33:47 +00:00
parent bc415e205f
commit d70fd34e2b
91 changed files with 34135 additions and 4541 deletions

View File

@@ -337,13 +337,17 @@ public static class Subchannel
string controlInfo = ((control & 0xC) / 4) switch
{
0 => $"stereo audio {((control & 0x01) == 1 ? "with" : "without")} pre-emphasis",
1 => $"{((control & 0x01) == 1 ? "incremental" : "uninterrupted")} data",
2 => $"quadraphonic audio {((control & 0x01) == 1 ? "with" : "without")} pre-emphasis",
_ => $"reserved control value {control & 0x01}"
0 => (control & 0x01) == 1 ? Localization.Subchannel_PrettifyQ_stereo_audio_with_pre_emphasis
: Localization.Subchannel_PrettifyQ_stereo_audio_without_pre_emphasis,
1 => (control & 0x01) == 1 ? Localization.Subchannel_PrettifyQ_incremental_data
: Localization.Subchannel_PrettifyQ_uninterrupted_data,
2 => (control & 0x01) == 1 ? Localization.Subchannel_PrettifyQ_quadraphonic_audio_with_pre_emphasis
: Localization.Subchannel_PrettifyQ_quadraphonic_audio_without_pre_emphasis,
_ => string.Format(Localization.Subchannel_PrettifyQ_reserved_control_value__0_, control & 0x01)
};
string copy = (control & 0x02) > 0 ? "copy permitted" : "copy prohibited";
string copy = (control & 0x02) > 0 ? Localization.Subchannel_PrettifyQ_copy_permitted
: Localization.Subchannel_PrettifyQ_copy_prohibited;
if(bcd)
BcdToBinaryQ(subBuf);
@@ -362,160 +366,246 @@ public static class Subchannel
if(lba < 0)
{
area = "Lead-In";
area = Localization.Subchannel_PrettifyQ_Lead_In;
switch(adr)
{
case 1 when subBuf[2] < 0xA0:
return $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr} position: {subBuf[3]
:X2}:{subBuf[4]:X2}:{subBuf[5]:X2} (LBA {qPos}), track {subBuf[2]
:X} starts at {subBuf[7]:X2}:{subBuf[8]:X2}:{subBuf[9]:X2} (LBA {qStart
}), Q CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")}), R-W {
(rwEmpty ? "empty" : "not empty")}";
return
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_position_9_10_11_LBA_12_track_13_starts_at_14_15_16_LBA_17_Q_CRC_18_19_20_R_W_21,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[3], subBuf[4], subBuf[5], qPos, subBuf[2],
subBuf[7], subBuf[8], subBuf[9], qStart, subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
case 1 when subBuf[2] == 0xA0:
{
string format = subBuf[8] switch
{
0x00 => "CD-DA / CD-ROM",
0x10 => "CD-i",
0x20 => "CD-ROM XA",
_ => $"unknown {subBuf[0]:X2}"
0x00 => Localization.Subchannel_PrettifyQ_CD_DA_CD_ROM,
0x10 => Localization.Subchannel_PrettifyQ_CD_i,
0x20 => Localization.Subchannel_PrettifyQ_CD_ROM_XA,
_ => string.Format(Localization.Subchannel_PrettifyQ_unknown_0, subBuf[0])
};
return $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr} position: {subBuf[3]
:X2}:{subBuf[4]:X2}:{subBuf[5]:X2} (LBA {qPos}), track {subBuf[2]
:X} is first program area track in {format} format, Q CRC 0x{subBuf[10]:X2}{
subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")}), R-W {
(rwEmpty ? "empty" : "not empty")}";
return
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_position_9_10_11_LBA_12_track_13_is_first_program_area_track_in_14_format_Q_CRC_15_16_17_R_W_18,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[3], subBuf[4], subBuf[5], qPos, subBuf[2], format,
subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
}
case 1 when subBuf[2] == 0xA1:
return $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr} position: {subBuf[3]
:X2}:{subBuf[4]:X2}:{subBuf[5]:X2} (LBA {qPos}), track {subBuf[2]
:X} is last program area track, Q CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({
(crcOk ? "OK" : "BAD")}), R-W {(rwEmpty ? "empty" : "not empty")}";
return
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_position_9_10_11_LBA_12_track_13_is_last_program_area_track_Q_CRC_14_15_16_R_W_17,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[3], subBuf[4], subBuf[5], qPos, subBuf[2],
subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
case 1:
return subBuf[2] == 0xA2 ? $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {
(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr} position: {subBuf[3]:X2}:{
subBuf[4]:X2}:{subBuf[5]:X2} (LBA {qPos}), track {subBuf[2]:X} starts at {subBuf[7]
:X2}{subBuf[8]:X2}{subBuf[9]:X2} (LBA {qStart}), Q CRC 0x{subBuf[10]:X2}{subBuf[11]
:X2} ({(crcOk ? "OK" : "BAD")}), R-W {(rwEmpty ? "empty" : "not empty")}" : $"{
minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q: {subBuf[0]
:X2} {subBuf[1]:X2} {subBuf[2]:X2} {subBuf[3]:X2} {
subBuf[4]:X2} {subBuf[5]:X2} {subBuf[6]:X2} {subBuf[7]
:X2} {subBuf[8]:X2} {subBuf[9]:X2} CRC 0x{
subBuf[10]:X2}{subBuf[11]:X2} ({
(crcOk ? "OK" : "BAD")}), R-W {
(rwEmpty ? "empty" : "not empty")}";
return subBuf[2] == 0xA2
? string.
Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_position_9_10_11_LBA_12_track_13_starts_at_14_15_16_LBA_17_Q_CRC_18_19_20_R_W_21,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[3], subBuf[4], subBuf[5], qPos, subBuf[2],
subBuf[7], subBuf[8], subBuf[9], qStart, subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty)
: string.
Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_8_9_10_11_12_13_14_15_16_17_CRC_18_19_20_R_W_21,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, subBuf[0], subBuf[1], subBuf[2], subBuf[3], subBuf[4],
subBuf[5], subBuf[6], subBuf[7], subBuf[8], subBuf[9], subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
case 2:
return $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr} MCN: {DecodeMcn(subBuf)
} frame {subBuf[9]:X2} CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({
(crcOk ? "OK" : "BAD")}), R-W {(rwEmpty ? "empty" : "not empty")}";
return
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_MCN_9_frame_10_CRC_11_12_13_R_W_14,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, DecodeMcn(subBuf), subBuf[9], subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
}
if(adr != 5)
return $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q: {subBuf[0]:X2} {subBuf[1]:X2} {
subBuf[2]:X2} {subBuf[3]:X2} {subBuf[4]:X2} {subBuf[5]:X2} {subBuf[6]:X2} {
subBuf[7]:X2} {subBuf[8]:X2} {subBuf[9]:X2} CRC 0x{subBuf[10]:X2}{subBuf[11]
:X2} ({(crcOk ? "OK" : "BAD")}), R-W {(rwEmpty ? "empty" : "not empty")
}";
return
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_8_9_10_11_12_13_14_15_16_17_CRC_18_19_20_R_W_21,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, subBuf[0], subBuf[1], subBuf[2], subBuf[3], subBuf[4], subBuf[5],
subBuf[6], subBuf[7], subBuf[8], subBuf[9], subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK : Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
switch(subBuf[2])
{
case <= 0x40:
return $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr
} skip interval start time {subBuf[7]:X2}{subBuf[8]:X2}{subBuf[9]
:X2}, skip interval stop time {subBuf[3]:X2}{subBuf[4]:X2}{subBuf[5]
:X2}, CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")}), R-W {
(rwEmpty ? "empty" : "not empty")}";
return
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_skip_interval_start_time_9_10_11_skip_interval_stop_time_12_13_14_CRC_15_16_17_R_W_18,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[7], subBuf[8], subBuf[9], subBuf[3], subBuf[4],
subBuf[5], subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
case 0xB0:
return final ? $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr
} next program area can start at {subBuf[3]:X2}:{subBuf[4]:X2}:{subBuf[5]
:X2} (LBA {nextPos}), last-session, {zero} mode 5 pointers, CRC 0x{
subBuf[10]:X2}{subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")}), R-W {
(rwEmpty ? "empty" : "not empty")}" : $"{minute:D2}:{second:D2}:{frame
:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {
adr} next program area can start at {subBuf[3]
:X2}:{subBuf[4]:X2}:{subBuf[5]:X2} (LBA {
nextPos}), maximum Lead-out at {subBuf[7]
:X2}:{subBuf[8]:X2}:{subBuf[9]
:X2} (LBA {maxOut}), {zero
} mode 5 pointers, CRC 0x{subBuf[10]:X2}{
subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")
}), R-W {(rwEmpty ? "empty"
: "not empty")}";
return final
? string.
Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_next_program_area_can_start_at_9_10_11_LBA_12_last_session_13_mode_5_pointers_CRC_14_15_16_R_W_17,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[3], subBuf[4], subBuf[5], nextPos, zero,
subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty)
: string.
Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_next_program_area_can_start_at_9_10_11_LBA_12_maximum_Lead_out_at_13_14_15_LBA_16_17_mode_5_pointers_CRC_18_19_20_R_W_21,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[3], subBuf[4], subBuf[5], nextPos, subBuf[7],
subBuf[8], subBuf[9], maxOut, zero, subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
case 0xB1:
return $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr}, {pmin
} skip interval pointers, {psec} skip track assignments, CRC 0x{subBuf[10]:X2}{
subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")}), R-W {
(rwEmpty ? "empty" : "not empty")}";
return
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_9_skip_interval_pointers_10_skip_track_assignments_CRC_11_12_13_R_W_14,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, pmin, psec, subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
}
if(subBuf[2] != 0xB2 &&
subBuf[2] != 0xB3 &&
subBuf[2] != 0xB4)
return subBuf[2] == 0xC0 ? $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {
(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr}, ATIP values {subBuf[3]:X2}, {
subBuf[4]:X2}, {subBuf[5]:X2}, first disc Lead-in starts at {subBuf[7]:X2}{subBuf[8]:X2}{
subBuf[9]:X2} (LBA {qStart}), CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({
(crcOk ? "OK" : "BAD")}), R-W {(rwEmpty ? "empty" : "not empty")}" : $"{minute
:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q: {subBuf[0]:X2} {
subBuf[1]:X2} {subBuf[2]:X2} {subBuf[3]:X2} {subBuf[4]
:X2} {subBuf[5]:X2} {subBuf[6]:X2} {subBuf[7]:X2} {
subBuf[8]:X2} {subBuf[9]:X2} CRC 0x{subBuf[10]:X2}{
subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")}), R-W {
(rwEmpty ? "empty" : "not empty")}";
return subBuf[2] == 0xC0
? string.
Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_ATIP_values_9_10_11_first_disc_Lead_in_starts_at_12_13_14_LBA_15_CRC_16_17_18_R_W_19,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[3], subBuf[4], subBuf[5], subBuf[7], subBuf[8],
subBuf[9], qStart, subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty)
: string.
Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_8_9_10_11_12_13_14_15_16_17_CRC_18_19_20_R_W_21,
minute, second, frame, lba, area, corruptedPause
? Localization.
Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.
Subchannel_PrettifyQ_pause
: Localization.
Subchannel_PrettifyQ_not_pause,
controlInfo, copy, subBuf[0], subBuf[1], subBuf[2], subBuf[3], subBuf[4],
subBuf[5], subBuf[6], subBuf[7], subBuf[8], subBuf[9], subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK
: Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
string skipTracks = $"{subBuf[3]:X2}";
@@ -534,56 +624,75 @@ public static class Subchannel
if(subBuf[9] > 0)
skipTracks += $", {subBuf[4]:X2}";
return $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr}, tracks {skipTracks
} to be skipped, CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")}), R-W {
(rwEmpty ? "empty" : "not empty")}";
return
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_tracks_9_to_be_skipped_CRC_10_11_12_R_W_13,
minute, second, frame, lba, area, corruptedPause
? Localization.Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.Subchannel_PrettifyQ_pause
: Localization.Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, skipTracks, subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK : Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty);
}
area = subBuf[1] == 0xAA ? "Lead-out" : "Program";
area = subBuf[1] == 0xAA ? Localization.Subchannel_PrettifyQ_Lead_out
: Localization.Subchannel_PrettifyQ_Program;
return adr switch
{
1 => $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr} position: track {subBuf[1]
:X} index {subBuf[2]:X} relative position {subBuf[3]:X2}:{subBuf[4]:X2}:{subBuf[5]
:X2} (LBA {qPos + 150}), absolute position {subBuf[7]:X2}:{subBuf[8]:X2}:{subBuf[9]
:X2} (LBA {qStart}), Q CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")
}), R-W {(rwEmpty ? "empty" : "not empty")}",
2 => $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr} MCN: {DecodeMcn(subBuf)
} frame {subBuf[9]:X2} CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")
}), R-W {(rwEmpty ? "empty" : "not empty")}",
3 => $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q mode {adr} ISRC: {DecodeIsrc(subBuf)
} frame {subBuf[9]:X2} CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({(crcOk ? "OK" : "BAD")
}), R-W {(rwEmpty ? "empty" : "not empty")}",
_ => $"{minute:D2}:{second:D2}:{frame:D2} - LBA {lba,6}: {area} area, {(corruptedPause
? "corrupted pause"
: pause
? "pause"
: "not pause")}, {controlInfo}, {copy}, Q: {subBuf[0]:X2} {subBuf[1]:X2} {subBuf[2]
:X2} {subBuf[3]:X2} {subBuf[4]:X2} {subBuf[5]:X2} {subBuf[6]:X2} {subBuf[7]:X2} {
subBuf[8]:X2} {subBuf[9]:X2} CRC 0x{subBuf[10]:X2}{subBuf[11]:X2} ({
(crcOk ? "OK" : "BAD")}), R-W {(rwEmpty ? "empty" : "not empty")}"
1 =>
string.Format(Localization.Subchannel_PrettifyQ_0_D2_1_2_LBA_3_4_area_5_6_7_Q_mode_8_position_track_9_index_10_relative_position_11_12_13_LBA_14_absolute_position_15_16_17_LBA_18_Q_CRC_19_20_21_R_W_22,
minute, second, frame, lba, area, corruptedPause
? Localization.Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.Subchannel_PrettifyQ_pause
: Localization.Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, subBuf[1], subBuf[2], subBuf[3], subBuf[4], subBuf[5], qPos + 150,
subBuf[7], subBuf[8], subBuf[9], qStart, subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK : Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty),
2 =>
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_MCN_9_frame_10_CRC_11_12_13_R_W_14,
minute, second, frame, lba, area, corruptedPause
? Localization.Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.Subchannel_PrettifyQ_pause
: Localization.Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, DecodeMcn(subBuf), subBuf[9], subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK : Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty),
3 =>
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_mode_8_ISRC_9_frame_10_CRC_11_12_13_R_W_14,
minute, second, frame, lba, area, corruptedPause
? Localization.Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.Subchannel_PrettifyQ_pause
: Localization.Subchannel_PrettifyQ_not_pause,
controlInfo, copy, adr, DecodeIsrc(subBuf), subBuf[9], subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK : Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty),
_ =>
string.Format(Localization.Subchannel_PrettifyQ_0_1_2_LBA_3_4_area_5_6_7_Q_8_9_10_11_12_13_14_15_16_17_CRC_18_19_20_R_W_21,
minute, second, frame, lba, area, corruptedPause
? Localization.Subchannel_PrettifyQ_corrupted_pause
: pause
? Localization.Subchannel_PrettifyQ_pause
: Localization.Subchannel_PrettifyQ_not_pause,
controlInfo, copy, subBuf[0], subBuf[1], subBuf[2], subBuf[3], subBuf[4], subBuf[5],
subBuf[6], subBuf[7], subBuf[8], subBuf[9], subBuf[10], subBuf[11],
crcOk ? Localization.Subchannel_PrettifyQ_OK : Localization.Subchannel_PrettifyQ_BAD,
rwEmpty ? Localization.Subchannel_PrettifyQ_empty
: Localization.Subchannel_PrettifyQ_not_empty)
};
}
public static string DecodeIsrc(byte[] q) => $"{_isrcTable[q[1] / 4]}{_isrcTable[((q[1] & 3) * 16) + (q[2] / 16)]}{
_isrcTable[((q[2] & 0xF) * 4) + (q[3] / 64)]}{_isrcTable[q[3] & 0x3F]}{_isrcTable[q[4] / 4]}{q[5]:X2}{q[6]:X2}{
q[7]:X2}{q[8] / 16:X1}";
public static string DecodeIsrc(byte[] q) =>
$"{_isrcTable[q[1] / 4]}{_isrcTable[((q[1] & 3) * 16) + (q[2] / 16)]}{_isrcTable[((q[2] & 0xF) * 4) + (q[3] / 64)]}{_isrcTable[q[3] & 0x3F]}{_isrcTable[q[4] / 4]}{q[5]:X2}{q[6]:X2}{q[7]:X2}{q[8] / 16:X1}";
public static string DecodeMcn(byte[] q) => $"{q[1]:X2}{q[2]:X2}{q[3]:X2}{q[4]:X2}{q[5]:X2}{q[6]:X2}{q[7] >> 4:X}";