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

Цитата:
Сообщение от Dmitry_DM
Может вы подробнее расскажите как осуществить задуманное? Вы же полностью знаете ты программу-читалку wav. Как связать данные и передать их для построения графика?
С TChart не работал - не подскажу. А вот если рисовать на канве, то вот так можно рисовать гистограму:
Код:
var
  WavInfo: TWavInfo;
  KX, KY: Extended;
  i, X, Y, DY, Chanel: Integer;
begin
  KX := 1; // Коэффициент пропорциональности по абсциссе
  KY := 0.01; // Коэффициент пропорциональности по ординате
  DY := Height div 2; // Смещение по ординате
  Chanel := 0; // Номер рисуемого канала
  Repaint;

  for i := Low(WavInfo.Samples) to High(WavInfo.Samples) do
  begin
    X := Trunc(KX * i);
    Y := Trunc(KY * Smallint(WavInfo.Samples[i, Chanel]) + DY);

    Canvas.MoveTo(X, DY);
    Canvas.LineTo(X, Y);
  end;
end;
В этом примере рисуется прямо на форме, но можно переделать и на TPaintBox, на TBitmap и т.п.

А вот так можно рисовать обычную волну:
Код:
var
  WavInfo: TWavInfo;
  KX, KY: Extended;
  i, X, Y, DY, Chanel: Integer;
begin
  KX := 1; // Коэффициент пропорциональности по абсциссе
  KY := 0.01; // Коэффициент пропорциональности по ординате
  DY := Height div 2; // Смещение по ординате
  Chanel := 0; // Номер рисуемого канала
  Repaint;

  for i := Low(WavInfo.Samples) to High(WavInfo.Samples) do
  begin
    X := Trunc(KX * i);
    Y := Trunc(KY * Smallint(WavInfo.Samples[i, Chanel]) + DY);

    if i = Low(WavInfo.Samples)
      then Canvas.MoveTo(X, Y)
      else Canvas.LineTo(X, Y);
  end;
end;
Ответить с цитированием