I would expect that if verify failed, then flac -t would also fail, unless the verify decoder failed because of a mismatch of decoded audio data. every time I had a report like that it turned out to be a hardware problem.
Thanks Josh for getting back to me on this.
So based on this quote, it is POSSIBLE that --verify failed because of a mismatch, but flac -t would not be able to detect it.
However small of the probability of this, I decided to check this. As I said I had a brief encounter with a HW problem, which I think I eradicated, but I want to be on my guard, and it is possible that a HW problem would just instigate a mismatch. BTW I love FLAC even more by the fact that it help me to find my HW issue, which layed dormant or elusive for weeks.
For those who are in the same boat as I am and what to check their archives retrospective:
I suggested earlier to use CUE sheet to find out the playtime and compare it with the decoded flac file to find out if we had a --verify faliure. Well, this was a wrong idea because the CUE sheet does not say how long a track should last. Sadly the logfile does not contain that either. Hoewever the log file has the CRC and I saved the logs, so today I was frantically tried to inverse engineer EAC CRC calculation. The idea is to decode the flac file and generate the CRC and compare it against the EAC log. The whole task was exacerbated by the fact that I set my EAC so that it skips silence when CRC is calculated. It took me for a while to find out what does this mean exactly. For your benefit here is a quickly knocked-up code that calculates the CRC. The code reads the file on STDIN and writes the CRC onto STDOUT. If there is an error or something amiss it asserts. There are no bells and whistles and purpose built for my checking procedure and I need this only temporarily. If you set EAC no to skip silence when CRC is calculated, just look into the code. There is a comment that tells you how to change the code to calculate CRC that way. This compiles on Cygwin. I hope you may find it useful. BTW the CRC calculation is from cksfv GNU software:
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <assert.h>
#include <stdio.h>
#define BUFFERSIZE 65536 /* (64k) buffer size for reading from the file */
static const unsigned long crctable[256] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
};
void crc32(register int fd, unsigned long *main_val)
{
char buf[BUFFERSIZE], *p;
int len = 0, nr;
unsigned long crc = ~0, crc32_total = ~0;
while ((nr = read(fd, buf, sizeof(buf))) > 0){
assert(nr % 2 == 0);
for (len += nr, p = buf; nr--; ++p) {
// Skip silence when calculate CRC. If EAC is set so that it
// does not skip silence when CRC is calculated, remove this if
// statement, or change its condition to non-zero, so it is always
// true.
if(*((__int16_t*)p) != 0){
crc = (crc >> 8) ^ crctable[(crc ^ *p) & 0xff];
crc32_total = (crc >> 8) ^ crctable[(crc32_total ^ *p) & 0xff];
nr--;
++p;
crc = (crc >> 8) ^ crctable[(crc ^ *p) & 0xff];
crc32_total = (crc >> 8) ^ crctable[(crc32_total ^ *p) & 0xff];
}
else{
nr--;
++p;
}
}
}
assert(nr >= 0);
*main_val = ~crc;
}
int main()
{
unsigned long Crc;
// Skip the WAV header.
const int Ret = lseek(STDIN_FILENO, 44, SEEK_SET);
assert(Ret >= 0);
crc32(STDIN_FILENO, &Crc);
printf("%0X\n", Crc);
}