tcwavreader.pas 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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: Integer;
  24. ExpectedData: array of Byte;
  25. ActualData: array of Byte;
  26. ActualDataLen: Integer;
  27. SaveFileMode: Byte;
  28. begin
  29. AssignFile(InfoFile, CorrectFileDir + FileName + '.info.txt');
  30. Reset(InfoFile);
  31. try
  32. Readln(InfoFile, ExpectedSampleRate, ExpectedChannels, ExpectedBitsPerSample);
  33. finally
  34. CloseFile(InfoFile);
  35. end;
  36. SaveFileMode := FileMode;
  37. try
  38. FileMode := 0;
  39. AssignFile(RawDataFile, CorrectFileDir + FileName + '.raw');
  40. Reset(RawDataFile, 1);
  41. try
  42. SetLength(ExpectedData, FileSize(RawDataFile));
  43. BlockRead(RawDataFile, ExpectedData[0], Length(ExpectedData));
  44. finally
  45. CloseFile(RawDataFile);
  46. end;
  47. finally
  48. FileMode := SaveFileMode;
  49. end;
  50. WavReader := TWavReader.Create;
  51. try
  52. if not WavReader.LoadFromFile(CorrectFileDir + FileName) then
  53. Fail('Error loading wave file');
  54. AssertEquals('Incorrect sample rate', ExpectedSampleRate, WavReader.fmt.SampleRate);
  55. AssertEquals('Incorrect number of channels', ExpectedChannels, WavReader.fmt.Channels);
  56. AssertEquals('Incorrect number of bits per sample', ExpectedBitsPerSample, WavReader.fmt.BitsPerSample);
  57. SetLength(ActualData, Length(ExpectedData));
  58. ActualDataLen := WavReader.ReadBuf(ActualData[0], Length(ActualData));
  59. AssertEquals('Data length', Length(ExpectedData), ActualDataLen);
  60. AssertTrue('Data differs', CompareMem(@ExpectedData[0], @ActualData[0], ActualDataLen));
  61. finally
  62. FreeAndNil(WavReader);
  63. end;
  64. end;
  65. procedure TTestWavReader.TestValidFiles;
  66. begin
  67. TestValidFile('44k_mono_8.wav');
  68. TestValidFile('44k_mono_16.wav');
  69. TestValidFile('44k_mono_24.wav');
  70. TestValidFile('44k_mono_32.wav');
  71. TestValidFile('44k_stereo_8.wav');
  72. TestValidFile('44k_stereo_16.wav');
  73. TestValidFile('44k_stereo_24.wav');
  74. TestValidFile('44k_stereo_32.wav');
  75. TestValidFile('44k_mono_16_tag.wav');
  76. end;
  77. initialization
  78. RegisterTest(TTestWavReader);
  79. end.