Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

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

icq: 482-612-193
skype: skype_08rus
По умолчанию

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

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

icq: 401708834
По умолчанию

Да что ты привязался к этому PaintBox'у. PaintBox это просто видимая часть айсберга, графическое его (спектроанализатора или чего там тебе надо) представление. Можешь хоть кнопки столбиками выстрой и меняй высоту им.
mutabor вне форума   Ответить с цитированием
Старый 26.03.2010, 17:53   #14
nXs
Форумчанин
 
Регистрация: 26.02.2010
Адрес: г. Винница
Сообщений: 126
Репутация: 23
По умолчанию

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

icq: 482-612-193
skype: skype_08rus
По умолчанию

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

за всю визуализацию отвечает функция, вместе с функцией 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; 27.03.2010 в 00:06.
Xatr вне форума   Ответить с цитированием
Старый 27.03.2010, 00:40   #17
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
Репутация: 24

icq: 482-612-193
skype: skype_08rus
По умолчанию

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

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

BitBlt
или BitBlt

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

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

icq: 482-612-193
skype: skype_08rus
По умолчанию

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

icq: 401708834
По умолчанию

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

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

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

Любую задачу удобнее решать если применить модульный подход - т.е. разбить на части. А то ты сразу за все берешься и естественно ничего не получается. Я специально ничего конкретно не объясняю, т.к. не вижу пока конкретных вопросов.
Разве что про BitBlt - это функция из WinAPI а точнее из WinGDI, к-рая копирует битмап, подробнее смотри в MSDN или в справке к Дельфи.

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


01:28.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru