While playing around with ffmpeg and looking for a format to store large uncompressed audio files over 4 GiB, I happened to find a small problem with the RF64 format (a subset of BWF).
It looks like the 'ds64' extension in the header for files over 4 GiB of the RF64 format has not been taken into account yet.?
Currently in use under Windows 10:
Core (2023-01-13 20:48:54 UTC)
foobar2000 core 1.6.16
foo_verifier.dll (2022-02-06 21:40:24 UTC)
File Integrity Verifier 1.4.2
To reproduce:
>ffmpeg -f lavfi -i sine -t 50ms -c:a pcm_s16le -rf64 1 -y 50ms.wav
>hexyl -c 0x80 50ms.wav // (original header from ffmpeg output)
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ 52 46 36 34 ff ff ff ff ┊ 57 41 56 45 64 73 36 34 │RF64××××┊WAVEds64│
│00000010│ 1c 00 00 00 a4 11 00 00 ┊ 00 00 00 00 3a 11 00 00 │•⋄⋄⋄ו⋄⋄┊⋄⋄⋄⋄:•⋄⋄│
│00000020│ 00 00 00 00 9d 08 00 00 ┊ 00 00 00 00 00 00 00 00 │⋄⋄⋄⋄ו⋄⋄┊⋄⋄⋄⋄⋄⋄⋄⋄│
│00000030│ 66 6d 74 20 10 00 00 00 ┊ 01 00 01 00 44 ac 00 00 │fmt •⋄⋄⋄┊•⋄•⋄D×⋄⋄│
│00000040│ 88 58 01 00 02 00 10 00 ┊ 4c 49 53 54 1a 00 00 00 │×X•⋄•⋄•⋄┊LIST•⋄⋄⋄│
│00000050│ 49 4e 46 4f 49 53 46 54 ┊ 0d 00 00 00 4c 61 76 66 │INFOISFT┊_⋄⋄⋄Lavf│
│00000060│ 36 30 2e 33 2e 31 30 30 ┊ 00 00 64 61 74 61 ff ff │60.3.100┊⋄⋄data××│
│00000070│ ff ff 00 00 00 01 ff 01 ┊ fd 02 f8 03 ee 04 e0 05 │××⋄⋄⋄•ו┊וווו│
└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘
>hexyl -c 0x80 50ms-edited.wav // ('RF64'$filesize ... 'data'$datasize)
┌────────┬─────────────────────────┬─────────────────────────┬────────┬────────┐
│00000000│ 52 46 36 34 a4 11 00 00 ┊ 57 41 56 45 64 73 36 34 │RF64ו⋄⋄┊WAVEds64│
│00000010│ 1c 00 00 00 a4 11 00 00 ┊ 00 00 00 00 3a 11 00 00 │•⋄⋄⋄ו⋄⋄┊⋄⋄⋄⋄:•⋄⋄│
│00000020│ 00 00 00 00 9d 08 00 00 ┊ 00 00 00 00 00 00 00 00 │⋄⋄⋄⋄ו⋄⋄┊⋄⋄⋄⋄⋄⋄⋄⋄│
│00000030│ 66 6d 74 20 10 00 00 00 ┊ 01 00 01 00 44 ac 00 00 │fmt •⋄⋄⋄┊•⋄•⋄D×⋄⋄│
│00000040│ 88 58 01 00 02 00 10 00 ┊ 4c 49 53 54 1a 00 00 00 │×X•⋄•⋄•⋄┊LIST•⋄⋄⋄│
│00000050│ 49 4e 46 4f 49 53 46 54 ┊ 0d 00 00 00 4c 61 76 66 │INFOISFT┊_⋄⋄⋄Lavf│
│00000060│ 36 30 2e 33 2e 31 30 30 ┊ 00 00 64 61 74 61 3a 11 │60.3.100┊⋄⋄data:•│
│00000070│ 00 00 00 00 00 01 ff 01 ┊ fd 02 f8 03 ee 04 e0 05 │⋄⋄⋄⋄⋄•ו┊וווו│
└────────┴─────────────────────────┴─────────────────────────┴────────┴────────┘
The report of the 'File Integrity Verifier' extension:
(file paths were edited)
Item: "...\50ms.wav"
MD5: 42F0F8D38589A2DA783DA2D743F40E67
CRC32: A3048DE1
Warning: Indicated RIFF size exceeds actual file size, file appears to be truncated
Warning: Malformed or truncated chunk found at 106 bytes, claimed length 4294967295 bytes, truncated to 4410 bytes
Item: "...\50ms-edited.wav"
MD5: 42F0F8D38589A2DA783DA2D743F40E67
CRC32: A3048DE1
No problems found.
All items decoded successfully.
1 item decoded with minor problems.
List of decodable but suspicious items:
"...\50ms.wav"
I have looked around a bit and found this about the RF64 format:
https://en.wikipedia.org/wiki/RF64
The last and updated recommendation for RF64 (subgroup of BWF), nicely titled:
'Long-form file format for the international exchange of audio programme materials with metadata'
Page #7 (self numbered as 5)
https://www.itu.int/dms_pubrec/itu-r/rec/bs/R-REC-BS.2088-1-201910-I!!PDF-E.pdf
(Thanks to the good output I could then get from the 4294967295 bytes (0xffff ffff) to the -1 as Int.)
and here also in other languages:
https://www.itu.int/rec/R-REC-BS.2088-1-201910-I/en
Sorry, it almost became a short novel. (;
Thank you and best regards.
PS: And of course thanks for the time and the wonderful player foobar2000 with its solid features and all its extensions.