fpc/packages/fcl-sound/tests/tcwavreader.pas
2020-11-24 00:31:16 +00:00

104 lines
2.8 KiB
ObjectPascal

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.