Цитата:
Сообщение от Dmitry_DM
Боже! У меня не чего не выходит. Ставлю
Получается файл 27 Мб!!! Ставлю
Потом при записи ставлю
Получается файл 44 byte!!! Без сэмплов и с 2 строчками заголовка. Что делать - НЕ ЗНАЮ Пожалуйста, ПОМОГИТЕ!!!!
|
Конечное значение переменной
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;