decoder/sidplay: Fix date field to have year but not company or author
Field 2 is called <released>, formerly used as <copyright>[1][2]. It is formatted <year><space><company or author or group>, where <year> may be <YYYY>, <YYY?>, <YY??> or <YYYY-YY>, for example "1987", "199?", "19??" or "1985-87". The <company or author or group> may be for example Rob Hubbard. A full field may be for example "1987 Rob Hubbard". This change splits the <released> field at the first <space>, to retain the <year> part. The 51823 SID files in High Voltage SID Collection (HVSC) version 71 have the following distribution of dates: 333 19?? 11 1990-92 6 1995-99 2 2006-08 827 198? 88 1990-93 2140 1996 530 2007 32 1982 69 1990-94 9 1996-97 15 2007-08 1 1982-83 49 1990-95 2 1996-98 2 2007-09 255 1983 3467 1991 5 1996-99 1 2007-10 677 1984 75 1991-92 1840 1997 430 2008 775 1985 65 1991-93 4 1997-98 23 2008-09 3 1985-86 10 1991-94 1276 1998 1 2008-12 10 1985-87 35 1991-97 4 1998-99 631 2009 943 1986 3320 1992 865 1999 1 2009-10 12 1986-87 26 1992-93 24 200? 645 2010 5 1986-89 59 1992-94 590 2000 1 2010-12 2083 1987 1 1992-96 4 2000-01 538 2011 31 1987-88 2996 1993 727 2001 1 2011-12 44 1987-89 42 1993-94 875 2002 651 2012 2510 1988 12 1993-95 2 2002-04 811 2013 129 1988-89 2 1993-97 844 2003 790 2014 91 1988-90 2737 1994 3 2003-05 740 2015 58 1988-91 16 1994-95 842 2004 792 2016 3466 1989 20 1994-96 2 2004-05 775 2017 95 1989-90 17 1994-97 707 2005 638 2018 150 1989-91 2271 1995 1 2005-06 284 2019 1077 199? 2 1995-96 2 2005-07 2834 1990 4 1995-97 785 2006 119 1990-91 2 1995-98 6 2006-07 References: [1] https://www.hvsc.c64.org/download/C64Music/DOCUMENTS/SID_file_format.txt [2] https://hvsc.c64.org/info
This commit is contained in:
parent
7723c481db
commit
2d61e526de
1
NEWS
1
NEWS
@ -2,6 +2,7 @@ ver 0.21.14 (not yet released)
|
|||||||
* decoder
|
* decoder
|
||||||
- sidplay: show track durations in database
|
- sidplay: show track durations in database
|
||||||
- sidplay: convert tag values from Windows-1252 charset
|
- sidplay: convert tag values from Windows-1252 charset
|
||||||
|
- sidplay: strip text from "Date" tag
|
||||||
|
|
||||||
ver 0.21.13 (2019/08/06)
|
ver 0.21.13 (2019/08/06)
|
||||||
* input
|
* input
|
||||||
|
@ -477,6 +477,30 @@ GetInfoString(const SidTuneInfo &info, unsigned i) noexcept
|
|||||||
return Windows1252ToUTF8(s);
|
return Windows1252ToUTF8(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gcc_pure
|
||||||
|
static AllocatedString<char>
|
||||||
|
GetDateString(const SidTuneInfo &info) noexcept
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Field 2 is called <released>, previously used as <copyright>.
|
||||||
|
* It is formatted <year><space><company or author or group>,
|
||||||
|
* where <year> may be <YYYY>, <YYY?>, <YY??> or <YYYY-YY>, for
|
||||||
|
* example "1987", "199?", "19??" or "1985-87". The <company or
|
||||||
|
* author or group> may be for example Rob Hubbard. A full field
|
||||||
|
* may be for example "1987 Rob Hubbard".
|
||||||
|
*/
|
||||||
|
AllocatedString<char> release = GetInfoString(info, 2);
|
||||||
|
|
||||||
|
/* Keep the <year> part only for the date. */
|
||||||
|
for (size_t i = 0; release[i] != AllocatedString<char>::SENTINEL; i++)
|
||||||
|
if (std::isspace(release[i])) {
|
||||||
|
release[i] = AllocatedString<char>::SENTINEL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return release;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks,
|
ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks,
|
||||||
TagHandler &handler) noexcept
|
TagHandler &handler) noexcept
|
||||||
@ -498,7 +522,7 @@ ScanSidTuneInfo(const SidTuneInfo &info, unsigned track, unsigned n_tracks,
|
|||||||
handler.OnTag(TAG_ARTIST, artist.c_str());
|
handler.OnTag(TAG_ARTIST, artist.c_str());
|
||||||
|
|
||||||
/* date */
|
/* date */
|
||||||
const auto date = GetInfoString(info, 2);
|
const auto date = GetDateString(info);
|
||||||
if (!date.empty())
|
if (!date.empty())
|
||||||
handler.OnTag(TAG_DATE, date.c_str());
|
handler.OnTag(TAG_DATE, date.c_str());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user