Показать сообщение отдельно
  #87  
Старый 15.08.2012, 21:57
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Боже! У меня не чего не выходит. Ставлю
Код:
NumSamples:= i;
Получается файл 27 Мб!!! Ставлю
Код:
Inc(i);
s2:=i;
Потом при записи ставлю
Код:
NumSamples:= s2;

Получается файл 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;
Ответить с цитированием