Поразбирался еще,вроде бы вот так нужно считывать:
Код:
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),с его начала.
А вот если в массивах везде поменять размерность на порядок(и на увеличение и на уменьшение), то вообще ничего не меняется в записанном файле.
Вот что я не так делаю?