Răsfoiți Sursa

--- Merging r47447 into '.':
A packages/fcl-sound/tests
A packages/fcl-sound/tests/data
A packages/fcl-sound/tests/data/wav
A packages/fcl-sound/tests/data/wav/reader
A packages/fcl-sound/tests/data/wav/reader/valid
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.info.txt
A packages/fcl-sound/tests/tcwavreader.pas
A packages/fcl-sound/tests/testfclsound.lpi
A packages/fcl-sound/tests/testfclsound.lpr
--- Recording mergeinfo for merge of r47447 into '.':
U .
--- Merging r47452 into '.':
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.raw
U packages/fcl-sound/tests/tcwavreader.pas
--- Recording mergeinfo for merge of r47452 into '.':
G .
--- Merging r47454 into '.':
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.raw
G packages/fcl-sound/tests/tcwavreader.pas
--- Recording mergeinfo for merge of r47454 into '.':
G .
--- Merging r47457 into '.':
U packages/fcl-sound/src/fpwavformat.pas
--- Recording mergeinfo for merge of r47457 into '.':
G .
--- Merging r47461 into '.':
U packages/fcl-sound/src/fpwavreader.pas
A packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav
A packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.raw
G packages/fcl-sound/tests/tcwavreader.pas
U packages/fcl-sound/tests/testfclsound.lpi
--- Recording mergeinfo for merge of r47461 into '.':
G .
--- Merging r47464 into '.':
G packages/fcl-sound/src/fpwavreader.pas
--- Recording mergeinfo for merge of r47464 into '.':
G .
--- Merging r47465 into '.':
G packages/fcl-sound/src/fpwavreader.pas
--- Recording mergeinfo for merge of r47465 into '.':
G .
--- Merging r47466 into '.':
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.raw
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.raw
G packages/fcl-sound/tests/tcwavreader.pas
--- Recording mergeinfo for merge of r47466 into '.':
G .
--- Merging r47467 into '.':
U packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.info.txt
U packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.info.txt
G packages/fcl-sound/tests/tcwavreader.pas
--- Recording mergeinfo for merge of r47467 into '.':
G .
--- Merging r47545 into '.':
G packages/fcl-sound/src/fpwavreader.pas
A packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav
A packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.info.txt
A packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.raw
G packages/fcl-sound/tests/tcwavreader.pas
--- Recording mergeinfo for merge of r47545 into '.':
G .

# revisions: 47447,47452,47454,47457,47461,47464,47465,47466,47467,47545
r47447 | nickysn | 2020-11-19 02:10:36 +0100 (Thu, 19 Nov 2020) | 3 lines
Changed paths:
A /trunk/packages/fcl-sound/tests
A /trunk/packages/fcl-sound/tests/data
A /trunk/packages/fcl-sound/tests/data/wav
A /trunk/packages/fcl-sound/tests/data/wav/reader
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.info.txt
A /trunk/packages/fcl-sound/tests/tcwavreader.pas
A /trunk/packages/fcl-sound/tests/testfclsound.lpi
A /trunk/packages/fcl-sound/tests/testfclsound.lpr

+ created some tests for fcl-sound
r47452 | nickysn | 2020-11-19 03:56:49 +0100 (Thu, 19 Nov 2020) | 3 lines
Changed paths:
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.raw
M /trunk/packages/fcl-sound/tests/tcwavreader.pas

+ also check the actual PCM wave data in the fcl-sound wavreader test
r47454 | nickysn | 2020-11-19 04:26:37 +0100 (Thu, 19 Nov 2020) | 3 lines
Changed paths:
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.raw
M /trunk/packages/fcl-sound/tests/tcwavreader.pas

+ fcl_sound wav reader tests: added stereo .wav file tests
r47457 | nickysn | 2020-11-19 17:22:06 +0100 (Thu, 19 Nov 2020) | 1 line
Changed paths:
M /trunk/packages/fcl-sound/src/fpwavformat.pas

+ added constants for all the other wave formats (codecs), supported in a .wav file, besides PCM
r47461 | nickysn | 2020-11-20 00:05:25 +0100 (Fri, 20 Nov 2020) | 4 lines
Changed paths:
M /trunk/packages/fcl-sound/src/fpwavreader.pas
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.raw
M /trunk/packages/fcl-sound/tests/tcwavreader.pas
M /trunk/packages/fcl-sound/tests/testfclsound.lpi

+ 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.
r47464 | nickysn | 2020-11-20 04:21:19 +0100 (Fri, 20 Nov 2020) | 3 lines
Changed paths:
M /trunk/packages/fcl-sound/src/fpwavreader.pas

- don't check for the PCM format in the .wav reader, to allow reading other audio formats
r47465 | nickysn | 2020-11-20 04:24:16 +0100 (Fri, 20 Nov 2020) | 4 lines
Changed paths:
M /trunk/packages/fcl-sound/src/fpwavreader.pas

* fixed bug in wav reader, that fails to skip non-data chunks, because it
forgets to seek ahead in the stream
r47466 | nickysn | 2020-11-20 04:31:15 +0100 (Fri, 20 Nov 2020) | 3 lines
Changed paths:
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.raw
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.raw
M /trunk/packages/fcl-sound/tests/tcwavreader.pas

+ added tests with 32-bit and 64-bit IEEE floating point .wav files
r47467 | nickysn | 2020-11-20 04:36:39 +0100 (Fri, 20 Nov 2020) | 3 lines
Changed paths:
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.info.txt
M /trunk/packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.info.txt
M /trunk/packages/fcl-sound/tests/tcwavreader.pas

+ check the audio format id field in the tests as well
r47545 | nickysn | 2020-11-24 01:31:16 +0100 (Tue, 24 Nov 2020) | 3 lines
Changed paths:
M /trunk/packages/fcl-sound/src/fpwavreader.pas
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.info.txt
A /trunk/packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.raw
M /trunk/packages/fcl-sound/tests/tcwavreader.pas

+ support reading .wav with an odd (uneven) fmt chunk size

git-svn-id: branches/fixes_3_2@47645 -

marco 4 ani în urmă
părinte
comite
d243c09300
51 a modificat fișierele cu 535 adăugiri și 5 ștergeri
  1. 48 0
      .gitattributes
  2. 269 0
      packages/fcl-sound/src/fpwavformat.pas
  3. 7 5
      packages/fcl-sound/src/fpwavreader.pas
  4. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav
  5. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.info.txt
  6. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.raw
  7. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav
  8. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.info.txt
  9. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.raw
  10. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav
  11. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.info.txt
  12. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.raw
  13. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav
  14. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.info.txt
  15. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.raw
  16. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav
  17. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.info.txt
  18. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.raw
  19. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav
  20. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.info.txt
  21. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.raw
  22. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav
  23. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.info.txt
  24. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.raw
  25. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav
  26. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.info.txt
  27. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.raw
  28. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav
  29. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.info.txt
  30. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.raw
  31. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav
  32. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.info.txt
  33. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.raw
  34. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav
  35. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.info.txt
  36. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.raw
  37. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav
  38. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.info.txt
  39. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.raw
  40. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav
  41. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.info.txt
  42. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.raw
  43. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav
  44. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.info.txt
  45. 0 0
      packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.raw
  46. BIN
      packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav
  47. 1 0
      packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.info.txt
  48. 0 0
      packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.raw
  49. 103 0
      packages/fcl-sound/tests/tcwavreader.pas
  50. 76 0
      packages/fcl-sound/tests/testfclsound.lpi
  51. 15 0
      packages/fcl-sound/tests/testfclsound.lpr

+ 48 - 0
.gitattributes

@@ -4113,6 +4113,54 @@ packages/fcl-sound/fpmake.pp svneol=native#text/plain
 packages/fcl-sound/src/fpwavformat.pas svneol=native#text/plain
 packages/fcl-sound/src/fpwavreader.pas svneol=native#text/plain
 packages/fcl-sound/src/fpwavwriter.pas svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.raw -text svneol=unset#application/octet-stream
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.raw -text
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.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/data/wav/reader/valid/odd_fmt_size.wav -text svneol=unset#audio/x-wav
+packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.info.txt svneol=native#text/plain
+packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.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
 packages/fcl-stl/Makefile svneol=native#text/plain
 packages/fcl-stl/Makefile.fpc svneol=native#text/plain
 packages/fcl-stl/Makefile.fpc.fpcmake svneol=native#text/plain

+ 269 - 0
packages/fcl-sound/src/fpwavformat.pas

@@ -25,6 +25,275 @@ const
   AUDIO_CHUNK_ID_fmt  = 'fmt ';
   AUDIO_CHUNK_ID_data = 'data';
   AUDIO_FORMAT_PCM = 1;
+  
+  { WAVE form wFormatTag IDs }
+  WAVE_FORMAT_UNKNOWN                    = $0000; { Microsoft Corporation }
+  WAVE_FORMAT_PCM                        = $0001; { Microsoft Corporation }
+  WAVE_FORMAT_ADPCM                      = $0002; { Microsoft Corporation }
+  WAVE_FORMAT_IEEE_FLOAT                 = $0003; { Microsoft Corporation }
+  WAVE_FORMAT_VSELP                      = $0004; { Compaq Computer Corp. }
+  WAVE_FORMAT_IBM_CVSD                   = $0005; { IBM Corporation }
+  WAVE_FORMAT_ALAW                       = $0006; { Microsoft Corporation }
+  WAVE_FORMAT_MULAW                      = $0007; { Microsoft Corporation }
+  WAVE_FORMAT_DTS                        = $0008; { Microsoft Corporation }
+  WAVE_FORMAT_DRM                        = $0009; { Microsoft Corporation }
+  WAVE_FORMAT_WMAVOICE9                  = $000A; { Microsoft Corporation }
+  WAVE_FORMAT_WMAVOICE10                 = $000B; { Microsoft Corporation }
+  WAVE_FORMAT_OKI_ADPCM                  = $0010; { OKI }
+  WAVE_FORMAT_DVI_ADPCM                  = $0011; { Intel Corporation }
+  WAVE_FORMAT_IMA_ADPCM                  = (WAVE_FORMAT_DVI_ADPCM); {  Intel Corporation }
+  WAVE_FORMAT_MEDIASPACE_ADPCM           = $0012; { Videologic }
+  WAVE_FORMAT_SIERRA_ADPCM               = $0013; { Sierra Semiconductor Corp }
+  WAVE_FORMAT_G723_ADPCM                 = $0014; { Antex Electronics Corporation }
+  WAVE_FORMAT_DIGISTD                    = $0015; { DSP Solutions, Inc. }
+  WAVE_FORMAT_DIGIFIX                    = $0016; { DSP Solutions, Inc. }
+  WAVE_FORMAT_DIALOGIC_OKI_ADPCM         = $0017; { Dialogic Corporation }
+  WAVE_FORMAT_MEDIAVISION_ADPCM          = $0018; { Media Vision, Inc. }
+  WAVE_FORMAT_CU_CODEC                   = $0019; { Hewlett-Packard Company }
+  WAVE_FORMAT_HP_DYN_VOICE               = $001A; { Hewlett-Packard Company }
+  WAVE_FORMAT_YAMAHA_ADPCM               = $0020; { Yamaha Corporation of America }
+  WAVE_FORMAT_SONARC                     = $0021; { Speech Compression }
+  WAVE_FORMAT_DSPGROUP_TRUESPEECH        = $0022; { DSP Group, Inc }
+  WAVE_FORMAT_ECHOSC1                    = $0023; { Echo Speech Corporation }
+  WAVE_FORMAT_AUDIOFILE_AF36             = $0024; { Virtual Music, Inc. }
+  WAVE_FORMAT_APTX                       = $0025; { Audio Processing Technology }
+  WAVE_FORMAT_AUDIOFILE_AF10             = $0026; { Virtual Music, Inc. }
+  WAVE_FORMAT_PROSODY_1612               = $0027; { Aculab plc }
+  WAVE_FORMAT_LRC                        = $0028; { Merging Technologies S.A. }
+  WAVE_FORMAT_DOLBY_AC2                  = $0030; { Dolby Laboratories }
+  WAVE_FORMAT_GSM610                     = $0031; { Microsoft Corporation }
+  WAVE_FORMAT_MSNAUDIO                   = $0032; { Microsoft Corporation }
+  WAVE_FORMAT_ANTEX_ADPCME               = $0033; { Antex Electronics Corporation }
+  WAVE_FORMAT_CONTROL_RES_VQLPC          = $0034; { Control Resources Limited }
+  WAVE_FORMAT_DIGIREAL                   = $0035; { DSP Solutions, Inc. }
+  WAVE_FORMAT_DIGIADPCM                  = $0036; { DSP Solutions, Inc. }
+  WAVE_FORMAT_CONTROL_RES_CR10           = $0037; { Control Resources Limited }
+  WAVE_FORMAT_NMS_VBXADPCM               = $0038; { Natural MicroSystems }
+  WAVE_FORMAT_CS_IMAADPCM                = $0039; { Crystal Semiconductor IMA ADPCM }
+  WAVE_FORMAT_ECHOSC3                    = $003A; { Echo Speech Corporation }
+  WAVE_FORMAT_ROCKWELL_ADPCM             = $003B; { Rockwell International }
+  WAVE_FORMAT_ROCKWELL_DIGITALK          = $003C; { Rockwell International }
+  WAVE_FORMAT_XEBEC                      = $003D; { Xebec Multimedia Solutions Limited }
+  WAVE_FORMAT_G721_ADPCM                 = $0040; { Antex Electronics Corporation }
+  WAVE_FORMAT_G728_CELP                  = $0041; { Antex Electronics Corporation }
+  WAVE_FORMAT_MSG723                     = $0042; { Microsoft Corporation }
+  WAVE_FORMAT_INTEL_G723_1               = $0043; { Intel Corp. }
+  WAVE_FORMAT_INTEL_G729                 = $0044; { Intel Corp. }
+  WAVE_FORMAT_SHARP_G726                 = $0045; { Sharp }
+  WAVE_FORMAT_MPEG                       = $0050; { Microsoft Corporation }
+  WAVE_FORMAT_RT24                       = $0052; { InSoft, Inc. }
+  WAVE_FORMAT_PAC                        = $0053; { InSoft, Inc. }
+  WAVE_FORMAT_MPEGLAYER3                 = $0055; { ISO/MPEG Layer3 Format Tag }
+  WAVE_FORMAT_LUCENT_G723                = $0059; { Lucent Technologies }
+  WAVE_FORMAT_CIRRUS                     = $0060; { Cirrus Logic }
+  WAVE_FORMAT_ESPCM                      = $0061; { ESS Technology }
+  WAVE_FORMAT_VOXWARE                    = $0062; { Voxware Inc }
+  WAVE_FORMAT_CANOPUS_ATRAC              = $0063; { Canopus, co., Ltd. }
+  WAVE_FORMAT_G726_ADPCM                 = $0064; { APICOM }
+  WAVE_FORMAT_G722_ADPCM                 = $0065; { APICOM }
+  WAVE_FORMAT_DSAT                       = $0066; { Microsoft Corporation }
+  WAVE_FORMAT_DSAT_DISPLAY               = $0067; { Microsoft Corporation }
+  WAVE_FORMAT_VOXWARE_BYTE_ALIGNED       = $0069; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_AC8                = $0070; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_AC10               = $0071; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_AC16               = $0072; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_AC20               = $0073; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_RT24               = $0074; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_RT29               = $0075; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_RT29HW             = $0076; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_VR12               = $0077; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_VR18               = $0078; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_TQ40               = $0079; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_SC3                = $007A; { Voxware Inc }
+  WAVE_FORMAT_VOXWARE_SC3_1              = $007B; { Voxware Inc }
+  WAVE_FORMAT_SOFTSOUND                  = $0080; { Softsound, Ltd. }
+  WAVE_FORMAT_VOXWARE_TQ60               = $0081; { Voxware Inc }
+  WAVE_FORMAT_MSRT24                     = $0082; { Microsoft Corporation }
+  WAVE_FORMAT_G729A                      = $0083; { AT&T Labs, Inc. }
+  WAVE_FORMAT_MVI_MVI2                   = $0084; { Motion Pixels }
+  WAVE_FORMAT_DF_G726                    = $0085; { DataFusion Systems (Pty) (Ltd) }
+  WAVE_FORMAT_DF_GSM610                  = $0086; { DataFusion Systems (Pty) (Ltd) }
+  WAVE_FORMAT_ISIAUDIO                   = $0088; { Iterated Systems, Inc. }
+  WAVE_FORMAT_ONLIVE                     = $0089; { OnLive! Technologies, Inc. }
+  WAVE_FORMAT_MULTITUDE_FT_SX20          = $008A; { Multitude Inc. }
+  WAVE_FORMAT_INFOCOM_ITS_G721_ADPCM     = $008B; { Infocom }
+  WAVE_FORMAT_CONVEDIA_G729              = $008C; { Convedia Corp. }
+  WAVE_FORMAT_CONGRUENCY                 = $008D; { Congruency Inc. }
+  WAVE_FORMAT_SBC24                      = $0091; { Siemens Business Communications Sys }
+  WAVE_FORMAT_DOLBY_AC3_SPDIF            = $0092; { Sonic Foundry }
+  WAVE_FORMAT_MEDIASONIC_G723            = $0093; { MediaSonic }
+  WAVE_FORMAT_PROSODY_8KBPS              = $0094; { Aculab plc }
+  WAVE_FORMAT_ZYXEL_ADPCM                = $0097; { ZyXEL Communications, Inc. }
+  WAVE_FORMAT_PHILIPS_LPCBB              = $0098; { Philips Speech Processing }
+  WAVE_FORMAT_PACKED                     = $0099; { Studer Professional Audio AG }
+  WAVE_FORMAT_MALDEN_PHONYTALK           = $00A0; { Malden Electronics Ltd. }
+  WAVE_FORMAT_RACAL_RECORDER_GSM         = $00A1; { Racal recorders }
+  WAVE_FORMAT_RACAL_RECORDER_G720_A      = $00A2; { Racal recorders }
+  WAVE_FORMAT_RACAL_RECORDER_G723_1      = $00A3; { Racal recorders }
+  WAVE_FORMAT_RACAL_RECORDER_TETRA_ACELP = $00A4; { Racal recorders }
+  WAVE_FORMAT_NEC_AAC                    = $00B0; { NEC Corp. }
+  WAVE_FORMAT_RAW_AAC1                   = $00FF; { For Raw AAC, with format block AudioSpecificConfig() (as defined by MPEG-4), that follows WAVEFORMATEX }
+  WAVE_FORMAT_RHETOREX_ADPCM             = $0100; { Rhetorex Inc. }
+  WAVE_FORMAT_IRAT                       = $0101; { BeCubed Software Inc. }
+  WAVE_FORMAT_VIVO_G723                  = $0111; { Vivo Software }
+  WAVE_FORMAT_VIVO_SIREN                 = $0112; { Vivo Software }
+  WAVE_FORMAT_PHILIPS_CELP               = $0120; { Philips Speech Processing }
+  WAVE_FORMAT_PHILIPS_GRUNDIG            = $0121; { Philips Speech Processing }
+  WAVE_FORMAT_DIGITAL_G723               = $0123; { Digital Equipment Corporation }
+  WAVE_FORMAT_SANYO_LD_ADPCM             = $0125; { Sanyo Electric Co., Ltd. }
+  WAVE_FORMAT_SIPROLAB_ACEPLNET          = $0130; { Sipro Lab Telecom Inc. }
+  WAVE_FORMAT_SIPROLAB_ACELP4800         = $0131; { Sipro Lab Telecom Inc. }
+  WAVE_FORMAT_SIPROLAB_ACELP8V3          = $0132; { Sipro Lab Telecom Inc. }
+  WAVE_FORMAT_SIPROLAB_G729              = $0133; { Sipro Lab Telecom Inc. }
+  WAVE_FORMAT_SIPROLAB_G729A             = $0134; { Sipro Lab Telecom Inc. }
+  WAVE_FORMAT_SIPROLAB_KELVIN            = $0135; { Sipro Lab Telecom Inc. }
+  WAVE_FORMAT_VOICEAGE_AMR               = $0136; { VoiceAge Corp. }
+  WAVE_FORMAT_G726ADPCM                  = $0140; { Dictaphone Corporation }
+  WAVE_FORMAT_DICTAPHONE_CELP68          = $0141; { Dictaphone Corporation }
+  WAVE_FORMAT_DICTAPHONE_CELP54          = $0142; { Dictaphone Corporation }
+  WAVE_FORMAT_QUALCOMM_PUREVOICE         = $0150; { Qualcomm, Inc. }
+  WAVE_FORMAT_QUALCOMM_HALFRATE          = $0151; { Qualcomm, Inc. }
+  WAVE_FORMAT_TUBGSM                     = $0155; { Ring Zero Systems, Inc. }
+  WAVE_FORMAT_MSAUDIO1                   = $0160; { Microsoft Corporation }
+  WAVE_FORMAT_WMAUDIO2                   = $0161; { Microsoft Corporation }
+  WAVE_FORMAT_WMAUDIO3                   = $0162; { Microsoft Corporation }
+  WAVE_FORMAT_WMAUDIO_LOSSLESS           = $0163; { Microsoft Corporation }
+  WAVE_FORMAT_WMASPDIF                   = $0164; { Microsoft Corporation }
+  WAVE_FORMAT_UNISYS_NAP_ADPCM           = $0170; { Unisys Corp. }
+  WAVE_FORMAT_UNISYS_NAP_ULAW            = $0171; { Unisys Corp. }
+  WAVE_FORMAT_UNISYS_NAP_ALAW            = $0172; { Unisys Corp. }
+  WAVE_FORMAT_UNISYS_NAP_16K             = $0173; { Unisys Corp. }
+  WAVE_FORMAT_SYCOM_ACM_SYC008           = $0174; { SyCom Technologies }
+  WAVE_FORMAT_SYCOM_ACM_SYC701_G726L     = $0175; { SyCom Technologies }
+  WAVE_FORMAT_SYCOM_ACM_SYC701_CELP54    = $0176; { SyCom Technologies }
+  WAVE_FORMAT_SYCOM_ACM_SYC701_CELP68    = $0177; { SyCom Technologies }
+  WAVE_FORMAT_KNOWLEDGE_ADVENTURE_ADPCM  = $0178; { Knowledge Adventure, Inc. }
+  WAVE_FORMAT_FRAUNHOFER_IIS_MPEG2_AAC   = $0180; { Fraunhofer IIS }
+  WAVE_FORMAT_DTS_DS                     = $0190; { Digital Theatre Systems, Inc. }
+  WAVE_FORMAT_CREATIVE_ADPCM             = $0200; { Creative Labs, Inc }
+  WAVE_FORMAT_CREATIVE_FASTSPEECH8       = $0202; { Creative Labs, Inc }
+  WAVE_FORMAT_CREATIVE_FASTSPEECH10      = $0203; { Creative Labs, Inc }
+  WAVE_FORMAT_UHER_ADPCM                 = $0210; { UHER informatic GmbH }
+  WAVE_FORMAT_ULEAD_DV_AUDIO             = $0215; { Ulead Systems, Inc. }
+  WAVE_FORMAT_ULEAD_DV_AUDIO_1           = $0216; { Ulead Systems, Inc. }
+  WAVE_FORMAT_QUARTERDECK                = $0220; { Quarterdeck Corporation }
+  WAVE_FORMAT_ILINK_VC                   = $0230; { I-link Worldwide }
+  WAVE_FORMAT_RAW_SPORT                  = $0240; { Aureal Semiconductor }
+  WAVE_FORMAT_ESST_AC3                   = $0241; { ESS Technology, Inc. }
+  WAVE_FORMAT_GENERIC_PASSTHRU           = $0249;
+  WAVE_FORMAT_IPI_HSX                    = $0250; { Interactive Products, Inc. }
+  WAVE_FORMAT_IPI_RPELP                  = $0251; { Interactive Products, Inc. }
+  WAVE_FORMAT_CS2                        = $0260; { Consistent Software }
+  WAVE_FORMAT_SONY_SCX                   = $0270; { Sony Corp. }
+  WAVE_FORMAT_SONY_SCY                   = $0271; { Sony Corp. }
+  WAVE_FORMAT_SONY_ATRAC3                = $0272; { Sony Corp. }
+  WAVE_FORMAT_SONY_SPC                   = $0273; { Sony Corp. }
+  WAVE_FORMAT_TELUM_AUDIO                = $0280; { Telum Inc. }
+  WAVE_FORMAT_TELUM_IA_AUDIO             = $0281; { Telum Inc. }
+  WAVE_FORMAT_NORCOM_VOICE_SYSTEMS_ADPCM = $0285; { Norcom Electronics Corp. }
+  WAVE_FORMAT_FM_TOWNS_SND               = $0300; { Fujitsu Corp. }
+  WAVE_FORMAT_MICRONAS                   = $0350; { Micronas Semiconductors, Inc. }
+  WAVE_FORMAT_MICRONAS_CELP833           = $0351; { Micronas Semiconductors, Inc. }
+  WAVE_FORMAT_BTV_DIGITAL                = $0400; { Brooktree Corporation }
+  WAVE_FORMAT_INTEL_MUSIC_CODER          = $0401; { Intel Corp. }
+  WAVE_FORMAT_INDEO_AUDIO                = $0402; { Ligos }
+  WAVE_FORMAT_QDESIGN_MUSIC              = $0450; { QDesign Corporation }
+  WAVE_FORMAT_ON2_VP7_AUDIO              = $0500; { On2 Technologies }
+  WAVE_FORMAT_ON2_VP6_AUDIO              = $0501; { On2 Technologies }
+  WAVE_FORMAT_VME_VMPCM                  = $0680; { AT&T Labs, Inc. }
+  WAVE_FORMAT_TPC                        = $0681; { AT&T Labs, Inc. }
+  WAVE_FORMAT_LIGHTWAVE_LOSSLESS         = $08AE; { Clearjump }
+  WAVE_FORMAT_OLIGSM                     = $1000; { Ing C. Olivetti & C., S.p.A. }
+  WAVE_FORMAT_OLIADPCM                   = $1001; { Ing C. Olivetti & C., S.p.A. }
+  WAVE_FORMAT_OLICELP                    = $1002; { Ing C. Olivetti & C., S.p.A. }
+  WAVE_FORMAT_OLISBC                     = $1003; { Ing C. Olivetti & C., S.p.A. }
+  WAVE_FORMAT_OLIOPR                     = $1004; { Ing C. Olivetti & C., S.p.A. }
+  WAVE_FORMAT_LH_CODEC                   = $1100; { Lernout & Hauspie }
+  WAVE_FORMAT_LH_CODEC_CELP              = $1101; { Lernout & Hauspie }
+  WAVE_FORMAT_LH_CODEC_SBC8              = $1102; { Lernout & Hauspie }
+  WAVE_FORMAT_LH_CODEC_SBC12             = $1103; { Lernout & Hauspie }
+  WAVE_FORMAT_LH_CODEC_SBC16             = $1104; { Lernout & Hauspie }
+  WAVE_FORMAT_NORRIS                     = $1400; { Norris Communications, Inc. }
+  WAVE_FORMAT_ISIAUDIO_2                 = $1401; { ISIAudio }
+  WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS    = $1500; { AT&T Labs, Inc. }
+  WAVE_FORMAT_MPEG_ADTS_AAC              = $1600; { Microsoft Corporation }
+  WAVE_FORMAT_MPEG_RAW_AAC               = $1601; { Microsoft Corporation }
+  WAVE_FORMAT_MPEG_LOAS                  = $1602; { Microsoft Corporation (MPEG-4 Audio Transport Streams (LOAS/LATM) }
+  WAVE_FORMAT_NOKIA_MPEG_ADTS_AAC        = $1608; { Microsoft Corporation }
+  WAVE_FORMAT_NOKIA_MPEG_RAW_AAC         = $1609; { Microsoft Corporation }
+  WAVE_FORMAT_VODAFONE_MPEG_ADTS_AAC     = $160A; { Microsoft Corporation }
+  WAVE_FORMAT_VODAFONE_MPEG_RAW_AAC      = $160B; { Microsoft Corporation }
+  WAVE_FORMAT_MPEG_HEAAC                 = $1610; { Microsoft Corporation (MPEG-2 AAC or MPEG-4 HE-AAC v1/v2 streams with any payload (ADTS, ADIF, LOAS/LATM, RAW). Format block includes MP4 AudioSpecificConfig() -- see HEAACWAVEFORMAT below }
+  WAVE_FORMAT_VOXWARE_RT24_SPEECH        = $181C; { Voxware Inc. }
+  WAVE_FORMAT_SONICFOUNDRY_LOSSLESS      = $1971; { Sonic Foundry }
+  WAVE_FORMAT_INNINGS_TELECOM_ADPCM      = $1979; { Innings Telecom Inc. }
+  WAVE_FORMAT_LUCENT_SX8300P             = $1C07; { Lucent Technologies }
+  WAVE_FORMAT_LUCENT_SX5363S             = $1C0C; { Lucent Technologies }
+  WAVE_FORMAT_CUSEEME                    = $1F03; { CUSeeMe }
+  WAVE_FORMAT_NTCSOFT_ALF2CM_ACM         = $1FC4; { NTCSoft }
+  WAVE_FORMAT_DVM                        = $2000; { FAST Multimedia AG }
+  WAVE_FORMAT_DTS2                       = $2001;
+  WAVE_FORMAT_MAKEAVIS                   = $3313;
+  WAVE_FORMAT_DIVIO_MPEG4_AAC            = $4143; { Divio, Inc. }
+  WAVE_FORMAT_NOKIA_ADAPTIVE_MULTIRATE   = $4201; { Nokia }
+  WAVE_FORMAT_DIVIO_G726                 = $4243; { Divio, Inc. }
+  WAVE_FORMAT_LEAD_SPEECH                = $434C; { LEAD Technologies }
+  WAVE_FORMAT_LEAD_VORBIS                = $564C; { LEAD Technologies }
+  WAVE_FORMAT_WAVPACK_AUDIO              = $5756; { xiph.org }
+  WAVE_FORMAT_ALAC                       = $6C61; { Apple Lossless }
+  WAVE_FORMAT_OGG_VORBIS_MODE_1          = $674F; { Ogg Vorbis }
+  WAVE_FORMAT_OGG_VORBIS_MODE_2          = $6750; { Ogg Vorbis }
+  WAVE_FORMAT_OGG_VORBIS_MODE_3          = $6751; { Ogg Vorbis }
+  WAVE_FORMAT_OGG_VORBIS_MODE_1_PLUS     = $676F; { Ogg Vorbis }
+  WAVE_FORMAT_OGG_VORBIS_MODE_2_PLUS     = $6770; { Ogg Vorbis }
+  WAVE_FORMAT_OGG_VORBIS_MODE_3_PLUS     = $6771; { Ogg Vorbis }
+  WAVE_FORMAT_3COM_NBX                   = $7000; { 3COM Corp. }
+  WAVE_FORMAT_OPUS                       = $704F; { Opus }
+  WAVE_FORMAT_FAAD_AAC                   = $706D;
+  WAVE_FORMAT_AMR_NB                     = $7361; { AMR Narrowband }
+  WAVE_FORMAT_AMR_WB                     = $7362; { AMR Wideband }
+  WAVE_FORMAT_AMR_WP                     = $7363; { AMR Wideband Plus }
+  WAVE_FORMAT_GSM_AMR_CBR                = $7A21; { GSMA/3GPP }
+  WAVE_FORMAT_GSM_AMR_VBR_SID            = $7A22; { GSMA/3GPP }
+  WAVE_FORMAT_COMVERSE_INFOSYS_G723_1    = $A100; { Comverse Infosys }
+  WAVE_FORMAT_COMVERSE_INFOSYS_AVQSBC    = $A101; { Comverse Infosys }
+  WAVE_FORMAT_COMVERSE_INFOSYS_SBC       = $A102; { Comverse Infosys }
+  WAVE_FORMAT_SYMBOL_G729_A              = $A103; { Symbol Technologies }
+  WAVE_FORMAT_VOICEAGE_AMR_WB            = $A104; { VoiceAge Corp. }
+  WAVE_FORMAT_INGENIENT_G726             = $A105; { Ingenient Technologies, Inc. }
+  WAVE_FORMAT_MPEG4_AAC                  = $A106; { ISO/MPEG-4 }
+  WAVE_FORMAT_ENCORE_G726                = $A107; { Encore Software }
+  WAVE_FORMAT_ZOLL_ASAO                  = $A108; { ZOLL Medical Corp. }
+  WAVE_FORMAT_SPEEX_VOICE                = $A109; { xiph.org }
+  WAVE_FORMAT_VIANIX_MASC                = $A10A; { Vianix LLC }
+  WAVE_FORMAT_WM9_SPECTRUM_ANALYZER      = $A10B; { Microsoft }
+  WAVE_FORMAT_WMF_SPECTRUM_ANAYZER       = $A10C; { Microsoft }
+  WAVE_FORMAT_GSM_610                    = $A10D;
+  WAVE_FORMAT_GSM_620                    = $A10E;
+  WAVE_FORMAT_GSM_660                    = $A10F;
+  WAVE_FORMAT_GSM_690                    = $A110;
+  WAVE_FORMAT_GSM_ADAPTIVE_MULTIRATE_WB  = $A111;
+  WAVE_FORMAT_POLYCOM_G722               = $A112; { Polycom }
+  WAVE_FORMAT_POLYCOM_G728               = $A113; { Polycom }
+  WAVE_FORMAT_POLYCOM_G729_A             = $A114; { Polycom }
+  WAVE_FORMAT_POLYCOM_SIREN              = $A115; { Polycom }
+  WAVE_FORMAT_GLOBAL_IP_ILBC             = $A116; { Global IP }
+  WAVE_FORMAT_RADIOTIME_TIME_SHIFT_RADIO = $A117; { RadioTime }
+  WAVE_FORMAT_NICE_ACA                   = $A118; { Nice Systems }
+  WAVE_FORMAT_NICE_ADPCM                 = $A119; { Nice Systems }
+  WAVE_FORMAT_VOCORD_G721                = $A11A; { Vocord Telecom }
+  WAVE_FORMAT_VOCORD_G726                = $A11B; { Vocord Telecom }
+  WAVE_FORMAT_VOCORD_G722_1              = $A11C; { Vocord Telecom }
+  WAVE_FORMAT_VOCORD_G728                = $A11D; { Vocord Telecom }
+  WAVE_FORMAT_VOCORD_G729                = $A11E; { Vocord Telecom }
+  WAVE_FORMAT_VOCORD_G729_A              = $A11F; { Vocord Telecom }
+  WAVE_FORMAT_VOCORD_G723_1              = $A120; { Vocord Telecom }
+  WAVE_FORMAT_VOCORD_LBC                 = $A121; { Vocord Telecom }
+  WAVE_FORMAT_NICE_G728                  = $A122; { Nice Systems }
+  WAVE_FORMAT_FRACE_TELECOM_G729         = $A123; { France Telecom }
+  WAVE_FORMAT_CODIAN                     = $A124; { CODIAN }
+  WAVE_FORMAT_FLAC                       = $F1AC; { flac.sourceforge.net }
+  WAVE_FORMAT_EXTENSIBLE                 = $FFFE; { Microsoft }
 
 type
   TChunkID = array [0..3] of char;

+ 7 - 5
packages/fcl-sound/src/fpwavreader.pas

@@ -94,9 +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);
-  if Result and (fmt.Format <> 1) then 
-    Exit(False);
+  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(Align((fmt.ChunkHeader.Size + 8) - sizeof(fmt), 2), soCurrent);
 end;
 
 function Min(a, b: Integer): Integer;
@@ -121,8 +121,10 @@ begin
       EoF := sz < sizeof(DataChunk);
       if not EoF then begin
         DataChunk.Size := LEtoN(DataChunk.Size);
-        if DataChunk.Id <> AUDIO_CHUNK_ID_data then
-          ChunkPos := DataChunk.Size
+        if DataChunk.Id <> AUDIO_CHUNK_ID_data then begin
+          ChunkPos := DataChunk.Size;
+          fstream.Seek(DataChunk.Size, soCurrent);
+        end
         else
           ChunkPos := 0;
       end;

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.info.txt

@@ -0,0 +1 @@
+44100 1 16 1

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.info.txt

@@ -0,0 +1 @@
+44100 1 16 1

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_16_tag.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.info.txt

@@ -0,0 +1 @@
+44100 1 24 1

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_24.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.info.txt

@@ -0,0 +1 @@
+44100 1 32 1

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.info.txt

@@ -0,0 +1 @@
+44100 1 32 3

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_32float.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.info.txt

@@ -0,0 +1 @@
+44100 1 64 3

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_64float.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.info.txt

@@ -0,0 +1 @@
+44100 1 8 1

+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_mono_8.wav.raw

@@ -0,0 +1 @@
+唽摍煡�祷棵撬涡矣栽右型势陆繁�潟巻wpic\WRNKHGFFGILOTY^djqx~厠憱殲。ゥぃ�殩拲垉~zvromlkklmoqsvy|

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.info.txt

@@ -0,0 +1 @@
+44100 2 16 1

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_16.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.info.txt

@@ -0,0 +1 @@
+44100 2 24 1

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_24.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.info.txt

@@ -0,0 +1 @@
+44100 2 32 1

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.info.txt

@@ -0,0 +1 @@
+44100 2 32 3

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_32float.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.info.txt

@@ -0,0 +1 @@
+44100 2 64 3

BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_64float.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.info.txt

@@ -0,0 +1 @@
+44100 2 8 1

+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/44k_stereo_8.wav.raw

@@ -0,0 +1 @@
+�n蒒𦧺法綏驥胵跩跣跧跫輆輀輇輋����������������輋庬膺郡俽箒}ema]]MZ>X1V%TSRRSTUWZ]aei(m4rBwP{_�n���𣑐俈尐𠳔␋羽來肴皇倔晉紕紡挈悄���址山】萜𢬎㛇𤉶𩤅䕭𨅝䱗������wy

BIN
packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.info.txt

@@ -0,0 +1 @@
+4800 1 8 1

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
packages/fcl-sound/tests/data/wav/reader/valid/euphoric_tape.wav.raw


BIN
packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav


+ 1 - 0
packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.info.txt

@@ -0,0 +1 @@
+4800 1 8 1

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
packages/fcl-sound/tests/data/wav/reader/valid/odd_fmt_size.wav.raw


+ 103 - 0
packages/fcl-sound/tests/tcwavreader.pas

@@ -0,0 +1,103 @@
+unit tcwavreader;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, fpcunit, testutils, testregistry,
+  fpwavreader;
+
+type
+
+  { TTestWavReader }
+
+  TTestWavReader= class(TTestCase)
+  private
+    procedure TestValidFile(const FileName: string);
+  published
+    procedure TestValidFiles;
+  end;
+
+implementation
+
+procedure TTestWavReader.TestValidFile(const FileName: string);
+const
+  CorrectFileDir = 'data/wav/reader/valid/';
+var
+  WavReader: TWavReader;
+  InfoFile: TextFile;
+  RawDataFile: File;
+  ExpectedSampleRate, ExpectedChannels, ExpectedBitsPerSample,
+  ExpectedFormat: Integer;
+  ExpectedData: array of Byte;
+  ActualData: array of Byte;
+  ActualDataLen: Integer;
+  SaveFileMode: Byte;
+begin
+  AssignFile(InfoFile, CorrectFileDir + FileName + '.info.txt');
+  Reset(InfoFile);
+  try
+    Readln(InfoFile, ExpectedSampleRate, ExpectedChannels, ExpectedBitsPerSample, ExpectedFormat);
+  finally
+    CloseFile(InfoFile);
+  end;
+
+  SaveFileMode := FileMode;
+  try
+    FileMode := 0;
+    AssignFile(RawDataFile, CorrectFileDir + FileName + '.raw');
+    Reset(RawDataFile, 1);
+    try
+      SetLength(ExpectedData, FileSize(RawDataFile));
+      BlockRead(RawDataFile, ExpectedData[0], Length(ExpectedData));
+    finally
+      CloseFile(RawDataFile);
+    end;
+  finally
+    FileMode := SaveFileMode;
+  end;
+
+  WavReader := TWavReader.Create;
+  try
+    if not WavReader.LoadFromFile(CorrectFileDir + FileName) then
+      Fail('Error loading wave file');
+    AssertEquals('Incorrect format', ExpectedFormat, WavReader.fmt.Format);
+    AssertEquals('Incorrect sample rate', ExpectedSampleRate, WavReader.fmt.SampleRate);
+    AssertEquals('Incorrect number of channels', ExpectedChannels, WavReader.fmt.Channels);
+    AssertEquals('Incorrect number of bits per sample', ExpectedBitsPerSample, WavReader.fmt.BitsPerSample);
+    SetLength(ActualData, Length(ExpectedData));
+    ActualDataLen := WavReader.ReadBuf(ActualData[0], Length(ActualData));
+    AssertEquals('Data length', Length(ExpectedData), ActualDataLen);
+    AssertTrue('Data differs', CompareMem(@ExpectedData[0], @ActualData[0], ActualDataLen));
+  finally
+    FreeAndNil(WavReader);
+  end;
+end;
+
+procedure TTestWavReader.TestValidFiles;
+begin
+  TestValidFile('44k_mono_8.wav');
+  TestValidFile('44k_mono_16.wav');
+  TestValidFile('44k_mono_24.wav');
+  TestValidFile('44k_mono_32.wav');
+  TestValidFile('44k_mono_32float.wav');
+  TestValidFile('44k_mono_64float.wav');
+  TestValidFile('44k_stereo_8.wav');
+  TestValidFile('44k_stereo_16.wav');
+  TestValidFile('44k_stereo_24.wav');
+  TestValidFile('44k_stereo_32.wav');
+  TestValidFile('44k_stereo_32float.wav');
+  TestValidFile('44k_stereo_64float.wav');
+  TestValidFile('44k_mono_16_tag.wav');
+  TestValidFile('euphoric_tape.wav');
+  TestValidFile('odd_fmt_size.wav');
+end;
+
+
+
+initialization
+
+  RegisterTest(TTestWavReader);
+end.
+

+ 76 - 0
packages/fcl-sound/tests/testfclsound.lpi

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="11"/>
+    <General>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <Title Value="testfclsound"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+    </General>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <UseFileFilters Value="True"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="0"/>
+    </RunParams>
+    <RequiredPackages Count="3">
+      <Item1>
+        <PackageName Value="fpcunittestrunner"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="LCL"/>
+      </Item2>
+      <Item3>
+        <PackageName Value="FCL"/>
+      </Item3>
+    </RequiredPackages>
+    <Units Count="2">
+      <Unit0>
+        <Filename Value="testfclsound.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="tcwavreader.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit1>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="testfclsound"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <OtherUnitFiles Value="../src"/>
+      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Linking>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 15 - 0
packages/fcl-sound/tests/testfclsound.lpr

@@ -0,0 +1,15 @@
+program testfclsound;
+
+{$mode objfpc}{$H+}
+
+uses
+  Interfaces, Forms, GuiTestRunner, tcwavreader;
+
+{$R *.res}
+
+begin
+  Application.Initialize;
+  Application.CreateForm(TGuiTestRunner, TestRunner);
+  Application.Run;
+end.
+

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff