
15.08.2012, 23:45
|
Активный
|
|
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
|
|
Цитата:
Сообщение от poli-smen
Конечное значение переменной i это и будет количество прочитанных сэмплов, т.е. NumSamples.
В каком месте вы считываете конечное значение переменной i? Считывать её нужно в конце этого цикла:
Код:
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 := '';
for chanel := 1 to Header.wChannels do
begin
f.ReadBuffer(sample, SampleSize);
Dec(wChankSize, SampleSize);
s1 := s1 + IntToHex(sample, SampleSize * 2);
end;
Form1.Memo1.Lines.Add(s1);
end;
exit;
Как раз вместо слова exit. Кстати что это за exit? Откуда он тут взялся? Его здесь быть не должно.
А вот если ещё почитать внимательно справку здесь, то для звука в формате PCM вышеприведённый цикл можно значительно упростить:
Код:
sample := 0;
NumSamples := wChankSize div (SampleSize * Header.wChannels);
for i := 1 to NumSamples do
begin
s1 := '';
for chanel := 1 to Header.wChannels do
begin
f.ReadBuffer(sample, SampleSize);
s1 := s1 + IntToHex(sample, SampleSize * 2);
end;
Form1.Memo1.Lines.Add(s1);
end;
|
А каким кодом правильнее всего считать I? Что бы уже точно правильно было. Может так:
|