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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2010, 21:55   #11
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

в какой-то теме я выкладывал исходник, там тоже есть анализатор.
исходник
остальные файлы:
Вложения
Тип файла: rar tbassplayer.rar (386.4 Кб, 96 просмотров)
если чем помог, поставьте отзыв на весы
Xatr вне форума Ответить с цитированием
Старый 25.03.2010, 23:38   #12
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Классная программа, но я так и не понял как пишется анализатор За то понял кое-что, анализатор строится на основе двоичной картинки 32 бита :D а дальше тупик...
Всё гениальное - просто!

Последний раз редактировалось .Phoenix; 25.03.2010 в 23:41.
.Phoenix вне форума Ответить с цитированием
Старый 26.03.2010, 16:23   #13
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Да что ты привязался к этому PaintBox'у. PaintBox это просто видимая часть айсберга, графическое его (спектроанализатора или чего там тебе надо) представление. Можешь хоть кнопки столбиками выстрой и меняй высоту им.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 26.03.2010, 16:53   #14
nXs
Форумчанин
 
Регистрация: 26.02.2010
Сообщений: 126
По умолчанию

Совместно с DSPack, я использовал DSPackDCDSPFilter. При его помощи можно много чего реализовать (эквалайзер, визуализации, фильтры, 3D и т.д, т.п.).
nXs вне форума Ответить с цитированием
Старый 26.03.2010, 18:14   #15
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

mutabor я хочу написать анализатор, как и во всех программах с помощью нормальных визуализаций. А столбики приберегу для эквалайзера. Т.е. хочу написать нормальный мп3 плеер для себя, всё таки пишу для себя и хочу чтоб были все функциональные и визуальные удобства присутствовали в моей программе
nXs спс, буду искать. Если у тебя ещё есть DSPack и DSPackDCDSPFilter пожалуйста скинь сюда.
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 26.03.2010, 22:59   #16
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

за всю визуализацию отвечает функция, вместе с функцией TBASSPlayer.TimerFFTTimer в bassplayer.pas:
Код:
procedure TMainForm.DisplayFFTBand(Sender: TObject; Bands : TBandOut);
var
   tmpRect, BarRect : TRect;
   j : integer;
begin
 // To prevent flickering, use temporary image buffer and process as follows
 // 1) Draw output image on temporary image buffer.
 // 2) Copy temporary image buffer's image to display canvas

 // Copy BasicBMP's image to GaugeTempBMP(used as temporary image buffer)
   BitBlt(GaugeTempBMP.Canvas.Handle, // handle to destination device context
          GaugeRect.Left,	// x-coordinate of destination rectangle's upper-left corner
          GaugeRect.Top,	// y-coordinate of destination rectangle's upper-left corner
          GaugeTempBMP.Width,	// width of destination rectangle
          GaugeTempBMP.Height,	// height of destination rectangle
          BasicBMP.Canvas.Handle, // handle to source device context
          GaugeRect.Left,	// x-coordinate of source rectangle's upper-left corner
          GaugeRect.Top,	// y-coordinate of source rectangle's upper-left corner
          SRCCOPY);             // Copies the source rectangle directly to the destination rectangle.
 // Substituted Canvas.CopyRect with BitBlt for speed up
 // GaugeTempBMP.Canvas.CopyRect(GaugeRect, BasicBMP.Canvas, GaugeRect);

 // Draw spectrum image to GaugeTempBMP
   for j := 1 to HBlockCount do
   begin
      if Bands[j-1] > VLimit then
         Bands[j-1] := VLimit;

      if Bands[j-1] > 0 then
      begin
     // Copy partial image of DisplayBar to GaugeTempBMP
        BarRect.Left := 0;
        BarRect.Right := BlockWidth;
        BarRect.Top := VLimit - Bands[j-1];
        if BarRect.Top < 0 then
           BarRect.Top := 0;
        BarRect.Bottom := DisplayBar.Height;

        tmpRect.Left := (BlockWidth + HBlockGap) * (j - 1) + 2;
        tmpRect.Right := tmpRect.Left + BlockWidth;
        tmpRect.Top := BarRect.Top;
        tmpRect.Bottom := BarRect.Bottom;

        BitBlt(GaugeTempBMP.Canvas.Handle,tmpRect.Left,tmpRect.Top,BlockWidth,tmpRect.Bottom - tmpRect.Top + 1,
DisplayBar.Canvas.Handle,BarRect.Left,BarRect.Top,SRCCOPY);
      end;

      if Bands[j-1] >= trunc(PeakValue[j]) then
      begin
         PeakValue[j] := Bands[j-1] + 0.01;  // 0.01 : to compensate round off
         PassedCounter[j] := 0;
      end else if Bands[j-1] < trunc(PeakValue[j]) then
      begin
         if trunc(PeakValue[j]) > 0 then
         begin
            with GaugeTempBMP.Canvas do
            begin
            // Draw peak line
               Pen.Color := TColor(RGB(192, 192, 192));   // color for peak line
               MoveTo((BlockWidth + HBlockGap) * (j - 1) + 2, VLimit - trunc(PeakValue[j]));
               LineTo((BlockWidth + HBlockGap) * (j - 1) + 2 + BlockWidth, VLimit - trunc(PeakValue[j]));
            end;

      // Followings are to show simillar spectrum image to WINAMP's
      //  - Put delay time before lowering peak line
      //  - Accerate lowering speed according to the time elapsed
            if PassedCounter[j] >= 8 then
                PeakValue[j] := PeakValue[j] - 0.3 * (PassedCounter[j] - 8);

            if PeakValue[j] < 0 then
               PeakValue[j] := 0
            else
               inc(PassedCounter[j]);
         end;
      end;
   end;
 // Copy GaugeTempBMP's image to GaugePaintBox
   BitBlt(GaugePaintBox.Canvas.Handle,GaugeRect.Left,GaugeRect.Top,GaugeTempBMP.Width,GaugeTempBMP.Height,
GaugeTempBMP.Canvas.Handle,GaugeRect.Left,GaugeRect.Top,SRCCOPY);
end;
другие переменные есть в исходнике. вроде как с комментариями
если чем помог, поставьте отзыв на весы

Последний раз редактировалось Xatr; 26.03.2010 в 23:06.
Xatr вне форума Ответить с цитированием
Старый 26.03.2010, 23:40   #17
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Не пойму - зачем столько Bitmap'ов создавать. Я пока читал код запутался. Может кто-нибудь объяснит? Если я правильно понял, то процедуры DisplayFFTBands и CreateImageBasic они строят анализатор, но столько битмапов что не понял что к чему. И что за функция BitBlt. Пробовал понять, но как то не сразу дошло. Кроме координат ничего не понял. Это тоже по возможности объясните.
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 27.03.2010, 00:16   #18
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

каждый служит для отрисовки своих частей.
GaugeTempBMP - для самих баров потом пририсовываются пики
В BasicBMP - нарисованы координаты, т.е. картинка при бездействии.

BitBlt
или BitBlt

Вообще-то при отрисовке баров используются функции из bass.dll
если чем помог, поставьте отзыв на весы

Последний раз редактировалось Xatr; 27.03.2010 в 01:14.
Xatr вне форума Ответить с цитированием
Старый 27.03.2010, 01:04   #19
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Короче ко всем чертям, скидываю с себя все функции bass.dll, и просто придётся писать через TBаssPlayer, так как смотрел код и не нашёл ни единой функции из bass.dll 2.X. А значит прога эта её даже не использует...Просто разочарован
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 27.03.2010, 12:30   #20
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

.Phoenix, нельзя вот так сразу, без подготовки, бац и написать крутую визуализацию. Потрать некоторое время на изучения графики в Windows, в VCL, а затем возвращайся к созданию красивой спектрограммы. По твоим вопросам я вижу что ты ни в зуб ногой по части вывода графики, рановато я считаю тебе еще задаваться такими вопросами.

И прежде чем рисовать красиво, сделай сперва с прогрессбарами например отображение, поставь вертикально их десять штук (или сколько там тебе надо), отладь чтобы все работало, а затем можно приступать к наведению красоты. Сэкономишь время на отладке, а то все перепутается и не будешь знать где в коде ошибка.

Тоже касается графической части, создай заготовку сперва, проверь и отладь вручную, добейся такого отображения как ты хочешь, а потом уже прикрути готовый модуль к твоему плееру вместо прогрессбаров.

Любую задачу удобнее решать если применить модульный подход - т.е. разбить на части. А то ты сразу за все берешься и естественно ничего не получается. Я специально ничего конкретно не объясняю, т.к. не вижу пока конкретных вопросов.
Разве что про BitBlt - это функция из WinAPI а точнее из WinGDI, к-рая копирует битмап, подробнее смотри в MSDN или в справке к Дельфи.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 27.03.2010 в 12:34.
mutabor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто знает что это за компонент edik Компоненты Delphi 2 05.12.2009 23:06
Подскажите если кто знает что это за компоненты edik Компоненты Delphi 7 02.12.2009 20:24
Может кто нибудь знает, что это такое? vinokur Помощь студентам 5 27.10.2009 19:18
Что это такое и как это того... Alex Cones Общие вопросы Delphi 2 11.10.2009 12:04