From 46b35256bda400803bbce0e19a9a013efaa94571 Mon Sep 17 00:00:00 2001 From: nickysn Date: Thu, 19 Nov 2020 23:05:25 +0000 Subject: [PATCH] + support reading .wav files that have extra data in the end of the 'fmt ' chunk. Added test case, which is a file, generated by the Euphoric emulator. git-svn-id: trunk@47461 - --- .gitattributes | 3 +++ packages/fcl-sound/src/fpwavreader.pas | 4 +++- .../data/wav/reader/valid/euphoric_tape.wav | Bin 0 -> 10452 bytes .../wav/reader/valid/euphoric_tape.wav.info.txt | 1 + .../data/wav/reader/valid/euphoric_tape.wav.raw | 1 + packages/fcl-sound/tests/tcwavreader.pas | 1 + packages/fcl-sound/tests/testfclsound.lpi | 1 + 7 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav create mode 100644 packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.info.txt create mode 100644 packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.raw diff --git a/.gitattributes b/.gitattributes index 173a738c94..e6dfb27a57 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4344,6 +4344,9 @@ packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.raw -text packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav -text svneol=unset#audio/x-wav packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.info.txt svneol=native#text/plain packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.raw -text svneol=unset#application/octet-stream +packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav -text svneol=unset#audio/x-wav +packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.info.txt svneol=native#text/plain +packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.raw -text svneol=unset#application/octet-stream packages/fcl-sound/tests/tcwavreader.pas svneol=native#text/plain packages/fcl-sound/tests/testfclsound.lpi svneol=native#text/plain packages/fcl-sound/tests/testfclsound.lpr svneol=native#text/plain diff --git a/packages/fcl-sound/src/fpwavreader.pas b/packages/fcl-sound/src/fpwavreader.pas index 9b4e145808..c07fcd74c9 100644 --- a/packages/fcl-sound/src/fpwavreader.pas +++ b/packages/fcl-sound/src/fpwavreader.pas @@ -94,7 +94,9 @@ begin Result := Result and (riff.ChunkHeader.ID = AUDIO_CHUNK_ID_RIFF) and (riff.Format = AUDIO_CHUNK_ID_WAVE); Result := Result and (fStream.Read(fmt, sizeof(fmt)) = sizeof(fmt)); LEtoN(fmt); - Result := Result and (fmt.ChunkHeader.ID = AUDIO_CHUNK_ID_fmt); + Result := Result and (fmt.ChunkHeader.ID = AUDIO_CHUNK_ID_fmt) and ((fmt.ChunkHeader.Size + 8) >= sizeof(fmt)); + if Result and ((fmt.ChunkHeader.Size + 8) > sizeof(fmt)) then + fStream.Seek((fmt.ChunkHeader.Size + 8) - sizeof(fmt), soCurrent); if Result and (fmt.Format <> 1) then Exit(False); end; diff --git a/packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav b/packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav new file mode 100644 index 0000000000000000000000000000000000000000..4653ace7cc71c12c99d241602f1ac340c2557bde GIT binary patch literal 10452 zcmeHHJ5B{L3|u;DPC&^qLIDyj1=L80j*c^NjvRnPF&Sq(*@gEgXsz{&$G_QqmYv6k z`}?n(ZF|0bx_f*7xW3x9?E+5+7{80{5}wzWkC#tm^%f755pj5?6GOSpgM)jj%O56pbnva?fT_K(d zqneMJkD3o&ojRaHyd_4pFCEROel(1TyI@rFQS(vv2UkM}bcnaasP?6!8P$)55pfrc zYCdW{>i*zr=ztFKmKfE(bTp&-(J&(Jf>F&!%}3oITn!!2A>IZmHPf8igU(DWTS*RhDIKY45`-gt zQ94_4iYIC&QxY6F4#jC^+KvU`&Paw^RwPhMMshq*M4=a`ga(izIR75gO+W-6-O}V) z2zC? +