Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2010, 01:08   #1
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию Визуализация Синусоидального сигнала

Уж больно тормозит... Глаянте пожалуйста. Может какие идеи возникнут...

Код:
function TGrForm32.BuildGraph(lpSampleArray : pointer; dwSampleCount, dwCross : DWORD;
                              RAWFormat : TBaseRAWFormat; dwGraphType : DWORD) : HSERESULT;
var
  flStep : Single;
  dwSampleSize : DWORD;
  flIndex : Single;
  dwSubIndex : DWORD;
  dwMaxSample, dwSample, dwGrIndex, dwCenter, dwPass : Integer;
  bConv : bool;
  lpOffset : DWORD;
  dwHighInt : Integer;
begin
  if not fbInit then
  begin
    result := ERR_GR_NO_INIT;
    exit;
  end;

  if (not assigned( lpSampleArray )) or ( dwSampleCount <= 0 ) or ( dwCross <= 0) then
  begin
    result := ERR_GR_INVALID_PARAM;
    exit;
  end;

//  fBuffer.BeginUpdate;
  try

  case dwGraphType of
  GF32_GT_WAVE_SIN :
  begin
    DrawBack( RAWFormat.dwChannel );

    try
    dwSampleSize := (( RAWFormat.dwBPS shr 3 ) * RAWFormat.dwChannel );
    flStep :=  ( dwSampleCount ) / ( fClientRect.Right - (fOffset.X * 2));
    dwCenter := ( fClientRect.Bottom div 2 ) div RAWFormat.dwChannel;

    for dwPass := 0 to RAWFormat.dwChannel - 1 do
    begin

    lpOffset := 0;
    flIndex := 0;
    dwGrIndex := fOffset.X;
    while flIndex <= ( dwSampleCount ) do
    begin
      dwMaxSample := 0;
      bConv := false;
      for dwSubIndex := 0 to Ceil(flStep) - 1 do
      begin
        lpOffset := ( floor(flIndex) * dwSampleSize ) + ( (RAWFormat.dwBPS shr 3) * dwPass );
        lpOffset := lpOffset + ( dwSubIndex + ((RAWFormat.dwBPS shr 3) * dwPass ) );
      case RAWFormat.dwBPS of
      8 :
        begin
          dwSample := PShortInt( DWORD(lpSampleArray) + lpOffset )^;
          dwHighInt := High(ShortInt);
        end;
      16 :
        begin
          dwSample := PSmallInt( DWORD(lpSampleArray) + lpOffset )^;
          dwHighInt := High(SmallInt);
        end;
      32 :
        begin
          dwSample := PInteger( DWORD(lpSampleArray) + lpOffset )^;
          dwHighInt := High(Integer);
        end;
      end;

        if dwSample < 0 then
        begin
          dwSample := Abs(dwSample);
          bConv := true;
        end
        else
          bConv := false;

        if dwSample > dwMaxSample then
          dwMaxSample := dwSample;
      end;

      if not bConv then
        dwMaxSample := -dwMaxSample;

      dwMaxSample := Round(dwMaxSample / ( dwHighInt / (dwCenter - (fOffset.Y)) ));

      fBuffer.LineTS(dwGrIndex,  dwCenter + dwMaxSample + ( dwPass * ( dwCenter * 2)), dwGrIndex, dwCenter + ( dwPass * ( dwCenter * 2)), fLineColor);
        
      flIndex := flIndex + flStep;
      inc(dwGrIndex)
    end;
  end;
  
  except
    result := ERR_GR_EXCEPT;
  end;
  end; //end  GF32_GT_WAVE_SIN
  
  end;
  finally
//    fBuffer.EndUpdate;
  end;
end;
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 29.05.2010, 01:11   #2
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Не успевает у меня функа за аудио потоком... блин.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 29.05.2010, 09:17   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

уменьшайте буфер для данных
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.05.2010, 14:09   #4
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Уменьшу, будт меньше период срабатывания. Шило на мыло
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 29.05.2010, 14:59   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

в чем проявляется торможение? разрывы в графике?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 29.05.2010, 19:05   #6
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

У меня поток делает дамп с основного буфера, откуда посупают байты на воспроизведение. Дамп имеет своё время. Допустим нужно отображать период в 1кГц и соответственно дамп будет иметь размер под эту частоту и время тоже. И у меня функа при таком раскладе имеет время выполнения (на моём апарате) около 16 мс, а время срабатывания дампа около 3. Вот и разница... Больно уж меееедленно...
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 30.05.2010, 18:47   #7
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Ну и на том спасибо...
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 30.05.2010, 19:04   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

отображайте меньшее количество периодов ...сколько у вас в дампе отсчетов, сделайте меньше
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сложная визуализация Domanoff Помощь студентам 6 07.03.2010 19:25
Визуализация ekzobyte Мультимедиа в Delphi 1 18.03.2009 18:11
Визуализация сигнала с аудио выхода AXiUS Мультимедиа в Delphi 4 29.01.2009 12:37
BASS Визуализация Garacio_cain Мультимедиа в Delphi 2 14.08.2008 00:19
визуализация алгоритма Alar Паскаль, Turbo Pascal, PascalABC.NET 0 30.10.2006 14:10