Показать сообщение отдельно
  #66  
Старый 14.08.2012, 15:56
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Теперь во всем деле есть только 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 проблему расскажу потом.
Ответить с цитированием