Цитата:
Сообщение от Dmitry_DM
Тогда, может, здесь?
Код:
for I := 1 to NumSamples do
begin
for J := 1 to WavInfo.WaveFormat.nChannels do
begin
fs.ReadBuffer(Sample, BytsPerSample);
case BytsPerSample of
1: Sample := Shortint(Sample);
2: Sample := SmallInt(Sample);
end;
WavInfo.Samples[J - 1, I - 1] := Sample;
if Abs(Sample) > WavInfo.MaxAmplitude then WavInfo.MaxAmplitude := Abs(Sample);
end;
end;
WavInfo.NumSamples := LongInt(NumSamples);
end;
|
Правильно, здесь. Только в этом месте WavInfo это никакая не глобальная переменная, а формальный параметр процедуры ReadWavInfo:
Код:
procedure ReadWavInfo(const FileName: string; var WavInfo: TWavInfo);
А фактически, здесь будет участвовать переменная, которую сюда подставит тот, кто вызовет процедуру ReadWavInfo, а вызов этой процедуры происходит здесь:
Код:
procedure TForm1.Button1Click(Sender: TObject);
...
begin
...
ReadWavInfo(OpenDialog1.FileName, FWavInfo);
...
end;
Итого получается следующее:
Button1Click - читает wav-файл и записывает информацию о нём в переменную
FWavInfo.
Button4Click - пытается прочитать переменную
WavInfo чтобы записать её содержимое в файл, но у Button4Click конечно же ничего не получается, так как в переменную
WavInfo данные никто не заносил.