Теперь во всем деле есть только 3 проблемы. И все! На этом проект пока приостанавливается. Но все же есть 3 проблемы: первая - это почему при считывании самих сэмплов идет, к примеру так: FFFA 000A FFEE, а должно быть FAFF 0A00 EEFF. В проф. HEX эдиторе так. Можно это как то поменять местами 2 символа при выводе? Вот код:
Код:
if Header.wFormatTag<>1 then
begin
Form1.Memo1.Lines.Add('ОШИБКА! Я умею читать wav-файлы только в формате PCM, а этот файл в формате 0x'+IntToHex(Header.wFormatTag, 4));
end;
SampleSize:=(Header.wBitsPerSample+7) div 8;
if SampleSize>SizeOf(sample) then
begin
Form1.Memo1.Lines.Add('ОШИБКА! Слишком большой размер сэмпла ('+IntToStr(SampleSize)+' байт)');
Exit;
end;
if Header.wChannels=0 then
begin
Form1.Memo1.Lines.Add('ОШИБКА! Нет каналов');
Exit;
end;
Form1.Memo1.WordWrap:=False;
Form1.Memo1.ScrollBars:=ssBoth;
sample:=0;
i:=0;
while wChankSize>=(SampleSize*Header.wChannels) do
begin
if Header.wBlockAlign>0 then
begin
n:=f.Position mod Header.wBlockAlign;
if n>0 then
begin
n:=Header.wBlockAlign-n;
f.Seek(n, soFromCurrent);
Dec(wChankSize, n);
if wChankSize<(SampleSize*Header.wChannels) then Break;
end;
end;
Inc(i);
s1:='';
s:=''+IntToStr(i);
for chanel := 1 to Header.wChannels do
begin
f.ReadBuffer(sample, SampleSize);
Dec(wChankSize, SampleSize);
s:=s+' Chanel'+IntToStr(chanel)+' '+IntToHex(sample, SampleSize*2);
s1:=IntToHex(sample, SampleSize*2);
end;
Form1.Memo1.Lines.Add(s1);
end;
exit;
f.Free;
Except
Result.ERROR := ReadError;
end;
end;
Вторая проблема: Я еле смог сделать вывод сэмплов в "чистом виде", то есть без семпл:такой-то, канал 1: "значение". Сделал только значение. Но исходит проблема: в 2-х канальном wav не выводиться так FFFAFFFA, а только так: FFFA. Как сделать, чтобы рядом и второй канал приписывался? А 3 проблему расскажу потом.