Показать сообщение отдельно
  #7  
Старый 06.11.2011, 19:59
Змей Змей вне форума
Прохожий
 
Регистрация: 03.11.2011
Сообщения: 18
Репутация: 10
По умолчанию

Поразбирался еще,вроде бы вот так нужно считывать:
Код:
TWaveHeader = record
    idRiff: array[0..3] of char;
    RiffLen: longint;
    idWave: array[0..3] of char;
    idFmt: array[0..3] of char;
    InfoLen: longint;
    WaveType: smallint;
    Ch: smallint;
    Freq: longint;
    BytesPerSec: longint;
    align: smallint;
    Bits: smallint;
    idData: array[0..3] of char;
    DataLen: longint;
    Data: array[0..10000000] of SmallInt;//по 2 байта

Но до конца не уверен,вывел на график в chart, вроде похоже,но чтоб наверняка решил сохранить звуковые данные из одного файла в другой,записал так:
Код:
    
TWaveHeader = record
    idRiff: array[0..3] of char;
    RiffLen: longint;
    idWave: array[0..3] of char;
    idFmt: array[0..3] of char;
    InfoLen: longint;
    WaveType: smallint;
    Ch: smallint;
    Freq: longint;
    BytesPerSec: longint;
    align: smallint;
    Bits: smallint;
    idData: array[0..3] of char;
    DataLen: longint;
    Data: array[0..10000000] of SmallInt;//по 2 байта
end;
TWaveHeader1 = record
    idRiff1: array[0..3] of char;
    RiffLen1: longint;
    idWave1: array[0..3] of char;
    idFmt1: array[0..3] of char;
    InfoLen1: longint;
    WaveType1: smallint;
    Ch1: smallint;
    Freq1: longint;
    BytesPerSec1: longint;
    align1: smallint;
    Bits1: smallint;
    idData1: array[0..3] of char;
    DataLen1: longint;
    Data1: array[0..10000000] of SmallInt;
  end;

var
  Form1: TForm1;
  F,E: TFileStream;
  WaveHeader: TWaveHeader;
  WaveHeader1: TWaveHeader1;
  i: integer;
  Dat: array[0..10000000] of SmallInt;

procedure TForm1.Button1Click(Sender: TObject);
begin
if opendialog1.Execute then
F:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
F.Read(WaveHeader, sizeof(TWaveHeader));
  with WaveHeader do
  begin
  for i:=0 to 10000000 do
  dat[i]:=data[i];
  end;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
if opendialog1.Execute then
E:= TFileStream.Create(OpenDialog1.FileName, fmOpenReadWrite);
E.Read(WaveHeader1, sizeof(TWaveHeader1));
  with WaveHeader1 do
  begin
  for i:=0 to 10000000 do
  data1[i]:=dat[i];
  E.Write(WaveHeader1, sizeof(TWaveHeader1));
  end;
end;

end.

И получается непонятная фигня в итоге, сохраненный файл(номер 2), длиной 1:59, до 1:53 точно такой же как и был,а потом уже оставшиеся 6 секунд с исходного файла(номер 1),с его начала.
А вот если в массивах везде поменять размерность на порядок(и на увеличение и на уменьшение), то вообще ничего не меняется в записанном файле.
Вот что я не так делаю?
Ответить с цитированием