tcwavreader.pas 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. unit tcwavreader;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testutils, testregistry,
  6. fpwavreader;
  7. type
  8. { TTestWavReader }
  9. TTestWavReader= class(TTestCase)
  10. private
  11. procedure TestValidFile(const FileName: string);
  12. published
  13. procedure TestValidFiles;
  14. end;
  15. implementation
  16. procedure TTestWavReader.TestValidFile(const FileName: string);
  17. const
  18. CorrectFileDir = 'data/wav/reader/valid/';
  19. var
  20. WavReader: TWavReader;
  21. InfoFile: TextFile;
  22. RawDataFile: File;
  23. ExpectedSampleRate, ExpectedChannels, ExpectedBitsPerSample,
  24. ExpectedFormat: Integer;
  25. ExpectedData: array of Byte;
  26. ActualData: array of Byte;
  27. ActualDataLen: Integer;
  28. SaveFileMode: Byte;
  29. begin
  30. AssignFile(InfoFile, CorrectFileDir + FileName + '.info.txt');
  31. Reset(InfoFile);
  32. try
  33. Readln(InfoFile, ExpectedSampleRate, ExpectedChannels, ExpectedBitsPerSample, ExpectedFormat);
  34. finally
  35. CloseFile(InfoFile);
  36. end;
  37. SaveFileMode := FileMode;
  38. try
  39. FileMode := 0;
  40. AssignFile(RawDataFile, CorrectFileDir + FileName + '.raw');
  41. Reset(RawDataFile, 1);
  42. try
  43. SetLength(ExpectedData, FileSize(RawDataFile));
  44. BlockRead(RawDataFile, ExpectedData[0], Length(ExpectedData));
  45. finally
  46. CloseFile(RawDataFile);
  47. end;
  48. finally
  49. FileMode := SaveFileMode;
  50. end;
  51. WavReader := TWavReader.Create;
  52. try
  53. if not WavReader.LoadFromFile(CorrectFileDir + FileName) then
  54. Fail('Error loading wave file');
  55. AssertEquals('Incorrect format', ExpectedFormat, WavReader.fmt.Format);
  56. AssertEquals('Incorrect sample rate', ExpectedSampleRate, WavReader.fmt.SampleRate);
  57. AssertEquals('Incorrect number of channels', ExpectedChannels, WavReader.fmt.Channels);
  58. AssertEquals('Incorrect number of bits per sample', ExpectedBitsPerSample, WavReader.fmt.BitsPerSample);
  59. SetLength(ActualData, Length(ExpectedData));
  60. ActualDataLen := WavReader.ReadBuf(ActualData[0], Length(ActualData));
  61. AssertEquals('Data length', Length(ExpectedData), ActualDataLen);
  62. AssertTrue('Data differs', CompareMem(@ExpectedData[0], @ActualData[0], ActualDataLen));
  63. finally
  64. FreeAndNil(WavReader);
  65. end;
  66. end;
  67. procedure TTestWavReader.TestValidFiles;
  68. begin
  69. TestValidFile('44k_mono_8.wav');
  70. TestValidFile('44k_mono_16.wav');
  71. TestValidFile('44k_mono_24.wav');
  72. TestValidFile('44k_mono_32.wav');
  73. TestValidFile('44k_mono_32float.wav');
  74. TestValidFile('44k_mono_64float.wav');
  75. TestValidFile('44k_stereo_8.wav');
  76. TestValidFile('44k_stereo_16.wav');
  77. TestValidFile('44k_stereo_24.wav');
  78. TestValidFile('44k_stereo_32.wav');
  79. TestValidFile('44k_stereo_32float.wav');
  80. TestValidFile('44k_stereo_64float.wav');
  81. TestValidFile('44k_mono_16_tag.wav');
  82. TestValidFile('euphoric_tape.wav');
  83. TestValidFile('odd_fmt_size.wav');
  84. end;
  85. initialization
  86. RegisterTest(TTestWavReader);
  87. end.